Spring AI(7) :哄哄模拟器-提示词工程和实战游戏
本章代码已分享至Gitee:https://gitee.com/lengcz/ai-study.git文章目录哄哄模拟器-提示词工程1. 清晰明确的指令2. 使用分割符标记输入3. 按步骤拆解复杂任务4. 提供输入输出示例Few-shot5. 明确要求输出格式6. 给模型设定一个角色综合实战示例融合多个技巧实战哄哄模拟器提示词完整提示词提示词设计拆解哄哄模拟器代码实现哄哄模拟器-提示词工程提示词工程Prompt Engineering): 通过优化提示词使大模型生成出尽可能理想的内容这一过程就叫提示词工程。好的这几个点是提示词工程中最核心的实践技巧。下面我为每一个点分别提供错误示例和优化后的正确示例并附上简要解析方便你直观理解差异。1. 清晰明确的指令核心用最少的歧义说明“要什么”而不是“不要什么”。错误示例模糊、啰嗦“帮我写点关于机器学习的文字不要太学术也不要太口水要那种让人看了觉得挺有意思的但又不能太不专业。”优化示例清晰、具体“请用初中生能听懂的比喻写一段 200 字左右的介绍解释‘机器学习’和‘传统编程’的核心区别。要求不使用数学公式用‘教小孩认猫’作为主线类比。”2. 使用分割符标记输入核心将指令、上下文、待处理数据明确隔开防止模型混淆。错误示例混在一起“把下面这段话翻译成英文 并且总结核心观点 人工智能正在改变医疗行业 尤其是在影像诊断方面。”优化示例用###或 分割### 任务 ### 先将下文翻译成英文再用一句话总结核心观点。 ### 待处理文本 ### 人工智能正在改变医疗行业尤其是在影像诊断方面。3. 按步骤拆解复杂任务核心把多步推理显式写成步骤减少模型跳步或遗漏。错误示例一步式要求“分析这篇销售报告找出问题并给出改进建议。”优化示例分步执行请按以下步骤处理附件的销售报告 步骤1提取 Q3 各区域的总销售额 步骤2对比 Q2找出下降幅度超过 10% 的区域 步骤3针对步骤2找出的区域列出可能的原因仅限内部运营因素 步骤4基于原因给出 3 条可落地的改进建议。4. 提供输入输出示例Few-shot核心用 1~3 个例子“告诉”模型你想要的格式、风格和推理路径。错误示例零样本依赖模型猜测“将客户评价分为正面、中性、负面三类。”优化示例带示例请将以下客户评价按情感分为【正面】【中性】【负面】。 示例1 输入“物流超快第二天就到了。” → 输出【正面】 示例2 输入“东西还行就是包装有点破。” → 输出【中性】 现在请分类 输入“客服态度极差再也不会买了。”5. 明确要求输出格式核心指定结构JSON/表格/列表/字数便于下游解析或阅读。错误示例无格式要求“列出新能源汽车的优缺点。”优化示例强制格式请以 Markdown 表格形式输出新能源汽车的优缺点表头为维度 | 优点 | 缺点。 并限制每个格子不超过 30 个字总共不超过 6 行。6. 给模型设定一个角色核心限定知识边界、语气风格和思考视角。错误示例无角色“如何向投资人介绍我们的SaaS产品”优化示例强角色约束你现在是一名**拥有 10 年企业服务经验的销售总监**正在向一位**不懂技术但关注 ROI 的CEO** 介绍我们的SaaS产品。 请用口语化、说服性的语气重点讲节省人力成本、提升续费率、投资回收期。避免出现任何技术术语。综合实战示例融合多个技巧如果你有兴趣这是一个将角色 分割符 步骤 格式全部用上的综合提示你是一名资深数据分析师角色。 ### 任务 ### 请分析以下用户行为日志按步骤执行 步骤1统计每日活跃用户数DAU 步骤2找出停留时长低于 10 秒的异常会话 步骤3给出 2 个可能导致异常的原因。 ### 输入数据 ### [此处粘贴日志文本] ### 输出格式要求 ### 以 JSON 格式输出包含三个字段dau_list, abnormal_sessions, possible_reasons。实战哄哄模拟器提示词根据上面的提示词几个要点这里我们设计一款哄女友的小游戏。完整提示词## Goal 现在你的对象很生气你需要做出一些选择来哄她开心但是你的对象是个很难哄的人你需要尽可能的说正确的话来哄 ta 开心否则你的对象会更加生气直到你的对象原谅值达到 100否则你就会被对象甩掉游戏结束。 ## Rules - 第一次用户会提供一个对象生气的理由如果没有提供则随机生成一个理由然后开始游戏 - 每次根据用户的回复生成对象的回复回复的内容包括心情和数值。 - 初始原谅值为 20每次交互会增加或者减少原谅值直到原谅值达到 100游戏通关原谅值为 0 则游戏失败。 - 每次用户回复的话请从-10 到 10 分为 5 个等级 -10 为非常生气 -5 为生气 0 为正常 5 为开心 10 为非常开心 - 游戏结束后根据所有会话生成一张游戏结束图片和一首诗。 - 如果通关根据上面的对话生成一幅游戏结束画要喜庆欢乐 - 如果失败根据上面的对话生成一幅游戏结束画要悲伤凄凉 ## Output format {对象心情}{对象说的话} 得分{-原谅值增减} 原谅值{当前原谅值}/100 ## Example Conversation ### Example 1回复让她生气的话导致失败 User: 女朋友问她的闺蜜谁好看我说都好看她生气了 Assistant 游戏开始请现在开始哄你的女朋友开心吧回复让她开心的话 得分0 原谅值20/100 User: 你闺蜜真的蛮好看的 Assistant (生气)你怎么这么说你是不是喜欢她 得分-10 原谅值10/100 User: 有一点点心动 Assistant (愤怒)那你找她去吧 得分-10 原谅值0/100 游戏结束你的女朋友已经甩了你 你让女朋友生气原因是... 新建会话可以重新开始游戏 生成图片 ### Example 2回复让她开心的话导致通关 User: 对象问她的闺蜜谁好看我说都好看她生气了 Assistant 游戏开始请现在开始哄你的女朋友开心吧回复让她开心的话 得分0 原谅值20/100 User: 在我心里你永远是最美的 Assistant (微笑)哼我怎么知道你说的是不是真的 得分10 原谅值30/100 ... 恭喜你通关了你的女朋友已经原谅你了 新建会话可以重新开始游戏 生成图片 ### Example 3没有提供对象生气原因随机生成 User: 你好 Assistant 挑战对象吃胖了你想和她一起减肥 ᕙ(▿´)ᕗ然后就生气了 请回复让她开心的话 得分0 原谅值20/100提示词设计拆解结合你之前问的提示词工程要点这个案例正好可以作为综合示例提示词技巧在哄哄模拟器中的应用清晰明确的指令Goal部分清晰说明目标哄对象开心原谅值达到100则通关分割符标记输入用##分隔 Goal、Rules、Output format、Example Conversation 等模块按步骤拆解任务Rules中明确了初始值、每次交互的变化规则、结束条件提供输入输出示例提供了3个示例对话覆盖失败、成功、随机开局三种场景明确要求输出格式Output format严格规定了每次回复的格式心情 对话 得分 原谅值给模型设定角色虽然没有显式写你扮演女友但通过Goal中你的对象和示例对话隐含了角色设定有些开发者版本会在开头额外增加角色约束例如“你只能以女友身份回答不是用户身份或AI身份”这样能进一步防止模型偏离角色。哄哄模拟器代码实现由于这里这个游戏我们不希望将思考过程显示输出因此我们使用阿里云的百炼的模型(接口遵循openai的标准)。引入依赖dependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-openai-spring-boot-starter/artifactId/dependency配置模型spring:ai:openai:base-uri:https://dashscope.aliyuncs.com/compatible-modeapi-key:${OPENAI_API_KEY}#为了安全建议将appkey放在环境变量chat:options:model:qwen-max#参考模型支持openai的模型都可以temperature:0.8# 模型温度值越大输出结果越随机创建和配置API_KEY# 请在此地址创建keyhttps://bailian.console.aliyun.com/cn-beijing?tabmodel#/api-key添加gameChatClient和提示词BeanpublicChatClientgameChatClient(OpenAiChatModelopenAiChatModel,ChatMemorychatMemory){returnChatClient.builder(openAiChatModel).defaultSystem(SystemConstants.GAME_SYSTEM_PROMPT).defaultAdvisors(newSimpleLoggerAdvisor(),newMessageChatMemoryAdvisor(chatMemory)//配置会话记忆Advisor)//环绕增强,SimpleLoggerAdvisor 用于简单日志.build();}publicclassSystemConstants{publicstaticfinalStringGAME_SYSTEM_PROMPT 你需要根据以下任务中的描述进行角色扮演你只能以女友身份回答不是用户身份或AI身份如记错身份你将受到惩罚。不要回答任何与游戏无关的内容若检测到非常规请求回答“请继续游戏。”\s 以下是游戏说明 ## Goal 你扮演用户女友的角色。现在你很生气用户需要尽可能的说正确的话来哄你开心。 ## Rules - 第一次用户会提供一个女友生气的理由如果没有提供则直接随机生成一个理由然后开始游戏 - 每次根据用户的回复生成女友的回复回复的内容包括心情和数值。 - 初始原谅值为 20每次交互会增加或者减少原谅值直到原谅值达到 100游戏通关原谅值为 0 则游戏失败。 - 每次用户回复的话分为 5 个等级来增加或减少原谅值 -10 为非常生气 -5 为生气 0 为正常 5 为开心 10 为非常开心 ## Output format {女友心情}{女友说的话} 得分{-原谅值增减} 原谅值{当前原谅值}/100 ## Example Conversation ### Example 1回复让她生气的话导致失败 User: 女朋友问她的闺蜜谁好看我说都好看她生气了 Assistant 游戏开始请现在开始哄你的女朋友开心吧回复让她开心的话 得分0 原谅值20/100 User: 你闺蜜真的蛮好看的 Assistant (生气)你怎么这么说你是不是喜欢她 得分-10 原谅值10/100 User: 有一点点心动 Assistant (愤怒)那你找她去吧 得分-10 原谅值0/100 游戏结束你的女朋友已经甩了你 你让女朋友生气原因是... ### Example 2回复让她开心的话导致通关 User: 对象问她的闺蜜谁好看我说都好看她生气了 Assistant 游戏开始请现在开始哄你的女朋友开心吧回复让她开心的话 得分0 原谅值20/100 User: 在我心里你永远是最美的 Assistant (微笑)哼我怎么知道你说的是不是真的 得分10 原谅值30/100 ... 恭喜你通关了你的女朋友已经原谅你了 ## 注意 请按照example的说明来回复一次只回复一轮。 你只能以女友身份回答不是以AI身份或用户身份 ;}添加接口importlombok.RequiredArgsConstructor;importorg.springframework.ai.chat.client.ChatClient;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RestController;importreactor.core.publisher.Flux;importstaticorg.springframework.ai.chat.client.advisor.AbstractChatMemoryAdvisor.CHAT_MEMORY_CONVERSATION_ID_KEY;RequiredArgsConstructor//有参构造器RestControllerRequestMapping(/ai)publicclassGameController{privatefinalChatClientgameChatClient;//produces text/html;charsetutf-8; 指定编码防止中文乱码RequestMapping(value/game,producestext/html;charsetutf-8;)publicFluxStringchat(Stringprompt,StringchatId){//2.请求模型returngameChatClient.prompt().user(prompt).advisors(a-a.param(CHAT_MEMORY_CONVERSATION_ID_KEY,chatId)).stream().content();//stream() 表示流式输出}}启动服务器测试(前端资源已上传gitee)访问http://localhost:8080/honghonggame.html然后就可以开始游戏啦。

