模型指南

ChatGPT 与 OpenAI 提示词:实用指南

如何为 ChatGPT 和 OpenAI 模型编写提示词:消息角色、推理模型、结构化输出、长上下文、精确的 token 计数,以及常见错误。

译自英文原文。代码、提示词和模型输出保留英文。

提示词的基本原理适用于所有模型。本指南涵盖 OpenAI 模型特有的内容,包括 ChatGPT 应用和 API,以及它们的行为在哪些地方应当改变你的写法。

模型名称和限制经常变化,因此本指南描述的是历代模型中保持稳定的行为。当前的模型列表请查看 OpenAI 的文档。

需要不同提示词的两类模型

OpenAI 提供通用聊天模型和推理模型。这种区别比模型名称更重要。

通用聊天模型 推理模型
工作方式 直接回答 回答前在内部思考
最佳提示词风格 明确的分步指令 目标、约束和成功标准
“一步一步地思考” 可能有帮助 没必要;可能有害
示例 常常有用 先不加示例试试
成本与延迟 较低 较高,可通过推理强度调节

一种有用的思路:向聊天模型交代任务,就像对一位需要流程的称职新手;向推理模型交代任务,就像对一位需要目标的资深同事。

消息角色

API 接收带角色的消息。应用作者的指令放在系统消息里,较新的 OpenAI API 称之为 developer 消息。用户输入放在用户消息里。模型会优先遵循 developer 指令。

把常驻规则、角色和输出格式放进 developer 消息。把任务及其数据放进用户消息。参阅系统提示词与角色提示词。

在 ChatGPT 应用中,自定义指令和项目指令起的是系统消息的作用。

要字面、要明确

近期的 OpenAI 模型会紧密而字面地遵循指令。由此有两点:

  • 它们做的是你说的,而不是你暗示的。 如果你除了要求的修复之外还想要建议,就两者都要提。
  • 通常一句清晰的话就能纠正一种行为。 无需大写,也无需重复。过度强调可能导致某条规则被过度应用。

用 Markdown 和分隔符组织结构

OpenAI 模型能很好地处理用 Markdown 标题和列表组织的指令,也能很好地处理用 XML 风格标签包裹的文档和输入。

## Task
Summarize the incident report for the on-call team.

## Requirements
- 5 bullet points.
- Include root cause, customer impact, and fix.

## Output format
A markdown list. No introduction.

<report>
{{report}}
</report>

长上下文

当提示词包含大型文档时,把指令同时放在开头和结尾。如果只能放一次,就放在文档之前。这遵循的是 OpenAI 自己关于长上下文提示词的建议。

结构化输出(Structured Outputs)

对于代码要解析的内容,使用 API 的 Structured Outputs 功能,并采用严格模式的 JSON Schema。响应将被约束在该 schema 之内,从而消除一整类解析失败。

  • 给字段起好名字并写好描述:模型会读取 schema。
  • 对固定取值集合使用枚举。
  • 如果想要解释,把推理字段放在结果字段之前。
  • 仍要验证:响应可能在输出上限处被截断,或被拒绝。

更多内容参阅结构化输出提示词。

函数调用

工具由名称、描述和参数 schema 定义。描述就是模型用来决定何时调用该工具的提示词,所以要写明它做什么、何时使用、返回什么。严格模式会把参数约束在 schema 之内。参阅面向 AI 智能体的提示词。

推理强度

推理模型提供一个设置,用来控制花多少精力思考。简单的提取和分类用低强度,多步分析和困难的代码用较高强度。调整这个设置,比在提示词里添加推理指令更有效。

token 计数是精确的

OpenAI 公开了它的分词器,因此你可以离线统计提示词的 token 数,在发送之前就知道输入成本。PromptFlowEngine 对 OpenAI 模型使用这些分词器,并把结果标注为精确。可以在工作区检查提示词,也可以参阅 token 优化。

提示词缓存会自动应用于超过最小长度的重复提示词前缀,所以请把稳定的内容放在前面,把可变的内容放在最后。

在 ChatGPT 应用中使用提示词

  • 上下文只给一次。 对于常驻偏好,使用自定义指令或项目,而不是反复输入。
  • 话题变化时开启新对话。 旧指令会在长对话中残留。
  • 附上材料。 上传文件,而不是描述它。
  • 要求给出格式。 表格、清单或字数上限。
  • 检查记忆。 如果已保存的记忆以你不想要的方式引导回答,请查看或停用它们。
  • 不要粘贴密钥。 聊天里的密钥和客户数据已经脱离了你的控制。

PromptFlowEngine Chrome 扩展可以在 ChatGPT 内部工作:它会分析提示词输入框里的草稿,重构松散的请求,并在草稿含有凭据时发出警告。

使用 OpenAI 模型的常见错误

错误 后果 修正
对推理模型给出分步指令 更慢,但没有更好 说明目标和约束
只用文字要求返回 JSON 偶尔出现无效输出 使用 Structured Outputs
指令被埋在长文档下面 指令被低估 在文档之后重复一遍
对每条规则都加强调 规则被过度应用 用平实的陈述;解释原因
按字符数估算 token 预算失准 用分词器计数

优化 ChatGPT 提示词

  1. 在第一行说明任务。
  2. 添加受众、约束和输出格式。
  3. 用标签包裹粘贴的材料。
  4. 删除冗词和重复。
  5. 用真实输入测试并比较版本。

PromptFlowEngine 提示词优化器会完成第 3 和第 4 步,并验证没有丢失任何要求。

可以与 Claude 提示词指南和 Gemini 提示词指南对照阅读。