写 Prompt 的本质不是寻找一句神奇的话,而是减少任务中的歧义。对于复杂任务,它更接近一份任务说明书,也是一份人与模型之间的执行协议。

一个看似简单,却很典型的失败案例

我曾经把一份用户访谈记录交给模型,并输入:

请分析这份访谈,提炼用户需求,并给出产品建议。

模型很快返回了一份结构完整的报告:有用户画像、痛点总结、需求优先级和产品功能建议。表面上看,结果相当完整;但仔细检查后发现,模型把访谈中用户“希望有某项功能”的表达,直接当成了明确需求,又根据常见行业经验补充了用户年龄、使用场景和商业价值。最终报告读起来很专业,却无法区分哪些内容来自访谈,哪些内容只是模型推测。

问题不在于模型不会分析,也不在于这句话写得不够礼貌,而在于这个 Prompt 只提出了一个问题,没有定义一项完整任务。它没有说明分析结果用于什么场景、哪些内容必须有证据、是否允许作出假设、信息不足时应该怎么办、输出怎样才算合格。

后来使用得越多,我越觉得“怎样向模型提问”这个理解太轻了。提问只是 Prompt 最表面的一层。对于复杂任务,Prompt 更接近一份任务说明书,也是一份人与模型之间的执行协议。

它要告诉模型的不只是“做什么”,还包括为什么做、依据什么做、做到什么程度、不能做什么、结果怎样呈现,以及如何判断结果是否合格。

如果这些问题没有被说明,模型就只能补全我们的意图。补全得准确,看起来像智能;补全得不准确,就会产生偏题、幻觉和不稳定。

所以我认为,写 Prompt 的本质不是寻找一句神奇的话,而是减少任务中的歧义。

研究 Claude 和 ChatGPT 共同强调了什么?

Anthropic 和 OpenAI 对 Prompt 的具体写法有所区别,但底层原则非常接近。

  • 明确任务目标
  • 提供必要的任务背景
  • 分隔输入资料与指令
  • 预先规定输出要求
  • 在必要时提供示例
  • 通过测试优化结果
  • 不依赖模型猜测隐含要求

这说明,高质量 Prompt 首先是一个任务定义问题,而不是语言修辞问题。Prompt 写得长,不代表任务定义得清楚;Prompt 写得专业,也不代表结果可以验证。真正重要的是,模型能否从 Prompt 中识别目标、依据、动作、边界和完成标准。

Claude 的 Prompt 标准

Claude 官方将“清晰和直接”放在重要位置。它建议把模型看作一名能力很强、但刚加入团队的新员工:它有能力完成任务,却不了解你的业务背景、默认规则和工作习惯。

1. 直接说明希望模型完成什么

不要只写:

帮我看看这份需求。

应该写成:

分析这份需求是否成立,识别其中缺失的用户、场景、数据依据和成功标准,并给出需要进一步确认的问题。

“看看”没有完成标准,“分析是否成立”才是可以执行的任务。

2. 说明任务背景和规则原因

Claude 不仅需要知道规则是什么,也能从规则背后的原因中更准确地处理边界情况。

不要补充材料中没有出现的数据,因为这份结果将用于项目评审,无法追溯来源的数据会影响判断可信度。

这比单独写“不要虚构数据”提供了更完整的决策依据。

3. 使用 XML 标签组织复杂 Prompt

Claude 官方建议在复杂输入中使用 XML 标签区分角色、背景、资料、规则和输出要求。

<role>
你是一名B端产品经理。
</role>

<goal>
判断需求是否值得进入产品设计阶段。
</goal>

<context>
该结果将用于内部需求评审。
</context>

<source>
用户访谈、业务数据与现有流程材料。
</source>

<constraints>
不得补充来源中没有出现的事实。
信息不足时必须明确指出。
</constraints>

<output>
输出结论、证据、缺失信息、风险和下一步建议。
</output>

XML 本身并不会让模型变聪明。它的价值是建立边界,让模型清楚地区分“指令是什么”和“被分析的内容是什么”。

4. 用示例表达难以描述的标准

如果只说“写得专业一点”,模型仍然需要猜测什么叫专业。更有效的方式是提供一个合格示例,并指出它为什么合格。示例既能表达格式,也能表达判断尺度、语气和信息密度。

5. 明确模型是建议还是执行