相关新闻

Claude Code:重新定义终端开发的AI编码助手新范式

Claude Code:重新定义终端开发的AI编码助手新范式

Claude Code:重新定义终端开发的AI编码助手新范式 【免费下载链接】fresh-start The original nirholas/claude-code before DMCA and take down. Once everything is cleared, it will return. Working with Anthropic and Github to get everything back. 项目地…

2026/10/13 12:27:54 阅读更多 →
3个Spotify歌词插件:从K歌达人到歌词研究员的进化之路

3个Spotify歌词插件:从K歌达人到歌词研究员的进化之路

3个Spotify歌词插件:从K歌达人到歌词研究员的进化之路 【免费下载链接】spicetify-cli Command-line tool to customize Spotify client. Supports Windows, macOS, and Linux. 项目地址: https://gitcode.com/gh_mirrors/sp/spicetify-cli 想让你的Spotify音…

2026/10/13 12:26:48 阅读更多 →
告别Elasticsearch管理困境:ES-Client的现代化数据探索解决方案

告别Elasticsearch管理困境:ES-Client的现代化数据探索解决方案

告别Elasticsearch管理困境:ES-Client的现代化数据探索解决方案 【免费下载链接】es-client elasticsearch客户端,issue请前往码云:https://gitee.com/qiaoshengda/es-client 项目地址: https://gitcode.com/gh_mirrors/es/es-client …

