使用 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=你是谁
朔风