利用 Spring AI 实现AI提示工程技术


Spring AI 提供了一个很方便的工具,让你能用 Java 语言来实现这些跟AI“好好说话”的提示技巧。通常情况下,把不同的技巧结合起来用效果更好,比如给AI定个“系统任务”,再给它几个“少量样本例子”。

Prompt Engineering 提示工程是教你怎么问大模型问题、怎么“下指令”,这个“大聪明”才能更好地理解你,给出你想要的答案或者帮你完成任务。

你可以把 Spring AI 看作是一个“翻译官”或者“连接器”,帮你用编程的方式跟那些“大聪明”AI模型(比如 OpenAI、Google 的 AI 等等)对话。

配置
有很多不同的“大聪明”AI模型,就像有的同学擅长数学,有的擅长语文。你可以选一个适合你任务的模型。

Spring AI 让你换模型很方便,就像换个设置就行,不需要改动很多代码。你想用 OpenAI 的,就加个 OpenAI 的设置;想用 Google 的,就加个 Google 的设置。

你甚至可以指定用某个公司出的某个具体型号的AI,比如 Claude 的一个叫做 "sonnet" 的型号。

设置AI怎么回答(调调AI的“脾气”和“字数”):
温度 (Temperature): 这个控制AI回答的“随机性”或“创意”。

  • 温度低(比如0.1): AI回答会很确定,很“老实”,总是给出最可能的那个答案,适合要事实、要分类的任务。就像你问“1+1=?”,它会很确定地回答“2”。
  • 温度中等(比如0.4-0.7): 平衡型,既不太死板,也有点创意。
  • 温度高(比如0.8-1.0): AI回答会很有创意,很多样,可能会给出你意想不到的答案,适合写故事、头脑风暴。就像你问“给我讲个故事”,温度高它会想出更奇特的情节。

回答长度 (MaxTokens): 限制AI回答的“字数”(其实是AI理解的词块,叫做token)。

  • 设短点(比如5-25): 只想要一个词或者短语。
  • 设中等(比如50-500): 想要一段话或者短解释。
  • 设长点(比如1000+): 想要很长的文章或详细解释。

怎么选词 (Sampling Controls - Top-K 和 Top-P):
这是更高级的设置,用来控制AI在生成回答时怎么从可能的词语里挑选。简单说,就是让AI的回答更自然或者更多样。有点像你说话时,是在脑子里想很多词再挑,还是很快说出来。

让AI回答成特定格式:
除了普通的文字,你还可以让AI回答成有结构的数据,比如一个清单、一个表格,或者一个程序能直接看懂的格式(比如 JSON)。Spring AI 能帮你把AI的回答直接变成Java程序里能用的“数据包”,很方便。

不同AI的独有设置:
每个“大聪明”AI都有自己的特别技能和设置。Spring AI 也允许你使用这些独有的设置,这样就能充分发挥每个AI的特长。但用了这些独有设置,你的程序就可能只能跟这个特定的AI工作了。

提问的小技巧(Prompt Engineering 技术)
Spring AI 代码演示点击标题

零样本提示 (Zero-shot Prompting):

  • 就是直接给AI任务,不给任何例子。
  • AI学了很多知识,对一些常见任务(比如翻译、总结、分类)已经很熟了,直接说它也能懂。这种方法最简单。
  • 例子: 给你一段电影评论,直接让AI判断它是“好评”还是“差评”,不告诉它好评差评的例子。
  • 注意: 对简单的任务还好,但如果任务复杂或要求特别,可能效果不好。

一次性/少量样本提示 (One-shot / Few-shot Prompting):

  • 给AI一个(One-shot)或几个(Few-shot)例子,告诉它你想让它怎么做。
  • AI通过看你给的例子,就能明白你想要的回答格式或者做事方式。特别适合要求特定输出格式的任务。
  • 例子: 你想让AI把客户的披萨订单描述变成一个程序能看懂的格式(JSON)。你就给它一个客户描述和对应的JSON格式,再给一个,AI看了就会学着按这个格式回答新的订单。
  • 注意: 给的例子要好,越多例子AI学得越明白(当然也不能太多)。

系统提示 (System):
给AI一个“总任务”或“总规矩”,让它在整个对话中都记住。
例子: 告诉AI:“你的任务是分析电影评论,只能回答‘POSITIVE’、‘NEUTRAL’或‘NEGATIVE’。”AI就会一直按照这个规矩来。Spring AI 可以把AI的回答直接变成Java里的一个枚举类型(一种表示固定选项的数据类型),很方便。

