提示词工程实践指南
和大模型打交道,提示词的质量直接决定输出效果。同样一个问题,换个问法,结果可能天差地别。
前面的章节聊过提示词的基础知识,这篇文章专门讲讲在Spring AI中怎么把这些技巧落地。
系统提示词与用户提示词
Spring AI遵循OpenAI的设计规范,把提示词分成两类:
- 系统提示词(System):设定AI的角色、行为准则、回答风格
- 用户提示词(User):具体的问题或指令
代码示例
在ChatClient中设置这两类提示词非常直观:
@RestController
@RequestMapping("/prompt")
public class PromptController {
private final ChatClient chatClient;
@GetMapping("/interview")
public Flux<String> mockInterview(@RequestParam String question) {
return chatClient.prompt()
// 系统提示词:定义角色
.system("你是一位资深的Java技术面试官,有10年面试经验。" +
"回答问题时要专业严谨,适当追问细节," +
"对模糊的回答要指出不足之处。")
// 用户提示词:具体问题
.user(question)
.stream()
.content();
}
}
两种设置方式
方式一:构建ChatClient时设置默认值
@Bean
public ChatClient chatClient(ChatModel chatModel) {
return ChatClient.builder(chatModel)
.defaultSystem("你是电商平台的智能导购助手," +
"擅长根据用户需求推荐商品," +
"回答要简洁实用。")
.build();
}
这样每次调用都会自动带上这个系统提示词。
方式二:调用时动态设置
// 调用时的system会覆盖默认设置
chatClient.prompt()
.system("你现在是一个严格的代码审查员")
.user("请审查这段代码:" + code)
.call()
.content();
注意:如果使用的是Prompt对象中的SystemMessage,行为会有所不同——它是追加而不是覆盖:
system() 与 SystemMessage 的差异
chatClient.prompt().system("...")— 覆盖默认的系统提示词- 通过
Prompt对象传入SystemMessage— 追加到现有系统提示词之后
使用错误的方式可能导致系统提示词叠加,产生意料之外的模型行为。
// 这种方式是追加,不是覆盖
Prompt prompt = new Prompt(
List.of(
new SystemMessage("补充说明:重点关注安全性问题"),
new UserMessage("分析这段代码")
)
);
付费内容提示
该文档的全部内容仅对「JavaUp项目实战&技术讲解」知识星球用户开放
加入星球后,你可以获得:
- 超级八股文:100万+字的全栈技术知识库,涵盖技术核心、数据库、中间件、分布式等深度剖析的讲解
- 讲解文档:超级AI智能体、黑马点评Plus、大麦、大麦pro、大麦AI、流量切换、数据中台的从0到1的详细文档
- 讲解视频:超级AI智能体、黑马点评Plus、大麦、大麦pro、大麦AI、流量切换、数据中台的核心业务详细讲解
- 1 对 1 解答:可以对我进行1对1的问题提问,而不仅仅只限于项目
- 针对性服务:有没理解的地方,文档或者视频还没有讲到可以提出,本人会补充
- 面试与简历指导:提供面试回答技巧,项目怎样写才能在简历中具有独特的亮点
- 中间件环境:对于项目中需要使用的中间件,可直接替换成我提供的云环境
- 面试后复盘:小伙伴去面试后,如果哪里被面试官问住了,可以再找我解答
- 远程的解决:如果在启动项目遇到问题,本人可以帮你远程解决
进入星球后,即可享受上述所有服务,保证不会再有其他隐藏费用。
