Skip to content
章节导航

使用 SpringAI Alibaba 为你的 AI 赋予默认人设

参考示例

shell
1. **身份设定** (Role/Identity)
   - "你是一位资深软件架构师"
   - "你是一个10年经验的营销专家"

2. **任务目标** (Task Objective)
   - "请分析以下代码的性能瓶颈"
   - "为新产品设计营销方案"

3. **上下文信息** (Context)
   - 背景知识
   - 相关数据
   - 用户信息

4. **指令说明** (Instructions)
   - 具体步骤
   - 注意事项
   - 处理逻辑

5. **输出格式** (Output Format)
   - JSON/XML/表格
   - Markdown格式
   - 分点/分段要求

6. **约束条件** (Constraints)
   - 字数限制
   - 语言风格
   - 禁止内容

7. **示例参考** (Examples)
   - 输入-输出范例

系统提示词配置

修改 ChatConfig.java 文件

java
import com.alibaba.cloud.ai.dashscope.chat.DashScopeChatModel;
import com.alibaba.cloud.ai.dashscope.chat.DashScopeChatOptions;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.client.advisor.SimpleLoggerAdvisor;
import org.springframework.ai.ollama.OllamaChatModel;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;

/**
 * ChatConfig
 *
 * @author 朔风
 * @date 2026-03-31 15:53
 */
@Configuration
public class ChatConfig {

    private static final String DEFAULT_PROMPT = """
            你是一个专业、耐心且富有启发性的 AI 学习助手,名字叫朔风。
            你的目标是帮助用户深入理解知识点,而不仅仅是提供标准答案。
                    请遵循以下原则进行回复:
                    1. 角色设定:你是用户的导师,用鼓励性的语气交流。
                    2. 循序渐进:如果用户问一个复杂问题,先解释基础概念,再逐步深入。
                    3. 举例说明:尽量使用生活中的例子或代码示例来解释抽象概念。
                    4. 启发思考:在给出答案后,提出一个相关的问题,引导用户进一步思考。
                    5. 结构清晰:使用 Markdown 格式(如标题、列表、加粗)使内容易于阅读。
                    6. 准确严谨:确保提供的信息是最新且准确的,如果遇到不确定的领域,请诚实告知。
            """;


    /**
     * 配置本地 Ollama 的 ChatClient(带日志记录)
     */
    @Bean(name = "ollamaChatClient")
    public ChatClient ollamaChatClient(OllamaChatModel ollamaChatModel) {
        return ChatClient.builder(ollamaChatModel)
                .defaultSystem("你是一个博学的本地大模型,名字叫朔风")
                .defaultAdvisors(new SimpleLoggerAdvisor()) // 自动记录请求和响应日志
                .build();
    }

    /**
     * 配置云端 DashScope 的 ChatClient(带日志记录)
     */
    @Bean(name = "dashscopeChatClient")
    @Primary // 设置为默认ChatClient
    public ChatClient dashscopeChatClient(DashScopeChatModel dashscopeChatModel) {
        return ChatClient.builder(dashscopeChatModel)
                .defaultAdvisors(new SimpleLoggerAdvisor()) // 自动记录请求和响应日志
                //覆盖配置文件配置
                .defaultSystem(DEFAULT_PROMPT)
                .defaultOptions(DashScopeChatOptions.builder()
                        //指定模型 优先级高于 配置文件
                        .withModel("qwen-plus")
                        //指定温度 优先级高于 配置文件
                        .withTemperature(0.7)
                        .build())
                .build();
    }


}

访问

访问阿里云模型

shell
http://localhost:8080/api/ai/stream/chat?question=你是谁

访问本地模型

shell
http://localhost:8080/api/ai/ollamaStreamChat/chat?question=你是谁

提示词控制器

java
import lombok.RequiredArgsConstructor;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.messages.SystemMessage;
import org.springframework.ai.chat.messages.UserMessage;
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;

import java.util.List;

/**
 * 提示词控制器 - 管理系统提示词和用户交互
 *
 * @author 朔风
 * @date 2026-03-31 16:35
 */
@RestController
@RequestMapping("/api/prompt/ai")
@RequiredArgsConstructor
public class PromptController {

    private final ChatClient dashscopeChatClient;
    private final ChatClient ollamaChatClient;

    /**
     * 带系统提示词的聊天接口
     */
    @GetMapping(value = "/session/chat-with-prompt", produces = "text/html;charset=utf-8")
    public Flux<String> chatWithSystemPrompt(@RequestParam("question") String question) {

        Prompt prompt = new Prompt(List.of(
                new SystemMessage("""
                    你是一个专业、耐心且富有启发性的 AI 学习助手,名字叫朔风。
                    你的目标是帮助用户深入理解知识点,而不仅仅是提供标准答案。
                    请遵循以下原则进行回复:
                    1. 角色设定:你是用户的导师,用鼓励性的语气交流。
                    2. 循序渐进:如果用户问一个复杂问题,先解释基础概念,再逐步深入。
                    3. 举例说明:尽量使用生活中的例子或代码示例来解释抽象概念。
                    4. 启发思考:在给出答案后,提出一个相关的问题,引导用户进一步思考。
                    5. 结构清晰:使用 Markdown 格式(如标题、列表、加粗)使内容易于阅读。
                    6. 准确严谨:确保提供的信息是最新且准确的,如果遇到不确定的领域,请诚实告知。
                    """),
                new UserMessage(question)
        ));

        // 使用构造好的 Prompt
        return dashscopeChatClient.prompt(prompt).stream().content();
        //使用配置中的系统提示词
//        return dashscopeChatClient.prompt(question).stream().content();
    }
    
}

访问

hell
http://localhost:8080/api/prompt/ai/session/chat-with-prompt?question=你是谁