第4章 SpringAI提示词工程实战|模板Prompt、少样本、链式提示落地
文章目录
- 一、为什么后端必须学提示词工程?
- 二、三大提示词角色:系统|用户|助手
- 2.1 SystemMessage 系统提示词(规则层)
- 2.2 UserMessage 用户提示词(输入层)
- 2.3 AssistantMessage 助手提示词(历史结果层)
- 三、PromptTemplate 动态模板实战(解决硬编码痛点)
- 3.1 核心优势
- 3.2 实战:动态模板问答
- 四、Few-Shot 少样本提示实战(提升AI精准度神器)
- 4.1 业务场景
- 4.2 完整Few-Shot代码实现
- 五、链式Prompt:复杂问题分步拆解
- 5.1 适用场景
- 5.2 链式Prompt实战案例
- 六、Prompt持久化:yml配置存放提示词(企业规范)
- 6.1 yml配置提示词
- 6.2 自定义配置类读取提示词
- 6.3 业务接口调用(零硬编码)
- 七、三大通用业务Prompt模板(可直接上线)
- 7.1 AI文案生成通用模板(生产可用)
- 7.2 AI内容分类通用模板(生产可用)
- 7.3 AI文本总结通用模板(生产可用)
- 八、本章总结
- 九、下期预告
🔥专栏系列:Spring Boot AI 实战教程
上一章我们彻底吃透了 SpringAI 核心 API:同步、异步、流式对话,解决了能不能调、怎么调、如何稳定调的问题。
但很多开发者上线后发现一个致命问题:模型能调通,但是输出效果极其垃圾。
忽左忽右、回答啰嗦、格式不统一、分类不准、答非所问。
其实大模型本身能力固定,上限由提示词(Prompt)决定。
算法决定下限,提示词工程决定AI业务落地上限。
本章专门针对后端开发者,不讲虚的话术技巧,只讲可代码化、可工程化、可持久化的提示词方案:Prompt模板、动态变量、Few-Shot少样本、链式拆解、yml持久化、通用业务模板。
读完本章,你可以彻底解决 AI 输出不稳定、格式混乱、业务不精准的生产难题。
✅本章核心收获
理解后端视角下的提示词工程核心价值(区别前端玩法)
彻底分清系统/用户/助手三类提示词的职责与落地场景
掌握 SpringAI PromptTemplate 动态变量模板开发
掌握 Few-Shot 少样本提示,让AI无脑对齐业务规则
掌握链式Prompt,解决复杂业务无法一次推理的问题
实现提示词yml持久化,告别代码硬编码
拿到文案生成、内容分类、文本总结三套企业通用Prompt模板
一、为什么后端必须学提示词工程?
很多后端同学有一个误区:提示词是产品、运营玩的,后端只需要调接口就行。
在 AI 项目中,这个观念致命错误。
大模型是“模糊智能”,业务系统是“精准严格”。
如果没有标准化提示词约束,模型输出永远是随机的:
同一问题,两次回答格式不一样
分类任务偶尔对、偶尔错
输出超长文本、废话过多
不按照指定JSON格式返回,导致代码解析报错
提示词工程的后端本质:
用标准化、结构化、可复用的规则,把大模型的随机输出,变成业务可控的确定性输出。
这也是企业 AI 项目能否上线、能否稳定运行的核心关键。
二、三大提示词角色:系统|用户|助手
SpringAI 的 Prompt 并不是简单字符串拼接,而是基于角色消息机制,这也是正规提示词工程的基础。
三者职责完全不同,混用会直接导致 AI 逻辑混乱。
2.1 SystemMessage 系统提示词(规则层)
定位:全局规则、角色定义、输出规范、业务约束
作用于整个对话生命周期,优先级最高。用于告诉模型:你是谁、你要怎么做、输出什么格式、禁止什么内容。
适合放置内容:
角色定义:你是资深Java工程师、你是智能分类机器人
格式约束:必须输出JSON、必须简洁、禁止冗余描述
行为约束:禁止编造数据、不确定就返回空
特点:一次定义、全局生效、不随用户提问变化
2.2 UserMessage 用户提示词(输入层)
定位:用户真实提问、业务待处理数据
每一次接口请求的动态内容,变量、文本、问题全部放这里。
特点:每次请求都不一样,是动态变化的核心数据
2.3 AssistantMessage 助手提示词(历史结果层)
定位:模型历史回答记录
多用于多轮对话,用来拼接上下文,让模型记住上一轮回答,实现连续对话、上下文理解。
特点:用于记忆链路,单轮对话几乎用不到
三、PromptTemplate 动态模板实战(解决硬编码痛点)
传统写法直接字符串拼接提示词,代码丑陋、无法复用、无法统一管理。
SpringAI 提供PromptTemplate模板机制,支持占位符动态替换,是企业开发的标准写法。
3.1 核心优势
提示词与业务代码解耦
支持多变量动态渲染
支持模板复用、统一维护
为后续yml持久化打下基础
3.2 实战:动态模板问答
需求:传入【用户提问】和【回答风格】,动态生成定制化回复
@RestController@RequestMapping("/ai/prompt")publicclassPromptTemplateController{@AutowiredprivateChatClientchatClient;@GetMapping("/template")publicStringtemplatePrompt(Stringquestion,Stringstyle){// 1. 定义模板,使用 {变量名} 占位StringtemplateStr="请以{style}的风格回答用户问题,回答简洁专业:{question}";PromptTemplatepromptTemplate=newPromptTemplate(templateStr);// 2. 设置动态变量参数Map<String,Object>params=newHashMap<>();params.put("style",style);params.put("question",question);// 3. 渲染生成最终PromptPromptprompt=promptTemplate.create(params);// 4. 调用模型returnchatClient.prompt(prompt).call().content();}}测试效果:
style=通俗易懂:大白话讲解
style=学术严谨:专业公式、严谨描述
style=幽默风趣:轻松趣味回答
四、Few-Shot 少样本提示实战(提升AI精准度神器)
很多业务场景,单纯靠文字描述规则,AI 永远理解不透彻。
描述一百句规则,不如给一个样例。
Few-Shot(少样本提示)就是:在提示词中带入标准答案案例,让AI模仿你的业务逻辑。
适合:分类、标签、评分、规则匹配、标准化输出场景。
4.1 业务场景
舆情内容情感分类:分为【正面、中性、负面】
人工给3组标准案例,让AI严格模仿分类逻辑。
4.2 完整Few-Shot代码实现
@GetMapping("/fewshot")publicStringfewShotPrompt(Stringcontent){// 1. 系统规则定义StringsystemRule="你是内容情感分类机器人,仅输出【正面、中性、负面】,不要多余解释\n"+"以下是标准分类案例:\n"+"案例1:内容:今天天气很好,心情不错 => 正面\n"+"案例2:今天正常上班,无特殊事情 => 中性\n"+"案例3:服务太差,体验非常糟糕 => 负面\n";// 2. 用户待分类内容StringuserInput="请对以下内容进行分类:"+content;returnchatClient.prompt().system(systemRule).user(userInput).call().content();}✅Few-Shot少样本核心价值(生产必用)
纯文字规则描述属于「抽象约束」,模型理解存在偏差;带入标准样例属于「具象模仿」,让AI精准对齐业务规则,从“猜逻辑”变成“照规则执行”。在分类、标签、风险筛查等精准业务中,少样本提示是提升准确率的最优低成本方案,无需微调模型即可大幅优化输出效果。
五、链式Prompt:复杂问题分步拆解
大模型有一个通病:复杂问题一次性推理容易翻车。
如果你的业务需要:先理解、再提取、再判断、再总结、再格式化,一次性提示词极易出错。
链式Prompt思想:把一个复杂大任务,拆成多步简单小任务,分步调用、分步收敛。
5.1 适用场景
长文本解析 + 关键信息提取 + 总结
问题拆解 + 逻辑分析 + 答案生成
需要严格步骤、不可跳跃的业务
5.2 链式Prompt实战案例
需求:对一段用户评论先提取关键信息 -> 判断情感 -> 生成简短总结
@GetMapping("/chain")publicStringchainPrompt(Stringcomment){// 第一步:提取关键信息Stringstep1=chatClient.prompt().system("你是信息提取助手,只提取文本中的关键核心内容,不要多余描述").user("待处理内容:"+comment).call().content();// 第二步:情感判断Stringstep2=chatClient.prompt().system("判断文本情感,仅输出:正面/中性/负面").user(step1).call().content();// 第三步:生成最终总结StringfinalResult=chatClient.prompt().system("根据关键信息和情感,生成一句简短总结").user("关键信息:"+step1+",情感:"+step2).call().content();returnfinalResult;}✅链式Prompt核心优势**(企业落地重点)**
降低推理错误率:拆分复杂任务为单一简单步骤,规避大模型一次性推理逻辑混乱、输出翻车问题
全链路可控可回溯:每一步执行结果可打印、可校验、可单独调优,线上问题精准定位
业务扩展性极强:可按需增加校验、过滤、格式化步骤,适配复杂企业级AI业务场景
输出稳定性拉满:分步收敛结果,彻底解决复杂业务输出格式错乱、内容缺失、逻辑矛盾问题
六、Prompt持久化:yml配置存放提示词(企业规范)
绝对不要在代码里写大段硬编码提示词!
后期修改提示词需要重启服务、改代码、重新部署,极其不优雅。
企业标准方案:提示词全部放入yml配置,动态读取、热更新可扩展。
6.1 yml配置提示词
# 自定义AI提示词配置ai:prompt:# 通用文案生成提示词article:"你是专业文案生成助手,语言流畅、正式、段落清晰,根据用户主题生成短文,字数控制在300字左右,主题:{topic}"# 内容分类提示词classify:"你是内容分类机器人,严格根据样例输出正面/中性/负面,仅输出结果,无多余解释。待分类内容:{content}"# 文本总结提示词summary:"请对以下文本进行精简总结,保留核心信息,字数精简至100字以内:{text}"6.2 自定义配置类读取提示词
@ConfigurationProperties(prefix="ai.prompt")@Component@DatapublicclassAiPromptProperties{privateStringarticle;privateStringclassify;privateStringsummary;}6.3 业务接口调用(零硬编码)
@RestController@RequestMapping("/ai/prompt/biz")publicclassBizPromptController{@AutowiredprivateChatClientchatClient;@AutowiredprivateAiPromptPropertiespromptProperties;// AI文案生成@GetMapping("/article")publicStringgenArticle(Stringtopic){PromptTemplatetemplate=newPromptTemplate(promptProperties.getArticle());returnchatClient.prompt(template.create(Map.of("topic",topic))).call().content();}// AI文本总结@GetMapping("/summary")publicStringsummary(Stringtext){PromptTemplatetemplate=newPromptTemplate(promptProperties.getSummary());returnchatClient.prompt(template.create(Map.of("text",text))).call().content();}}✅企业规范核心优势
解耦代码与提示词:彻底告别Java代码硬编码大段Prompt,代码更整洁优雅,符合开发规范
动态可配置化:无需修改业务代码、无需重启服务,仅修改配置即可调整AI输出风格与规则
支持动态热更新:后续可无缝接入Nacos、Apollo配置中心,实现提示词在线热更新,适配生产动态调优场景
统一维护管理:所有业务Prompt集中管理,避免多业务模块提示词混乱、重复、不统一问题
七、三大通用业务Prompt模板(可直接上线)
本章最后送给大家三套企业可直接落地的标准Prompt模板,覆盖90%后端AI业务场景。
7.1 AI文案生成通用模板(生产可用)
适配场景:电商产品文案、公众号短文、活动宣传文案、技术科普内容生成
标准化Prompt模板
【角色】你是一名专业的企业文案生成师,文笔流畅、正式严谨、适配公域发布场景。 【规则】1. 根据用户给定主题生成完整短文,结构清晰,分段展示;2. 字数严格控制在300字左右,误差不超过20字;3. 无废话、无凑数语句、不编造虚假信息;4. 语言通俗易懂,适配大众阅读; 【输入主题】{topic} 【输出要求】直接输出成品文案,无需额外解释、无需标题、无需备注适配场景:活动文案、产品介绍、短文生成
模板规则:角色定位 + 字数限制 + 风格约束 + 禁止废话
7.2 AI内容分类通用模板(生产可用)
适配场景:用户评论情感分析、内容风险识别、文本标签自动归类、舆情内容筛查
标准化Prompt模板
【角色】你是精准文本分类机器人,严格按照规则执行分类任务,零主观判断。 【分类枚举】仅允许输出:正面、中性、负面,禁止输出其他任何文字 【参考样例】 案例1:内容:今天天气很好,心情不错 => 正面 案例2:今天正常上班,无特殊事情 => 中性 案例3:服务太差,体验非常糟糕 => 负面 【规则】严格模仿上述案例逻辑,只看用户文本表达情绪,不额外拓展、不解释原因 【待分类内容】{content} 【输出要求】仅单独输出分类结果适配场景:评论情感、内容风险、标签归类
模板规则:固定枚举输出 + Few-Shot样例 + 禁止多余文字
7.3 AI文本总结通用模板(生产可用)
适配场景:长新闻总结、对话记录提炼、文章摘要生成、用户反馈内容汇总
标准化Prompt模板
【角色】你是专业文本摘要助手,擅长精简提炼核心信息。 【规则】1. 保留原文核心观点、关键数据、核心事件;2. 删除冗余话术、重复内容、无效修饰词;3. 总结字数控制在100字以内;4. 语句通顺、逻辑连贯,不改变原文语义; 【待总结文本】{text} 【输出要求】直接输出精简摘要,无多余注释、无铺垫语句适配场景:长文本提炼、对话总结、内容摘要
模板规则:保留核心信息、剔除无效话术、固定字数上限
八、本章总结
提示词工程是后端AI项目稳定落地的核心,决定模型输出质量与业务可用性;
System/User/Assistant 三类提示词各司其职,系统管规则、用户管输入、助手管上下文;
PromptTemplate 实现动态变量模板,彻底告别字符串硬编码拼接;
Few-Shot 少样本通过案例模仿,大幅提升分类、规则类任务准确率;
链式Prompt拆解复杂任务,分步执行解决大模型一次性推理翻车问题;
提示词yml持久化是企业标准,便于统一维护、动态调整、热更新;
文案、分类、总结三大通用模板,可直接用于生产业务开发。
九、下期预告
下一章我们将讲解SpringAI 对话记忆与多轮上下文,手把手实现真正的“连续聊天机器人”,解决AI记不住历史对话的痛点!
💡 专栏持续更新企业级SpringAI实战干货,无废话纯落地,欢迎点赞+收藏+关注!
本系列完结时一并上传源码。