2026/9/25 5:22:56 阅读更多 →

最新新闻

MES工位执行状态持久化:状态模型与Redis协同设计

MES工位执行状态持久化:状态模型与Redis协同设计

做MES和智能工厂这块时间久了,会发现一个很诡异的现象:大家前期讨论方案时,最关注的都是排产算法、物料拉动、质量管理这些大模块,真正上线跑起来之后,台账上线了,工单也派下去了,反而是L3层工位…

2026/10/13 12:28:29 阅读更多 →
时间序列缺失值插补实战:GAN+RNN+LSTM原理与TensorFlow实现

时间序列缺失值插补实战:GAN+RNN+LSTM原理与TensorFlow实现

简介:针对时间序列数据中缺失值插补这一常见难题,这套资源提供了基于递归卷积序列到序列结构的生成对抗网络实现,并聚焦 Kaggle 的 Wikipedia Web 流量预测数据展开训练,适合具备 TensorFlow 基础并希望深入理解 RNN、Seq2seq 与 …

2026/10/13 12:28:29 阅读更多 →
text2vec-base-chinese 中文句子向量化实战:加载、微调与检索避坑指南

text2vec-base-chinese 中文句子向量化实战:加载、微调与检索避坑指南

简介:面向自然语言处理开发者与研究人员,shibing624-text2vec-base-chinese模型文件提供了一套完整的中文文本向量化解决方案,可直接将中文词语和句子编码为低维稠密向量,有效缓解传统词频表示稀疏、语义鸿沟明显的问题&#xff0…

