OpenAI 官方提示工程指南:让 AI 模型更听话的六大策略

掌握这六大策略,让你的提示词更高效,让 GPT-4 等 AI 模型输出更精准、更符合预期的结果。

引言

在使用大语言模型(如 GPT-4)时,你是否曾经困惑于:为什么同样的任务,有些人的提示词能让模型输出完美的结果,而你的提示词却总是差强人意?答案可能在于提示工程(Prompt Engineering)的技巧。

OpenAI 官方发布的提示工程指南,总结了大量实践经验,为我们揭示了如何更有效地与 AI 模型沟通。这些方法不是孤立的,而是可以相互结合,发挥更大的作用。本文将深入解读这六大核心策略,帮助你提升与 AI 模型的交互效率。

背景:为什么需要提示工程?

大语言模型并不会读心术,它们只能基于你提供的输入来理解和执行任务。如果我们希望模型输出更简洁的内容,我们就需要明确要求它”简短回答”;如果我们希望输出更专业的内容,我们需要指定”使用专业写作风格”;如果我们对输出格式不满意,最好的方式就是直接展示我们期望的格式。

让模型不需要猜测你的意图,是获得理想结果的关键。此外,指南中的部分示例只适用于最先进的模型如 gpt-4,如果某个模型在任务上表现不佳,且存在更高级的模型,建议尝试使用更强大的版本。

策略一:撰写清晰的指令

这是最基础也是最重要的策略。模型无法猜测你的想法,你需要通过明确的指令来传达你的需求。

核心技巧

1. 在查询中添加详细信息

对比效果:

较差的提问 较好的提问
我该如何在 Excel 中进行加法计算? 我该如何在 Excel 中自动计算一行中的美元总额?我想要的是自动为整张表格的每行进行计算,最终所有的总计数都显示在右侧名为”总计”的列中。

2. 请求模型扮演特定角色

通过系统消息(System Message),可以让模型以特定角色回应。例如:

1
系统:当我请求帮助撰写某些内容时,你的回答中每个段落至少应包含一个幽默的笑话或俏皮的评论。

3. 使用分隔符清晰区分输入的不同部分

使用三重引号、XML 标签、章节标题等分隔符,可以有效区分不同内容:

1
2
用户:请使用三重引号中的文本进行总结,并用俳句的形式表达。
"""输入文本"""

4. 明确指出完成任务需要的步骤

将复杂任务分解为明确的步骤:

1
2
3
系统:请按照以下步骤回应用户的输入。
第 1 步 - 用户会给你提供带有三重引号的文本。请将这段文本总结为一句话,并以"摘要:"作为前缀。
第 2 步 - 将第 1 步中的摘要翻译成西班牙语,并以"翻译:"作为前缀。

5. 提供实例作为参考(Few-shot 提示)

当难以用语言明确描述时,提供示例更直观:

1
2
3
用户:大师,什么是耐心?
助手:深谷自浅泉,宏曲生寂音,繁绣始孤线。
用户:大师,什么是大海?

6. 明确指定输出长度

指定段落、要点数量比指定字数更有效:

1
2
用户:请用三个要点概括三引号内的文本。
"""insert text here"""

策略二:提供参考文本

语言模型可能会自信地编造虚假答案(幻觉),特别是回应深奥主题或被要求提供引文时。提供参考文本可以减少这种问题。

核心技巧

1. 引导模型根据参考文本回答问题

1
2
3
4
系统:当你被提供特定文章,并需要回答问题时,请依据这些文章中的内容来作答。如果这些文章中没有包含答案,你只需表明"无法找到答案"。

用户:<插入文章内容,每篇文章之间用三个引号隔开>
问题:<插入问题>

2. 引导模型用引用的文本回答问题

要求模型引用文档中的段落,提高答案的可验证性:

1
系统:你将会收到一个用三个引号标记的文档和一个问题。你的任务是仅使用所提供的文档来回答这个问题,并引用文档中用来回答问题的部分。引用相关段落时,请使用以下格式 `({"citation": …})`。

由于模型上下文窗口有限,可以使用 Embeddings(嵌入技术)实现高效的知识检索,动态查询相关信息。

策略三:把复杂的任务拆分成简单的子任务

就像软件工程中将复杂系统分解为模块化组件,复杂任务的错误率往往更高。将复杂任务设定为一系列工作流程,每个流程是更简单的任务,前一个任务的输出作为后一个任务的输入。

核心技巧

1. 利用意图分类识别最相关的指令

在处理众多独立指令集的任务中,先对查询类型分类:

1
2
3
4
5
6
7
8
9
系统:你会收到客户服务的查询。请把每个查询分为一个主要类别和一个次要类别,并以 json 格式提供结果。

主要类别包括:账单、技术支持、账户管理或一般咨询。

账单的次要类别包括:
- 取消订阅或升级
- 添加支付方式
- 解释收费
- 争议收费

这种方法的好处:每个查询只包含执行下一阶段所需的指令,降低错误率,同时降低成本(长提示的运行成本更高)。

2. 概括或过滤之前的对话内容

模型上下文长度固定,对话不能无限延续。解决方案:

  • 概括法:当输入达到一定长度时,触发对部分对话的概括
  • 筛选法:动态挑选与当前问题最相关的部分

3. 分步总结长文档

对于超长文档(如一本书),可以:

  • 分别总结每个章节
  • 连接这些摘要并进一步总结
  • 递归进行,直至整本书被总结完毕

如果在理解后续部分时需要前面章节的信息,可以在总结当前内容时附加前面的连续摘要。