在 Agent 场景中,“给出修改建议”和“直接修改文件”是两种完全不同的授权。如果希望它执行,需要明确写“修改”;如果只希望它分析,则应写“提供建议,不修改文件”。这不仅影响结果,也决定了工具调用和操作风险。

6. 不要过度编排模型的思考

对于复杂问题,可以要求模型检查多个方面、比较不同方案并说明依据,但没有必要把每一个内部思考步骤都写死。过度规定推理过程,可能让模型机械地执行一个并不适合当前问题的步骤。更好的方式是明确目标、判断维度和成功标准,给模型保留选择方法的空间。

说明任务
补充背景
组织输入
提供必要示例
明确行动权限
定义完成标准

参考:Claude Prompting Best Practices

ChatGPT 的 Prompt 标准

OpenAI 同样强调任务定义和测试优化,但在组织 Prompt 时,更突出指令位置、分隔符、输出要求和示例。

1. 把核心指令放在前面

OpenAI 建议先说明任务,再提供需要处理的材料。

请把下面的访谈记录整理成需求分析,输出用户、场景、问题、证据和待确认事项。

访谈记录:
"""
……
"""

这样可以减少模型把原始材料与操作要求混在一起的可能。

2. 使用标题或分隔符区分内容

### 任务
### 背景
### 输入资料
### 规则
### 输出格式

也可以使用三引号包裹原始材料。分隔符的作用和 Claude 的 XML 标签相似,都是帮助模型理解 Prompt 结构。差异主要在表达习惯,不在底层目的。

3. 明确结果的长度、格式和风格

“简洁一点”很难被稳定执行,“控制在 300 字以内”更明确。

输出5个部分,每个部分包含标题、结论和证据;最后列出3个需要继续确认的问题。

长度、层级、字段、语气和使用场景越明确,结果越容易复用。

4. 用示例展示输出

如果输出将被程序解析,或者团队需要重复得到同一种结构,仅仅描述格式还不够,最好给出一个简短示例。

期望格式:

问题:
证据:
影响:
置信度:
待确认信息:

5. 从零样本开始,再增加少量示例

简单任务可以先直接提出要求。如果结果不稳定,再增加一个或多个示例。示例不是越多越好。示例会增加上下文,也可能让模型过度模仿。是否需要示例,应由任务稳定性决定。

6. 不只说“不要做什么”

与其写:

不要写得空泛。

不如写:

每个结论必须引用输入材料中的事实或数据;没有依据的内容放入“待确认事项”,不要作为结论。

前者只是禁止,后者给出了替代行为。

7. 把 Prompt 作为可迭代对象

第一次结果不理想时,不应该只评价模型“好不好用”,而应该检查:

  • 目标是否明确
  • 背景是否足够
  • 输入是否完整
  • 规则是否冲突
  • 输出是否可验证
  • 示例是否表达了真正预期
指令前置
信息分隔
要求明确
格式具体
示例说明
正向约束
测试优化

参考:ChatGPT Prompt Engineering Best Practices OpenAI API Prompt Engineering Best Practices

Claude 和 ChatGPT 的差异是什么?

如果把两套方法放在一起,可以看到它们并不是互相冲突,而是关注点略有不同。

CLAUDE

强调上下文与行动边界

  • 补充工作背景
  • 用 XML 标签组织复杂信息
  • 解释规则背后的原因
  • 明确模型的行动权限
  • 为复杂任务保留判断空间
CHATGPT

强调指令结构与迭代验证

  • 核心指令前置
  • 使用标题或分隔符
  • 规定长度、格式和风格
  • 通过示例表达预期
  • 先零样本,再增加示例
  • 根据结果优化 Prompt

但这些差异不应该被理解成固定规则。Claude 也需要明确输出格式,ChatGPT 也需要充分背景;两种模型都能理解 XML、标题、示例和约束。模型版本还会持续变化,如果 Prompt 完全依赖某个模型暂时的表达偏好,它就很难长期维护。

因此,我更希望建立一套跨模型的 Prompt 标准,再根据具体模型增加少量适配。

我的 Prompt 标准:八段式任务协议

