Spring AI 05 · Prompt 工程基础

📅 2026/8/24 23:30:08
Spring AI 05 · Prompt 工程基础
05 · Prompt 工程基础 学完能做什么写出结构清晰的 system/user 提示用 PromptTemplate 做参数化用少样本引导输出格式——这是 RAG 效果的地基。⏱️ 预计耗时40 分钟含动手 依赖前置第 04 章 难度一句话提示词写得好不好直接决定回答质量。核心三招清晰的 system 定角色定规则、用模板把变量参数化、用少样本示范想要的格式。1. system 与 user 的分工system设定「你是谁、遵守什么规则、输出什么风格」。全程生效是你的「控场」手段。user本轮具体问题或指令。StringanswerchatClient.prompt().system( 你是严谨的企业知识库助手。规则 1. 只依据用户提供的资料回答资料没有就说「我不知道」。 2. 用中文回答控制在 3 句以内。 3. 不要编造数字或政策。 ).user(我们的年假有几天).call().content(); 好的 system 提示 明确身份 明确规则 明确边界尤其「不知道就说不知道」这是 RAG 抗幻觉的关键见第 34 章。2. PromptTemplate把提示参数化别用字符串拼接用模板 占位符{}更清晰也更安全StringanswerchatClient.prompt().user(u-u.text( 请把下面这段话翻译成 {lang}只输出译文 {content} ).param(lang,英文).param(content,向量数据库让语义搜索成为可能)).call().content();也可以显式用PromptTemplate生成消息PromptTemplatetplnewPromptTemplate(给「{topic}」写一句话广告语);Promptprompttpl.create(Map.of(topic,Spring AI 教程));StringsloganchatClient.prompt(prompt).call().content();3. 少样本Few-shot用例子教模型想要固定格式时与其啰嗦描述不如直接给几个「输入→输出」示范StringresultchatClient.prompt().system(你是情感分类器只输出正面 / 负面 / 中性).user( 示例 输入这手机太好用了 → 正面 输入客服态度极差 → 负面 输入还行吧一般般 → 中性 现在分类 输入物流很快但包装破了 → ).call().content();少样本能显著提升「输出格式稳定性」是低成本高收益的技巧。4. 提示词的结构化写法推荐模板复杂任务建议按固定结构组织模型更容易「听话」# 角色 你是 ... # 任务 请完成 ... # 约束 - 只用中文 - 不超过 200 字 - 不确定就说「无法确定」 # 输出格式 - 用要点列表 # 输入 {userContent}在 RAG 里检索到的资料通常就放在「# 参考资料」这一段第 17 章定制 RAG 模板会用到。5. 与 RAG 的衔接为什么现在就要学RAG 的本质是检索到资料 → 塞进 prompt → 让模型基于资料回答。所以「怎么把资料塞进提示、怎么约束模型只用资料」全是 Prompt 工程。提前看一眼 RAG 的提示骨架system: 你只能根据 资料 回答资料没有就说不知道。 user: 资料 {检索到的 chunk 们} /资料 问题{用户问题}第 16、17 章会把这套骨架用QuestionAnswerAdvisor自动化但底层就是这段提示。现在理解了后面就不会觉得 Advisor 是黑盒。6. 实用避坑清单坏习惯改进规则写在 user 里稳定规则放 system字符串手动拼变量用{}占位 param()只描述格式不给例子加 2~3 个少样本不设边界任模型发挥明确「不知道就说不知道」temperature 默认不管事实问答调低0~0.37. 一句话总结Prompt 工程三板斧system 定角色定规则、模板参数化变量、少样本示范格式再加「不知道就说不知道」的边界约束就是高质量 RAG 的地基。➡️ 下一章06-最小RAG全景Demo.md把前 5 章串起来用最少代码跑通一个「灌资料→检索→回答」的完整 RAG。