写 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. 不要过度编排模型的思考
对于复杂问题,可以要求模型检查多个方面、比较不同方案并说明依据,但没有必要把每一个内部思考步骤都写死。过度规定推理过程,可能让模型机械地执行一个并不适合当前问题的步骤。更好的方式是明确目标、判断维度和成功标准,给模型保留选择方法的空间。
说明任务
补充背景
组织输入
提供必要示例
明确行动权限
定义完成标准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 的差异是什么?
如果把两套方法放在一起,可以看到它们并不是互相冲突,而是关注点略有不同。
强调上下文与行动边界
- 补充工作背景
- 用 XML 标签组织复杂信息
- 解释规则背后的原因
- 明确模型的行动权限
- 为复杂任务保留判断空间
强调指令结构与迭代验证
- 核心指令前置
- 使用标题或分隔符
- 规定长度、格式和风格
- 通过示例表达预期
- 先零样本,再增加示例
- 根据结果优化 Prompt
但这些差异不应该被理解成固定规则。Claude 也需要明确输出格式,ChatGPT 也需要充分背景;两种模型都能理解 XML、标题、示例和约束。模型版本还会持续变化,如果 Prompt 完全依赖某个模型暂时的表达偏好,它就很难长期维护。
因此,我更希望建立一套跨模型的 Prompt 标准,再根据具体模型增加少量适配。
我的 Prompt 标准:八段式任务协议
综合 Claude 和 ChatGPT 的共同原则,我把一个完整 Prompt 拆成八个部分。
- 01
任务目标
首先说明最终要完成什么。目标应该使用可以执行和检查的动词,例如分析、判断、提取、比较、生成、修改、验证。避免使用“看看”“处理一下”“优化一下”这类没有完成边界的表达。
- 02
使用背景
说明结果将在什么场景使用、面对谁,以及为什么要完成这项任务。背景只保留会影响判断的信息。
- 03
输入材料
明确模型可以使用哪些事实、文件、数据和上下文,并把输入材料与指令分隔开。如果输入不完整,需要说明模型能否自行搜索、能否提出问题,以及能否作出合理假设。
- 04
成功标准
说明什么样的结果才算合格,例如每个结论都有证据、覆盖指定维度、可以直接进入项目评审、能够被程序解析,以及不确定信息被单独标记。成功标准决定模型应该把精力放在哪里。
- 05
规则与边界
说明必须遵守的规则、优先级和禁止事项,包括可以使用的信息范围、是否允许假设、是否允许调用工具、是否可以直接修改、哪些情况必须人工确认,以及信息不足时怎样处理。
- 06
执行要求
说明模型需要完成哪些关键动作,而不是规定所有内部思考步骤。在 Agent 任务中,还要说明可以调用哪些工具、工具失败后怎么办、哪些操作可以自动完成,以及哪些操作必须等待确认。
- 07
输出协议
明确输出结构、字段、长度、语气和格式。“输出协议”比“输出格式”更完整,因为它还规定了每个字段表达什么、能否为空,以及不确定内容如何呈现。
- 08
校验与追问
要求模型在交付前进行检查,并定义信息不足时的处理方式。如果缺少会改变结论的关键信息,先提出不超过 3 个问题;如果缺失信息不影响主要判断,可以继续完成,并标记假设。
一份完整的跨模型 Prompt 模板
### 任务目标
说明最终需要模型完成什么。
### 使用背景
说明结果用于什么场景、面对什么用户,以及任务为什么重要。
### 输入材料
"""
粘贴需要处理的资料、数据或上下文。
"""
### 成功标准
1. 结果必须满足什么条件
2. 哪些内容必须覆盖
3. 如何判断结果可以被使用
### 规则与边界
1. 可以使用哪些信息
2. 不得虚构哪些内容
3. 是否允许搜索或调用工具
4. 哪些操作需要人工确认
5. 信息不足时如何处理
### 执行要求
1. 需要完成哪些关键动作
2. 使用什么判断维度
3. 异常或冲突如何处理
### 输出协议
1. 输出结构
2. 每个部分包含的字段
3. 长度、语气和格式
4. 不确定内容的标记方式
### 校验与追问
输出前按照成功标准进行检查。
如果缺少会改变结论的关键信息,先提出不超过3个问题。在 Claude 中,可以把这些部分转换成 XML 标签;在 ChatGPT 中,可以继续使用标题与三引号。外部结构可以变化,但任务协议不变。
Prompt 的质量应该如何判断?
Prompt 质量不能只看某一次回答是否“看起来不错”,而应该看它是否具备四种稳定性。
输入稳定性
更换不同输入以后,模型是否仍然能够正确理解任务。
输出稳定性
多次运行后,结果结构、判断维度和信息密度是否基本一致。
边界稳定性
面对缺失信息、错误数据和越权要求时,模型是否仍然遵守规则。
模型稳定性
更换模型或升级版本后,Prompt 的核心逻辑是否仍然成立。
因此,Prompt 不应该只被保存为一段文字,还应该和测试样本、预期结果、失败案例及版本记录放在一起。
Prompt 不是写给模型的一句话
一个好的 Prompt,本质上做了三件事:
- 把人的模糊意图变成明确任务
- 把模型的不确定生成限制在合理边界
- 把最终结果变成可以检查和优化的输出
Claude 与 ChatGPT 提供了不同的组织方法,但共同指向同一个结论:模型能力越强,Prompt 越不需要堆砌技巧,却越需要把目标、背景、边界和成功标准说清楚。
所以我最终形成的 Prompt 标准不是某种固定句式,而是一份八段式任务协议:
目标、背景、输入、成功标准、规则边界、
执行要求、输出协议、校验追问Prompt 不是一句更聪明的问题,而是一次更清楚的任务定义。