综合 Claude 和 ChatGPT 的共同原则,我把一个完整 Prompt 拆成八个部分。

  1. 01

    任务目标

    首先说明最终要完成什么。目标应该使用可以执行和检查的动词,例如分析、判断、提取、比较、生成、修改、验证。避免使用“看看”“处理一下”“优化一下”这类没有完成边界的表达。

  2. 02

    使用背景

    说明结果将在什么场景使用、面对谁,以及为什么要完成这项任务。背景只保留会影响判断的信息。

  3. 03

    输入材料

    明确模型可以使用哪些事实、文件、数据和上下文,并把输入材料与指令分隔开。如果输入不完整,需要说明模型能否自行搜索、能否提出问题,以及能否作出合理假设。

  4. 04

    成功标准

    说明什么样的结果才算合格,例如每个结论都有证据、覆盖指定维度、可以直接进入项目评审、能够被程序解析,以及不确定信息被单独标记。成功标准决定模型应该把精力放在哪里。

  5. 05

    规则与边界

    说明必须遵守的规则、优先级和禁止事项,包括可以使用的信息范围、是否允许假设、是否允许调用工具、是否可以直接修改、哪些情况必须人工确认,以及信息不足时怎样处理。

  6. 06

    执行要求

    说明模型需要完成哪些关键动作,而不是规定所有内部思考步骤。在 Agent 任务中,还要说明可以调用哪些工具、工具失败后怎么办、哪些操作可以自动完成,以及哪些操作必须等待确认。

  7. 07

    输出协议

    明确输出结构、字段、长度、语气和格式。“输出协议”比“输出格式”更完整,因为它还规定了每个字段表达什么、能否为空,以及不确定内容如何呈现。

  8. 08

    校验与追问

    要求模型在交付前进行检查,并定义信息不足时的处理方式。如果缺少会改变结论的关键信息,先提出不超过 3 个问题;如果缺失信息不影响主要判断,可以继续完成,并标记假设。

一份完整的跨模型 Prompt 模板

### 任务目标
说明最终需要模型完成什么。

### 使用背景
说明结果用于什么场景、面对什么用户,以及任务为什么重要。

### 输入材料
"""
粘贴需要处理的资料、数据或上下文。
"""

### 成功标准
1. 结果必须满足什么条件
2. 哪些内容必须覆盖
3. 如何判断结果可以被使用

### 规则与边界
1. 可以使用哪些信息
2. 不得虚构哪些内容
3. 是否允许搜索或调用工具
4. 哪些操作需要人工确认
5. 信息不足时如何处理

### 执行要求
1. 需要完成哪些关键动作
2. 使用什么判断维度
3. 异常或冲突如何处理

### 输出协议
1. 输出结构
2. 每个部分包含的字段
3. 长度、语气和格式
4. 不确定内容的标记方式

### 校验与追问
输出前按照成功标准进行检查。
如果缺少会改变结论的关键信息,先提出不超过3个问题。

在 Claude 中,可以把这些部分转换成 XML 标签;在 ChatGPT 中,可以继续使用标题与三引号。外部结构可以变化,但任务协议不变。

Prompt 的质量应该如何判断?

Prompt 质量不能只看某一次回答是否“看起来不错”,而应该看它是否具备四种稳定性。

01 / INPUT

输入稳定性

更换不同输入以后,模型是否仍然能够正确理解任务。

02 / OUTPUT

输出稳定性

多次运行后,结果结构、判断维度和信息密度是否基本一致。

03 / BOUNDARY

边界稳定性

面对缺失信息、错误数据和越权要求时,模型是否仍然遵守规则。

04 / MODEL

模型稳定性

更换模型或升级版本后,Prompt 的核心逻辑是否仍然成立。

因此,Prompt 不应该只被保存为一段文字,还应该和测试样本、预期结果、失败案例及版本记录放在一起。

Prompt 不是写给模型的一句话

一个好的 Prompt,本质上做了三件事:

  • 把人的模糊意图变成明确任务
  • 把模型的不确定生成限制在合理边界
  • 把最终结果变成可以检查和优化的输出

Claude 与 ChatGPT 提供了不同的组织方法,但共同指向同一个结论:模型能力越强,Prompt 越不需要堆砌技巧,却越需要把目标、背景、边界和成功标准说清楚。

所以我最终形成的 Prompt 标准不是某种固定句式,而是一份八段式任务协议:

目标、背景、输入、成功标准、规则边界、
执行要求、输出协议、校验追问

Prompt 不是一句更聪明的问题,而是一次更清楚的任务定义。