提示工程(Prompt Engineering)

作者:

原文作者:Lilian Weng | 原文日期:2023年3月15日 | 译者:攀岩者

原文链接:https://lilianweng.github.io/posts/2023-03-15-prompt-engineering/


引言

提示工程(Prompt Engineering),也称为上下文提示(In-Context Prompting),是指在不更新模型权重的前提下,通过设计输入提示来引导大语言模型(LLM)产生期望输出的方法。它本质上是一门实验科学——同样的提示技巧在不同模型上效果可能天差地别,因此需要大量的实验和经验积累。

本文聚焦于自回归语言模型的提示工程,不涉及完形填空、图像生成或多模态模型。提示工程的核心目标是对齐(Alignment)可控生成(Steerability)

💡 Lilian 的个人观点:有些提示工程论文写了8页,其实核心技巧一两句话就能说清,剩下的全是跑 benchmark。社区更需要好用的共享评测基础设施。

【阅读总结】提示工程是在不修改模型参数的情况下,通过精心设计输入文本来引导 LLM 输出的一门实验性技术,核心目标是对齐和可控。


一、基础提示方法(Basic Prompting)

1.1 零样本(Zero-Shot)

零样本学习(Zero-shot Learning)最简单——直接把任务文本喂给模型,让它输出结果:

`

Text: i’ll bet the video game is a lot more fun than the film.

Sentiment:

`

模型需要自行理解”Sentiment”意味着情感分类,然后给出答案。

1.2 少样本(Few-Shot)

少样本学习(Few-shot Learning)在提示中给出若干高质量示例,每个示例包含输入和期望输出:

`

Text: (lawrence bounces) all over the stage, dancing, running, sweating…

Sentiment: positive

Text: despite all evidence to the contrary, this clunker has somehow managed to pose as an actual feature movie…

Sentiment: negative

Text: for the first time in years, de niro digs deep emotionally…

Sentiment: positive

Text: i’ll bet the video game is a lot more fun than the film.

Sentiment:

`

少样本通常比零样本效果好,但代价是消耗更多 token,且可能触及上下文长度限制。

研究发现,提示格式、示例选择和示例排序都可能导致性能天壤之别——从近乎随机猜到接近 SOTA。

关键偏差问题(Zhao et al., 2021):

  • 多数标签偏差(Majority Label Bias):示例中标签分布不均
  • 近因偏差(Recency Bias):模型倾向于重复最后一个标签
  • 常见 token 偏差(Common Token Bias):模型偏好生成常见 token

1.3 示例选择技巧

  • 使用嵌入空间中的 k-NN 选择语义相似的示例(Liu et al., 2021)
  • 基于图的多样性选择:构建有向图,鼓励选择多样化的示例(Su et al., 2022)
  • 对比学习(Contrastive Learning)训练专门的嵌入来选择示例(Rubin et al., 2022)
  • 基于不确定性的主动学习策略,选择模型分歧大的样本(Diao et al., 2023)

1.4 示例排序技巧

  • 保持示例多样化、与测试样本相关、随机排序以避免偏差
  • 增大模型或增加示例数并不能减少排序带来的方差(Lu et al., 2022)
  • 验证集有限时,选择使模型预测不过于失衡的排序

【阅读总结】零样本最简单,少样本通过示例引导效果更好,但示例的选择和排序都会显著影响结果,需要注意各种偏差问题。


二、指令提示(Instruction Prompting)

少样本示例的本质是通过”演示”来传达任务指令。但既然如此,为什么不直接写指令呢?

经过指令微调的模型(如 InstructGPT)通过 RLHF(基于人类反馈的强化学习)训练,能更好地理解用户意图。与这类模型交互时,关键原则是:具体、精确、告诉模型”做什么”而不是”不做什么”

`

Please label the sentiment towards the movie of the given movie review.

The sentiment label should be “positive” or “negative”.

Text: i’ll bet the video game is a lot more fun than the film.

Sentiment:

`

指定受众也是好技巧:

  • “用6岁小孩能懂的话解释量子物理”
  • “用适合职场的语言来回答”

上下文指令学习(In-Context Instruction Learning)(Ye et al., 2023)将少样本与指令结合,在提示中包含多个不同任务的示例,每个示例包含指令、输入和输出。

【阅读总结】对指令微调模型,直接写清楚任务要求比给示例更高效,关键是具体、精确、正面描述。


三、自一致性采样(Self-Consistency Sampling)

自一致性采样(Wang et al., 2022a)的核心思路:用 temperature > 0 多次采样,然后从候选中选最优。最常用的方法是多数投票(Majority Vote)。对于容易验证的任务(如编程题),可以直接运行单元测试来判断。

【阅读总结】多次采样取多数投票,简单有效提升推理准确率。


四、思维链(Chain-of-Thought, CoT)

4.1 什么是 CoT

思维链提示(Wei et al., 2022)让模型生成一系列短句,逐步描述推理过程(称为推理链),最终得出答案。CoT 在复杂推理任务大模型(50B+ 参数)上效果显著。

4.2 CoT 的两种类型

少样本 CoT——在示例中手写推理过程:

`

Question: Tom and Elizabeth have a competition to climb a hill.

Elizabeth takes 30 minutes. Tom takes four times as long.

How many hours does it take Tom?

Answer: It takes Tom 30*4 = 120 minutes to climb the hill.

It takes Tom 120/60 = 2 hours to climb the hill.

So the answer is 2.

`

零样本 CoT——只需加一句”Let’s think step by step“:

