大模型提示工程技术分类详解
随着大语言模型(LLM)能力的不断提升,如何有效地与模型交互成为了关键。提示工程(Prompt Engineering)作为连接人类意图与模型输出的桥梁,其技术体系日益复杂。本文将深入探讨提示工程的技术分类,涵盖单一提示、多重提示策略以及结合外部工具的高级应用,并提供相应的实践建议。
一、单一提示技术
单一提示技术是提示工程的基础,指通过单次输入指令让模型完成任务。尽管 LLM 具备强大的上下文学习能力,但在复杂任务中仍可能失败,因此需要精细设计的提示策略。
1. Zero-Shot(零样本)
这是最简单的技术形式,仅使用自然语言指令,不提供任何示例。模型依靠预训练知识直接生成回答。
适用场景: 通用问答、简单翻译、基础分类。
示例:
请将以下句子翻译成法语:"Hello, how are you?"
2. One-shot(单样本)
在指令后提供一个输入-输出示例,帮助模型理解任务格式。
适用场景: 特定格式的数据提取、风格模仿。
示例:
将数字转换为中文大写。
输入:100
输出:一百
输入:256
输出:
3. Few-Shot(少样本)
提供多个正确的示例,向模型演示类似任务的逻辑、标签空间分布或序列格式。这能显著降低模型的推理难度。
适用场景: 复杂分类、情感分析、代码生成。
示例:
判断评论情感:
评论:"服务太棒了!" -> 正面
评论:"食物很难吃" -> 负面
评论:"物流很慢" ->
4. Chain of Thought (CoT)(思维链)
通过要求模型展示中间的推理步骤,使复杂的推理能力成为可能。这种技术旨在引导模型对每个步骤进行迭代和推理,而非直接跳跃到答案。
原理: 将复杂问题分解为中间子问题,逐步求解。
示例:
罗杰有 5 个网球。他又买了两筒网球。每筒有 3 个网球。他现在有多少个网球?
思考过程:
1. 初始数量:5
2. 新增数量:2 * 3 = 6
3. 总数量:5 + 6 = 11
答案:11
5. Program-Aided Language Models (PAL)
这是一种扩展思维链的方法,通过将解释扩展为自然语言并调用代码来执行计算。相比纯文本推理,代码执行更准确。
实现参考: LangChain 中的 PALChain 可作为参考实现。
优势: 解决数学计算和逻辑验证问题,减少幻觉。
二、多重提示技术
基于不同的策略,将一个或几个提示技术组合在一起,以应对更高难度的任务。主要包括投票排名、分而治之和自我评估。
1. 投票排名(Voting & Ranking)
应用投票机制来得到正确答案,最典型的是自我一致性方法(Self-Consistency)。
核心直觉: 一个复杂的推理问题通常需要多种不同的思维方式才能得到独一无二的正确答案。
流程:
- 对相同的思维链提示多次采样,产生一组不同的推理路径。
- 收集所有生成的答案。
- 应用投票选择出现频率最高或最一致的答案。
效果: 在算术和常识任务中,常规基准测试提升可达 4% - 18%。
2. 分而治之(Divide and Conquer)
将复杂任务划分为几个较小的子任务,分别处理后再合并结果。常见模式包括:
定向激励提示(Directed Prompting)
包含两个步骤:产生提示(如关键字)和使用它们来提高响应质量。
- 模式 A: 小型可调整的策略模型被训练成产生提示(暗示)。
- 模式 B: 基于前一步的问题和提示,利用黑盒大模型生成摘要。
优化方式: 策略模型可通过监督微调(SFT)或强化学习(RL)优化,使用标注数据和奖励信号指导 LLM。
知识生成(Knowledge Generation)
使用单独的提示首先生成相关知识,再利用这些知识获得更好的响应。
阶段:
- 生成知识: 使用 Few-Shot 从大模型生成与问题相关的知识陈述。
- 知识整合: 使用另一个打磨后的提示对每个知识语句进行预测,选择最高置信度的预测。
优势: 无需访问结构化知识库,即可提高常识推理性能。
提示链(Prompt Chaining)
将任务划分为子问题,逐个提示模型。有助于提高应用程序的透明度、可控性和可靠性。
Least-to-Most 提示: 进一步添加步骤,让模型决定如何将任务分解为子问题。在符号操作、组合概括和数学推理任务中表现优异。
表链(Table Chain)
将表格数据明确用作推理链中的中间思维结果代理。
算法步骤:
- 动态规划: 大模型根据输入查询和历史记录从操作池中抽样下一个操作。
- 参数生成: 使用 LLM 和编程语言为选定参数(如新列名)生成代码,执行操作并创建中间表。
3. 自我评估(Self-Evaluation)
将检查输出是否符合指令的步骤纳入框架,例如思维树(Tree of Thoughts, ToT)。
思维树(ToT)
ToT 概括了思想链的方法,允许模型探索多个推理步骤和自我评估的选择。
实施四要素:
- 状态分解: 如何将中间过程分解为思维步骤?
- 想法生成: 如何从每个状态产生潜在的想法?
- 状态评估: 如何启发式地计算状态(使用状态评估提示)?
- 搜索算法: 使用什么样的搜索算法(如 BFS, DFS, Beam Search)?
应用场景: 需要进行复杂计划或搜索的任务。LangChain 在 experimental.tot.base.ToTChain 类中实现了该技术。
三、使用外部工具的大模型
实际上,使用外部工具的大模型提示技术就是基于大模型的应用架构,主要包括 RAG(检索增强生成)和 Agent(智能体)。
1. RAG(Retrieval-Augmented Generation)
RAG 结合了信息检索组件和文本生成模型。
工作流程:
- 检索: 系统通常使用向量搜索来搜索可能回答问题的相关文档。
- 生成: 将相关文档作为上下文与初始问题一起传递给大模型。
- 输出: 大多数情况下,使用 RAG 方法意味着我们检索 k 个文档,并使用它们生成回答用户查询的所有输出令牌。
微调策略: RAG 中的大模型可以进行微调,但实际上很少这样做。因为经过预训练的 LLM 足够好,可以按原样使用,且微调成本太高。此外,RAG 中的内部知识可以以一种有效的方式进行修改,而不需要对整个模型进行再训练。
优势: 响应更加真实、具体和多样化,改善了事实验证的结果,减少了幻觉。
2. Agent(智能体)
当前已有多种 Agent 技术框架,这里简要介绍 Reflexion 和 ReAct。
Reflexion(反思)
Reflexion 是一个通过语言反馈来强化语言主体的框架。反射代理通过语言反映任务反馈信号,然后在记忆缓存中维持自己的反思文本,以诱导更好的决策在随后的试验。
组成模型:
- Actor: 一个 LLM 模型,基于状态观察生成文本和操作(使用 CoT 和 ReAct)。
- Evaluator: 一个 LLM 模型,对 Actor 产生的输出进行评分。
- Self-Reflection: 一个 LLM 模型,产生语言强化线索,协助 Actor 自我完善。
适用: 需要顺序决策、编码和语言推理的任务。
ReAct(Reasoning + Acting)
ReAct 框架使用大模型以交错的方式生成推理轨迹和特定任务的行为。
- 推理轨迹: 帮助模型产生、跟踪和更新行动计划以及处理异常。
- 行为: 允许它与外部来源(如知识库或环境)接口交互并收集额外的信息。
工作流程:
- 选择一个可用的工具(如搜索引擎、计算器、SQL 代理)。
- 应用它并分析结果。
- 决定下一个操作。
优势: 通过与简单的 Wikipedia API 交互,克服了思维链推理中的幻觉和错误传播的普遍问题,并产生比没有推理痕迹的基线更可解释的类人任务解决轨迹。具体实现可参考使用 Langchain 工具实现的 ReAct 示例。
四、提示评估技术
提示技术的测试指标在很大程度上取决于应用程序和可用资源。大模型提示词中的最小变化非常敏感,这些变化不是最优的,而且往往是主观的。无论选择哪种提示技术,将提示工程视为数据科学的过程都非常重要。这意味着创建一个测试集并选择指标,调优提示并评估它对测试集的影响。
基本评估原则
- 事实性和相关性: 生成的答案有多真实,生成的答案与问题的相关程度。需核对引用来源是否准确。
- 检索质量: 主要针对 RAG 和 Agent 管道,但可应用于生成的知识和定向提示。主要指标还是准确率(Precision)和召回率(Recall)。
- 内部思维方式: Agent 和工具选择的准确性,为 Agent 提取工具参数,从上下文中检索到正确的参数并进行了适当的转换,在多轮对话中记住事实,正确的逻辑步骤,例如反思和思维链提示。
- 非功能性指标: 答案的风格和语气,没有偏见,合规和安全检查,提示注入实验防御能力。
五、提示工程的方法小结
在应用提示工程的时候,遵循以下最佳实践可以显著提升效果:
- 清晰准确: 提示语要清晰而准确,这样模型就不必猜测我们的意图。我们可以使用分隔符或标记添加结构。
- 结构化输入: 通过展示示例和添加解释来帮助模型理解上下文。
- 反复思考: 要求模型反复思考,解释它的解决方案,利用 CoT 提升逻辑性。
- 拆分任务: 对于复杂的提示词,请考虑将其拆分为子任务,多问几次同样的问题,并考虑添加一个模型自检的步骤。
- 工具结合: 如果需要,将 LLM 与外部工具结合起来,利用 RAG 补充知识,利用 Agent 执行操作。
- 迭代优化: 将提示调优视为一个数据科学过程,它是迭代的,需要评估。建立测试集,持续监控指标变化。
通过掌握上述技术分类与实践方法,开发者可以更高效地构建稳定、可靠的大模型应用系统。