提示工程(Prompt Engineering)
提示工程(Prompt Engineering)
作者:Lilian Weng(翁丽莲 · OpenAI VP of AI)
发布:2023年3月15日 · Lil’Log(阅读约 21 分钟)
原文链接:https://lilianweng.github.io/posts/2023-03-15-prompt-engineering/
提示工程(Prompt Engineering),又称上下文提示(In-Context Prompting),是指在不更新模型权重的情况下,通过如何与 LLM 沟通来引导其行为以实现期望输出的方法。这是一门经验科学,提示工程方法的效果在不同模型之间差异很大,因此需要大量的实验和启发式策略。
[Lilian 的个人辣评] 在我看来,有些提示工程论文不值得写 8 页长,因为这些技巧用一两句话就能说清楚,剩下的全是基准测试。一个易用且共享的基准测试基础设施对社区更有益。
基础提示方法
零样本(Zero-Shot)
直接给模型下达任务指令,不提供任何示例。
“将以下英文翻译成中文:Hello, world.”
少样本(Few-Shot)
在提示中提供几个输入-输出示例,让模型学习任务模式。
“将以下英文翻译成中文:
- ‘Good morning’ → ‘早上好’
- ‘Thank you’ → ‘谢谢’
- ‘Hello’ → ?”
示例选择技巧:
- 选择与目标输入语义相似的示例
- 选择与目标输入标签分布一致的示例
- 多样化——涵盖不同的模式
示例排列顺序:
- 模型可能受示例顺序影响,最后出现的示例影响最大(近期效应)
- 尝试不同顺序
指令提示(Instruction Prompting)
用清晰的指令描述任务要求,而非仅仅提供示例。指令越具体越好:
| 好的指令 | 不好的指令 |
|---|---|
| ”用一句话回答,不超过 10 个词" | "回答问题" |
| "以 JSON 格式输出,包含 name 和 age 字段" | "输出结果" |
| "如果你不确定,回答’我不知道’" | "尽力回答” |
自一致性采样(Self-Consistency Sampling)
对同一个提示进行多次采样,然后从多个答案中选择最一致的那个。
工作原理:
- 对同一提示,使用较高的温度(temperature)进行 N 次采样
- 将采样结果聚类
- 选择聚类最多的簇中的答案(或在数学问题中取多数答案)
效果:在算术推理和常识推理任务上显著提升准确率,比单次 CoT 采样高出几个百分点。
思维链(Chain-of-Thought, CoT)
CoT 鼓励模型在给出最终答案之前,先生成中间的推理步骤。这是提示工程领域最具影响力的突破之一。
基础 CoT
在示例中加入推理过程:
Q: 商店有 20 个苹果,卖掉了 5 个,然后又进了 8 个,现在有多少个? A: 开始时 20 个,卖掉 5 个剩 15 个,又进 8 个,所以现在有 23 个。
零样本 CoT
只需在提示末尾加上 “让我们一步一步思考”(Let’s think step by step),就可能激发模型的推理行为。
CoT 的变体
| 变体 | 说明 |
|---|---|
| 思维链自我一致 | CoT + 多次采样 + 多数投票 |
| 思维树(ToT) | 在每一步探索多个推理路径,进行回溯和剪枝 |
| 思维图(GoT) | 将推理过程建模为有向图,允许合并多个推理分支 |
| 自动 CoT | 自动生成 CoT 示例,而非手动编写 |
自动提示设计
基于梯度的方法
- AutoPrompt:通过梯度搜索,自动找到触发特定行为的”触发词”
- Prefix Tuning:在输入前添加一组可学习的”前缀向量”
- P-Tuning:在嵌入层插入可学习的提示向量
基于搜索的方法
- APE(自动提示工程师):使用 LLM 自己生成和优化提示词
- LLM 生成一批候选提示
- 在验证集上评估效果
- 选择表现最佳的提示作为新起点,迭代优化
增强型语言模型
当纯提示不够时,可以增强模型的能力:
检索增强(RAG)
在提示中注入从外部知识库检索到的相关内容,让模型能够:
- 引用最新信息
- 基于验证过的事实生成
- 减少幻觉
编程语言增强(PoT / PAL)
Program-of-Thought:让模型用 Python 代码表达推理步骤,然后执行代码获得结果。比自然语言 CoT 更可靠,因为代码执行是确定性的。
外部 API 调用
模型学习调用外部工具 API:
- 计算器:精确计算
- 搜索引擎:实时信息查询
- 知识库:领域专有数据
- 代码解释器:执行代码并分析结果
实用资源推荐
| 资源 | 说明 |
|---|---|
| OpenAI 提示工程指南 | 官方最佳实践 |
| Anthropic 提示工程文档 | Claude 提示技巧 |
| PromptSource | 提示模板仓库 |
| LangChain | 提示链管理框架 |
Lilian Weng 的这篇文章是提示工程领域引用最广泛的入门综述之一,被几乎所有大模型开发团队作为内部培训材料。
Share Article
If this article helped you, please share it with others!