`

Question: Marty has 100cm of ribbon, cut into 4 equal parts,

each divided into 5. How long is each final cut?

Answer: Let’s think step by step.

`

4.3 CoT 扩展技巧

  • 自一致性采样可进一步提升推理准确率(Wang et al., 2022a)
  • STaR(自教推理器):让模型生成推理链,保留正确的,微调后迭代(Zelikman et al., 2022)
  • 推理步骤越多、复杂度越高,效果越好;换行符 n 分隔优于句号或分号(Fu et al., 2023)
  • 基于复杂度的一致性:只在最复杂的推理链中做多数投票
  • Self-Ask:让模型反复追问自己,构建迭代推理过程(Press et al., 2022)
  • ReAct:结合推理与行动,交替调用搜索引擎获取信息(Yao et al., 2023)
  • 思维树(Tree of Thoughts):在每一步探索多个推理分支,用 BFS/DFS 搜索最优路径(Yao et al., 2023)

【阅读总结】CoT 通过让模型”展示思考过程”大幅提升复杂推理能力,配合自一致性采样、思维树等技术可以进一步增强效果。


五、自动提示设计(Automatic Prompt Design)

提示可以被视为可训练参数,在嵌入空间中通过梯度下降直接优化:

  • AutoPrompt(Shin et al., 2020)
  • Prefix-Tuning(Li & Liang, 2021)
  • P-tuning(Liu et al., 2021)
  • Prompt-Tuning(Lester et al., 2021)

趋势是从复杂到简洁。

APE(自动提示工程师)(Zhou et al., 2022)更进一步:

  1. 让 LLM 根据少量示例生成候选指令
  2. 用评分函数筛选最优候选
  3. 通过蒙特卡洛搜索迭代优化

自动构建 CoT 提示(Shum et al., 2023)采用”增强-剪枝-选择”三步法,先生成伪推理链,再根据正确性剪枝,最后用策略梯度选择最优示例。

【阅读总结】提示可以自动化优化,从嵌入空间梯度到 LLM 自己生成指令,趋势是越来越自动化。


六、增强语言模型(Augmented Language Models)

6.1 检索增强(Retrieval)

模型训练数据有时效性,遇到最新信息就会”幻觉”。检索增强生成(RAG)的思路是:先从知识库检索相关内容,再把检索结果放进提示中。

Lazaridou et al. (2022) 的方法:用 Google 搜索获取文档 → 按 TF-IDF 相似度排序段落 → 取最相关的段落放入提示。

更有趣的是”内部检索“(Liu et al., 2022)——让模型先生成关于某话题的知识,再用这些知识回答问题,效果竟然也很好。

6.2 编程语言辅助

PALPoT 让 LLM 生成 Python 代码来解决数学推理问题,把计算交给解释器,模型只负责”思考”:

`python

# PAL: 让模型生成代码而非直接计算

def solution():

tom_time = 30 * 4 # Elizabeth 30分钟, Tom 4倍

return tom_time / 60 # 转换为小时

`

6.3 外部 API 调用

Toolformer(Schick et al., 2023)让模型自主学习何时调用工具:

  • 📐 计算器:弥补精确计算短板
  • ❓ Q&A 系统:减少幻觉
  • 🔍 搜索引擎:获取最新信息
  • 🌍 翻译系统:低资源语言
  • 📅 日历:感知时间

Toolformer 的训练采用自监督方式:让模型标注 API 调用,过滤掉无用的调用(即没有帮助模型更好预测后续 token 的),然后微调。整个过程类似强化学习。

目前 Toolformer 不支持链式工具调用(一个工具的输出作为另一个的输入),这是未来的重要方向。

【阅读总结】通过检索、代码执行和外部 API,LLM 可以突破自身知识和能力的边界,RAG 和 Toolformer 是最具代表性的技术。


术语对照表

英文术语 中文译法
Prompt Engineering 提示工程
Zero-Shot / Few-Shot 零样本 / 少样本
In-Context Learning 上下文学习
Chain-of-Thought (CoT) 思维链
Self-Consistency 自一致性采样
Tree of Thought (ToT) 思想树
Soft Prompt 软提示
Retrieval-Augmented Generation (RAG) 检索增强生成
Alignment / Steerability 对齐 / 可控生成
Instruction Tuning 指令微调
RLHF 基于人类反馈的强化学习
Toolformer 工具增强语言模型

译者手记:5 个关键收获

  1. 提示工程是实验科学:没有万能公式,不同模型、不同任务需要不同的提示策略,大量实验是必经之路。
  1. 少样本的关键在于质量和排序:不是随便给几个例子就行,示例的选择、多样性和排列顺序都会显著影响效果,需要注意各种偏差。
  1. 思维链是质变而非量变:”Let’s think step by step” 这简单一句话就能大幅提升推理能力,但 CoT 在大模型上才有效,小模型收益有限。
  1. 提示可以自动化优化:从手动设计到 APE 自动搜索,再到梯度优化软提示,提示工程正在从手工艺走向自动化。
  1. 工具增强是 LLM 的下一个战场:RAG 解决知识时效性问题,PAL 把计算外包给代码,Toolformer 让模型自己决定何时调工具——LLM 正在从”能说”走向”能做”。

*作者:攀岩者,技术总监,19年 IT 全栈实战。精通网络、安全、云计算、容器、数据库、超算,持证 PMP、ITIL、CKA、网络工程师、信息安全等级保护、AIX 天工计划。主导过多个千万级政务与智慧城市项目,从售前到交付全流程打通。热衷开源,日拱一卒,每天分享 AI 学习笔记,陪你从零基础到 AI 达人。*

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注