角色提示 (Role):
让AI扮演一个特定的角色。
这样AI的回答就会符合这个角色的特点、语气和知识背景。
例子: 让AI扮演“导游”,你告诉它你在哪里,它就会给你推荐景点,而且说话方式会像导游一样。你还可以加上风格要求,比如让它做“幽默的导游”。

情境提示 (Context):
给AI一些额外的、和当前问题相关的背景信息。
帮助AI更好地理解问题,给出更准确、更相关的回答。
例子: 你想让AI给你推荐文章主题,你告诉它:“我们正在为一个关于80年代街机游戏的博客写文章。”这个“80年代街机游戏博客”就是情境,AI就会围绕这个来推荐主题。Spring AI 可以很方便地把这些背景信息(用 param() 方法)加到你的问题里。

后退提示 (Step-back Prompting):
遇到复杂问题时,先让AI往后退一步,思考一些更基础、更高层面的东西,然后再回来解决具体问题。
 把复杂问题分解成几步,帮助AI理清思路,回答更准确。
例子: 你想让AI写一个第一人称射击游戏的新关卡故事。先让AI根据现有的游戏,想出5个能让关卡有趣又有挑战性的“设定要素”。然后把这5个要素作为“背景信息”,再让AI写故事。这样故事就会包含你想要的要素。

思路链 (Chain of Thought - CoT):
让AI展示它思考问题的过程,一步一步地得出答案。就像你解数学题要写出过程一样。
尤其是对需要推理、计算或逻辑的问题,让AI展示过程能帮助它减少错误,答案更可靠。
通常在问题里加上“让我们一步一步思考”(Let's think step by step)之类的提示语。
例子: 问AI一个年龄问题(比如“我3岁时搭档是我3倍大,我现在20岁,搭档多大?”),加上“让我们一步一步思考”,AI就会先算年龄差,再算现在的年龄。你也可以通过给它一个这样的解题例子(Few-shot)来引导它。

自洽性 (Self-consistency):
 同一个问题,让AI回答很多次(比如5次),每次可能答案有点不一样,然后看看哪个答案出现次数最多,就选那个答案。
AI有时候会犯错,问很多次再“投票”,多数人的意见通常更可靠。适合做重要决策时用。
Spring AI 的代码例子就是循环调用AI 5次,然后统计“好评”和“差评”哪个多。用这个方法,AI回答时通常会用高“温度”,让它每次思考的角度不一样。
注意: 问很多次,会花更多时间和钱。

思路树 (Tree of Thoughts - ToT):
比思路链更厉害一点。AI不只是一条直线思考,而是像树枝一样,同时想很多种解决问题的思路和可能的下一步,然后评估哪条路最好,再沿着最好的路继续想。
解决特别复杂、有很多可能性的问题,比如下棋(要想很多步)。
注意: 这个技术比较高级,原文没有提供直接的Spring AI代码示例,但给了一个下棋的例子来解释:先让AI想3种开局方法,评估哪个最好,再基于最好的开局想后面几步棋。

自动提示工程 (Automatic Prompt Engineering - APE):
 不是你手动想怎么问问题,而是让AI自己来帮你想,甚至生成很多种不同的问法,然后自己评估哪种问法能得到最好的结果。
 利用AI的智能来优化“提问”这个过程。特别适合处理很复杂、你不知道怎么问才好的任务。
例子: 你想让AI帮你写一个聊天机器人的训练数据,需要客户下订单的各种不同说法(比如“我要一件S码的Metallica T恤”)。你可以让AI生成10种意思一样但说法不同的句子。然后你可以让AI评估(比如用一种叫BLEU的方法)哪种说法最好。

代码提示 (Code Prompting):
专门让AI处理跟代码相关的任务。
 AI很擅长理解和生成代码。
例子:

  • 让AI写一段代码(比如写一个Bash脚本)。
  • 给AI一段代码,让它解释这段代码是干什么的。
  • 给AI一段Bash代码,让它翻译成Python代码。

注意: 问代码问题时,通常会用低“温度”,希望AI给出准确、确定的代码,而不是有创意的代码。

总结:
在实际写程序用AI的时候,记得:

  • 多试试不同的设置(温度、字数限制等)。
  • 重要的任务,可以用“自洽性”让AI多回答几次,求个“平均值”或“多数意见”。
  • 利用 Spring AI 把AI的回答直接变成程序里用的数据结构,很方便。
  • 用“情境提示”给AI背景信息,让它回答更准确。

掌握这些技巧和工具,你就能让“大聪明”AI更好地为你服务,写出更强大的AI应用!