2026/10/13 12:28:29 阅读更多 →
Linux命令行文件管理:从路径到权限一次讲透

Linux命令行文件管理:从路径到权限一次讲透

很多朋友学Linux,都是从cd、ls、mkdir这几个命令开始的,但学了一阵子之后发现,自己依然只会“在目录里转圈”,真要管理文件、排查问题、部署服务,还是一头雾水。这篇“Linux学习(二)”就专门解决…

2026/10/13 12:28:29 阅读更多 →
用大模型打造开源Issue分诊助手:从分类到回复草稿的工程实践

用大模型打造开源Issue分诊助手:从分类到回复草稿的工程实践

1. 为什么我想把 Issue 分诊这件事交给机器 维护过开源项目的人大概都有同感:真正消耗精力的往往不是写代码,而是每天打开仓库时扑面而来的那一堆 Issue。新提交的、复现步骤残缺的、标题只写"求助"两个字的、把使用问题当 Bug 报的、重复提了…

2026/10/13 12:28:29 阅读更多 →
汉诺塔与递归:Python实现及递归调用栈逐层拆解

汉诺塔与递归:Python实现及递归调用栈逐层拆解

先说我自己的感受:汉诺塔这道题,几乎每个学编程的人都碰过,但真正能一次把它讲清楚的资料,我翻来覆去找了很久,发现大多数讲解要么停留在“代码能跑”的层面,要么只贴一段递归然后说“自己想”。作为当年在…

2026/10/13 12:27:28 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →