导图社区 Google 官方提示工程白皮书
这是一篇关于Google 官方提示工程 (Prompt Engineer的思维导图,主要内容包括:提示工程,LLM 输出配置 (LLM output conguration),提示技巧 (Prompting techniques),代码提示,多模态提示,最佳实践。
编辑于2025-12-21 16:35:23Google 官方提示工程 (Prompt Engineering)白皮书
提示工程
1. 提示词(Prompt)
对LLM所说的输入文字或指令
把它想象成是您给厨师的菜谱。模型会接收这些顺序文本作为输入,然后根据它训练时学到的知识,预测接下来应该生成哪个“令牌”(Token,可以理解为一个个词语)的序列,最终生成您想要的回答或预测。
2. 提示工程(Prompt Engineering)
提示工程是一个迭代的过程,包括反复调试来找到最佳的提示词,优化提示词的长度,以及评估它的写作风格和结构,以确保它能够准确地引导程序预测出正确的文本序列
LLM 输出配置 (LLM output conguration)
1. 输出长度 (Output length)
输出长度是一个重要的配置设置,它决定了程序在响应中最多能生成的令牌(token)数量
减少 LLM 的输出长度,并不会使 LLM 在其创建的输出中,变得更简洁或更精炼
2. 采样控制 (Sampling controls)
程序(大型语言模型,LLM)不是直接知道下一个词是什么,而是预测所有可能的词语,然后给每个词语一个“被选中的概率”
比如程序要写“天上的云像”,它可能会预测:“棉花糖”(概率 90%)、“鱼”(概率 5%)、“桌子”(概率 3%)、“铅笔”(概率 2%)。
“采样控制”就是调整这个转盘的规则,决定程序最终会选中哪个词。最常见的就是温度(Temperature)、Top-K 和 Top-P
3. 温度 (Temperature)
温度控制着程序在选择词语时的随机程度
低温度(接近 0): 答案会更加确定性、保守和基于事实。程序总是选择概率最高的词语,这也被称为“贪婪解码”。
高温度(接近最大值): 答案会更多样化、更具创造性,可能产生意想不到的结果。随着温度越来越高,所有词语被选为下一个词的可能性会变得均等
4. Top-K 和 Top-P
Top-K
规定程序只能看预测概率最高的前 K 个词语
比如设置 Top-K=3,程序就只能从“棉花糖”、“鱼”、“桌子”里选,而不会去考虑“铅笔”。
Top-P
要求程序只选择那些累积概率加起来不超过某个特定值 P 的词语
比如设置 Top-P=0.98,程序会从最高概率的词开始加(90% + 5% + 3% = 98%),加到“桌子”就满了,它就不会考虑“铅笔”了。
给程序越高的自由度(高温度、高 Top-K/P),程序生成的文本就越有可能与您的任务不相关
提示技巧 (Prompting techniques)
1. 通用提示 / 零样本 (General prompting / zero shot)
零样本提示是最简单的提示类型,它也被称为“通用提示”,不提供任何示范或例子,让程序来模仿
走进厨房,对厨师说:“做一份红烧肉。”您没有给厨师任何参考图,也没有告诉他您喜欢甜口还是咸口。您只是提供了任务描述(做红烧肉),然后指望厨师凭借自己以前学过的所有本事(训练数据),预测出下一步应该怎么做,最后给您一份他认为最标准的红烧肉
如果程序给出的零样本回答不能满足您的要求,比如分类结果不准确,那么您就需要转向更复杂的技巧,比如提供示例(示范的“单样本”(One-shot)或“少样本”(Few-shot)提示,让程序知道应该模仿哪种模式
2. 单样本 & 少样本 (One-shot & few-shot)
单样本
在提示词中为模型提供一个单一的例子
少样本
向模型提供多个例子
如果“零样本”是您直接对孩子说“把桌子收拾干净”,而没教过他怎么收;那么“单样本”就是您当着他的面收一个盘子给他看,让他模仿;而“少样本”就是您示范收盘子、收筷子、擦桌面**这几种不同的操作,让他彻底明白“收拾干净”这一整套动作的逻辑和标准。
3. 系统、上下文和角色提示 (System, contextual and role prompting)
系统提示 (System prompting)
系统提示用于设定模型的总体背景和目的,定义模型应该做什么的“大局”(例如翻译、分类或代码生成)
最常见的技术用途是强制执行输出格式(如 JSON)或设定安全边界
角色提示 (Role prompting)
为模型分配一个特定的角色、身份或性格(如旅行指南、图书编辑、程序员)。它主要用于构建输出的风格、语调和声音
角色提示是给程序一个“ blueprint(蓝图)”,告诉它该用什么样的语气、风格和专业词汇
上下文提示 (Contextual prompting)
上下文提示提供与当前对话或特定任务相关的细节或背景信息,它的主要目的是提供即时信息来指导回复
为了消除歧义。如果没有背景,程序给出的回答会太笼统,没法直接用
4. 回退提示 (Step-back prompting)
引导模型在尝试解决具体任务之前,先思考一个与之相关的、更普遍或更抽象的问题。
让一位大厨做一道新菜。直接提示是说:“做道好吃的肉菜。”大厨可能随手做个红烧肉(通用回答)。而回退提示则是先问大厨:“做出顶级肉菜的三个核心原则是什么?”大厨回答:“选材、火候、酱汁。”接着您再说:“请根据这三个原则,结合我厨房里的材料做道菜。”这时,大厨的发挥就会专业且惊艳得多。
5. 思维链COT
通过生成中间推理步骤来提高大语言模型(LLM)推理能力的提示技巧。
外化推理
强制模型将其推理过程转化为令牌(token)序列。这种顺序生成的步骤能帮助模型保持思路,比直接预测答案更可靠地执行逻辑推导
零样本思维链
最简单的方法是在提示词中加入触发短语,如“让我们一步一步地思考”(Let's think step by step),。
少样本思维链
通过提供带推理过程的示例(One-shot 或 Few-shot),引导模型模仿类似的逻辑结构来处理新问题,。
6. 自我一致性 (Self-consistency)
通过多样化的推理路径来提高大语言模型(LLM)在处理复杂逻辑和推理任务时的准确性
这就像在公司里决策一个重大问题。思维链是只听取一位专家的详细分析报告;而自我一致性则是请来五位专家,让他们每个人都写一份分析报告。虽然专家们的分析角度(推理路径)可能不同,但如果大多数专家最终指向同一个结论,那么这个决策正确的概率就会大大增加。
核心原理
采样 + 多数投票
LLM在推理任务中往往受限于简单的“贪婪解码”策略(即每次只选概率最高的词,产生单一的线性思路),这限制了其寻找最优解的能力
虽然一个复杂的推理问题可能有很多错误的解法,但正确的答案往往可以通过多种不同的推理路径得出
运作流程
1. 生成多样化路径: 多次向模型发送相同的提示词。此时需要设置较高的温度(Temperature),以鼓励模型生成不同的推理思路和视角。
2. 提取答案: 从每一个生成的响应中提取出最终结果。
3. 多数投票: 统计所有结果,选择出现次数最多(最常见)的答案作为最终结论。
代价
成本昂贵
对于标准的思维链,通常建议将温度设为 0。但在使用自我一致性时,必须调高温度,否则模型每次都会给出几乎一样的回答,无法产生“多样化路径
7. 思维树 (Tree of Thoughts - ToT)
如果思维链是让程序“直行”去推理,那么思维树就是让它在每一个逻辑节点都“开枝散叶”,同时尝试好几条路
思维链通常只遵循单一的线性思路,一旦中间某一步想错了,后面就全错了
思维树的进化允许程序同时探索多个不同的推理路径。它不仅仅是走完一条路,而是在解决问题的过程中维护一个“思维树”,每个“思维(Thought)”都是解决问题的一个中间步骤
碎碎念
怎么TOT这么像神经网络的运行方式?
神经网络是底层的“硬件/架构”,负责产生原始的计算能力;而 ToT 是顶层的“软件/算法策略”,是教这个“脑子”如何更聪明地组织它的想法。来源主要将 ToT 视为一种泛化了思维链 (CoT) 的高级提示工程技术。
8. ReAct (推理与行动 - reason & act)
ReAct 是一种范式,它让模型在解决复杂任务时,将自然语言推理与外部工具(如搜索引擎、代码解释器、API 等)结合起来
想象一下你正在为一次短途旅行打包行李。你可能会先确定一些关键考虑因素(“我到那儿的时候天气怎么样? ”),然后主动查阅外部信息(“我要查看一下当地的天气预报”)。
根据这些新信息(“天气会很冷”),你会确定下一步要考虑的问题(“我有哪些保暖的衣服? ”)和行动(“我要检查一下我的衣柜”)。然而,当你采取这个行动时,你可能会遇到意想不到的困难(“我所有的保暖衣服都放在储藏室里了”),于是你需要相应地调整下一步行动(“哪些衣服可以叠穿? ”)。 类似地,ReAct 框架利用提示工程将 AI 代理的活动构建成交替的思考、行动和观察的正式模式
ReAct的步骤
口头表达的 CoT 推理步骤(想法)帮助模型将较大的任务分解为更易于管理的子任务。
预定义的操作使模型能够使用工具、进行应用程序编程接口 (API) 调用,并从外部来源(例如搜索引擎)或知识库(例如内部文档库)收集更多信息。
模型执行操作后,会重新评估其进展,并利用该观察结果给出最终答案或指导下一步思考。理想情况下,该观察结果还应考虑先前的信息,这些信息可能来自模型标准上下文窗口的早期内容,也可能来自外部记忆组件。
9. 自动提示工程 (Automatic Prompt Engineering - APE)
“用编写提示词的方式来编写提示词”,也就是让 AI 自己去优化和生成最有效的指令
步骤
生成变体 (Generation)
评估候选指令 (Evaluation)
选择与迭代 (Selection)
代码提示
1. 编写代码
扮演“数字开发者”,帮助编写各种编程语言的代码,从而显著加速开发过程。
2. 解释代码
当你在团队协作中需要阅读他人的代码,或者面对一段没有注释的陈旧代码时,模型能提供极大的帮助
3. 翻译代码
将代码从一种编程语言迁移到另一种语言的能力,这对于代码重构或跨平台开发非常有用
4. 调试和审查代码
如果代码报错,直接将错误回溯信息(Traceback)和原始代码一起提供给模型,这比只给代码更有效。模型能准确定位未定义的函数(如将 toUpperCase 误用,应为 .upper())并给出修复后的版本
多模态提示
排除在本书讨论之外
最佳实践
1. 提供示例 (Provide examples)
示例展示了期望的输出或类似的响应,使模型能够从中学习并相应 地调整其自身的生成。这就像给模型一个参考点或目标,以提高其响应的准确性、风格和语 调,使其更好地符合您的期望
2. 简洁设计 (Design with simplicity)
提示应该简洁、清晰、易于理解(对您和模型都是如此)。作为经验法则,如果它对您来说已 经令人困惑,那么它很可能对模型来说也同样令人困惑。尽量不要使用复杂的语言,也不要 提供不必要的信息
3. 具体说明输出 (Be specic about the output)
简洁的指令可能不足以指导 LLM,或者可能过于笼统。在提示中 提供具体细节(通过系统或上下文提示)可以帮助模型专注于相关内容,提高整体准确性 1。 不要假设模型知道您想要什么。明确说明约束条件,如长度(“3 段”)、内容焦点(“排名前 5 的视频游戏机”)和风格(“对话式”) 。
4. 使用指令而非约束 (Use Instructions over Constraints)
指令 (instruction) 提供关于响应的期望格式、风格或内容的明确指示。它指导模型应 该做什么或产生什么 。
约束 (constraint) 是对响应的一组限制或边界。它限制模型不应该做什么或避免什么 1。
指令直接传达期望的结果,而约束可能让模型猜测什么是允许的。它在定义的边界内提供 了灵活性并鼓励创造力,而约束可能限制模型的潜力。
如果可能,使用积极指令:与其告诉模型不要做什么,不如告诉它该做什么。这可以避免混 淆并提高输出的准确性
5. 控制最大令牌长度 (Control the max token length)
要控制生成的 LLM 响应的长度,您可以在配置中设置最大令牌限制,或者在提示中明确请求特 定长度。
6. 在提示中使用变量 (Use variables in prompts)
平时我们写提示词可能是:“告诉我关于北京的一个事实。”但这只能用一次。使用变量则是把“北京”挖掉,换成一个占位符,比如 {城市}
做法:你在提示词里留下变量名,然后在实际运行时根据不同的输入去填充它。
目的:让提示词变得可重用且更具动态性
7. 尝试不同的输入格式和写作风格 (Experiment with input formats and writing styles)
不同的模型、模型配置、提示格式、措辞选择甚至提交都可能产生不同的结果。因此,尝试 提示属性(如风格、措辞选择和提示类型(零样本、少样本、系统提示))非常重要 1。LLM 对 输入的精确措辞和格式可能出奇地敏感。微小的变化可能导致不同的输出
8. 对于带分类任务的少样本提示,混合类别 (For few-shot prompting with classication tasks, mix up the classes)
混合类别”是指在进行少样本提示(Few-shot Prompting)打乱它们的出现顺序
为什么要混合?
虽然通常认为示例的顺序影响不大,但在分类任务中,如果示例排列得太有规律(比如:先给 3 个正面评价示例,再给 3 个负面评价示例),模型可能会产生过度拟合(Overfitting)
风险: 模型可能会错误地认为“顺序”也是答案的一部分。它可能只是记住了示例出现的先后位置,而不是真正理解了每个类别的特征
后果: 这种“偷懒”的学习方式会导致模型在处理未见过的新数据时,表现得不够稳健,泛化能力变差
这就像在考前给学生做模拟题。如果你总是按照“1. 对、2. 错、3. 对、4. 错”这种固定规律出题,学生可能根本不看题目内容,直接记住了单双号的规律。只有把题目顺序彻底打乱,学生才不得不认真读题,去理解什么是真正的“对”和“错”。
9. 适应模型更新 (Adapt to model updates)
提示词优化并不是一个“一劳永逸”的过程,而是一个需要随着技术演进而不断迭代的持续性任务
10. 尝试不同的输出格式 (Experiment with output formats)
11. CoT 最佳实践 (CoT Best practices)