跳到主要内容

提示词工程实践指南

和大模型打交道,提示词的质量直接决定输出效果。同样一个问题,换个问法,结果可能天差地别。

前面的章节聊过提示词的基础知识,这篇文章专门讲讲在Spring AI中怎么把这些技巧落地。

系统提示词与用户提示词

Spring AI遵循OpenAI的设计规范,把提示词分成两类:

  • 系统提示词(System):设定AI的角色、行为准则、回答风格
  • 用户提示词(User):具体的问题或指令
System Prompt 与 User Prompt 的分工
System Prompt 与 User Prompt 的分工

代码示例

在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的问题提问,而不仅仅只限于项目
  • 针对性服务:有没理解的地方,文档或者视频还没有讲到可以提出,本人会补充
  • 面试与简历指导:提供面试回答技巧,项目怎样写才能在简历中具有独特的亮点
  • 中间件环境:对于项目中需要使用的中间件,可直接替换成我提供的云环境
  • 面试后复盘:小伙伴去面试后,如果哪里被面试官问住了,可以再找我解答
  • 远程的解决:如果在启动项目遇到问题,本人可以帮你远程解决
进入星球后,即可享受上述所有服务,保证不会再有其他隐藏费用。
知识星球二维码

1. 打开微信 -> 扫描左侧二维码 -> 加入「JavaUp项目实战&技术讲解」知识星球

2. 查看星球使用指导,获取完整项目讲解资料索引

👉 点击解锁全部付费内容
🎁优惠