策略四:给模型更多时间”思考”

就像计算 17×28 需要时间一样,AI 模型立即回答时更容易出错。要求模型展示”思考过程”,有助于更可靠地推导正确答案。

核心技巧

1. 在仓促做出结论前,指导模型自己寻找解决方法

错误示例(直接询问):

1
2
3
系统:判断学生的解答是否正确。
用户:[太阳能项目成本计算问题]
助手:学生的解答正确。(实际错误!)

正确示例(先让模型自己解决):

1
2
3
4
系统:首先,你需要自行找出问题的解答,然后把你的解答与学生的解答进行比较,评定学生的解答是否准确。在你没有自行解决这个问题之前,请不要对学生的解答进行判断。

助手:让我们设定 x 为太阳能发电装置的面积...
[模型先自己计算,然后发现学生的解答存在错误]

2. 通过内心独白或连串问题隐藏思考过程

在某些应用场景(如教育应用),不适合向用户展示推理过程。解决方案:

  • 内心独白:指导模型将需隐藏的输出部分用结构化形式表现(如三重引号),然后在展示给用户前解析处理
1
2
3
4
5
系统:按以下步骤回答用户问题。
第 1 步 - 首先独立解决问题。将此步骤的所有内容用三重引号 (""") 包围。
第 2 步 - 将你的解答与学生的答案比较。将此步骤的所有内容用三重引号 (""") 包围。
第 3 步 - 如果学生答案有误,想出一个不直接透露答案的提示。将此步骤的所有内容用三重引号 (""") 包围。
第 4 步 - 如果学生答案有误,给出第 3 步的提示(不用三重引号)。用"提示:"替代"第 4 步 - ..."。
  • 连续提问:通过一系列查询实现,除最后一个外,所有查询结果都不展示给用户

3. 问模型是否有遗漏

当模型列出相关摘录时,可能过早结束。通过后续查询寻找遗漏:

1
用户:还有其他相关的摘录吗?请注意不要重复之前的摘录。同时确保所选摘录包含充分的背景信息。

策略五:运用外部工具

弥补模型不足,利用其他工具的输出作为输入。

核心技巧

1. 运用基于嵌入的搜索实现知识检索

将文本语料库分割成多个块,对每个块进行嵌入处理并存储。然后对查询进行嵌入操作,进行向量搜索,找到最相关的文本块。

相关资源:OpenAI Cookbook

2. 利用代码执行进行更精确的计算或调用外部 API

让模型编写并运行代码,而不是自行计算:

1
2
3
系统:你可以通过用三个反引号包裹 Python 代码来编写并执行代码,例如 ```code goes here```。这种方式适用于需要进行计算的情况。

用户:求解以下多项式的所有实数解:3*x**5 - 5*x**4 - 3*x**3 - 7*x - 10。

安全警告:模型生成的代码执行可能存在安全风险,必须采取预防措施,使用隔离的代码执行环境。

3. 使模型能够访问特定功能

通过函数调用(Function Calling)让模型使用外部工具:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# OpenAI 文档中的函数调用示例
tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "获取某地的当前天气",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "城市和州,例如:旧金山,加利福尼亚",
},
"unit": {"type": "string", "enum": ["摄氏", "华氏"]},
},
"required": ["location"],
},
}
}
]

策略六:系统地对变更进行测试

如果能对性能进行量化,就能更好地提高性能。对提示词的修改在少数例子上可能表现更佳,但在更具普遍性的样本集上可能导致整体性能下降。因此需要设计全方位的测试(评估)。

核心技巧

根据标准答案的参考评估模型输出效果

建立测试集,包含:

  • 输入提示
  • 预期的标准输出
  • 模型实际输出

通过对比评分、人工审核等方式评估性能变化。

测试驱动开发版提示工程工作流

  1. 建立测试集(包含代表性的样本)
  2. 运行当前提示词版本,记录性能
  3. 修改提示词
  4. 在整个测试集上重新测试
  5. 如果性能提升 → 保留修改;如果性能下降 → 丢弃或调整修改
  6. 重复步骤 3-5

这样可以确保修改在总体上有积极作用,避免局部优化导致整体性能下降。

实践建议

  1. 组合使用:这些策略不是孤立的,可以组合使用以达到最佳效果
  2. 实验优先:没有放之四海而皆准的方法,鼓励实验找到最适合你的技巧
  3. 版本控制:对提示词进行版本管理,记录每次修改及其效果
  4. 持续优化:随着使用场景的变化,持续评估和优化提示词

结语

提示工程是与 AI 模型高效沟通的艺术。掌握这六大策略——撰写清晰的指令、提供参考文本、拆分复杂任务、给予思考时间、运用外部工具、系统测试——将显著提升你的 AI 交互效率。

记住,模型不会读心术。你的提示词越清晰、越详细、越结构化,模型的输出就越符合预期。同时,在面对复杂任务时,不要期望一次提示就能完美解决,善用步骤分解、意图分类等技巧,让模型逐步完成你的需求。

最重要的一点:持续学习和实验。OpenAI 官方提供了丰富的示例提示,建议花时间浏览这些示例,发现 GPT 模型的潜能,并思考如何将这些技巧应用到你的具体场景中。


参考资料


本文版权声明:本文内容基于 OpenAI 官方文档翻译整理而来,原文版权归 OpenAI 所有。中文翻译版权归宝玉的分享所有。本文内容根据 Creative Commons BY-NC-SA 4.0 许可协议发布。