把请求变成可测试的合约
好 prompt 会描述要写什么,也会在生成开始前给出可检查的成功标准。
类型: Learn 语言: Python 前置要求: 学决策,不背词汇、Prompt 工程预计时间: 约 100 分钟
学习目标
- 把模糊请求转成结果、证据标准、约束和验收检查。
- 将复杂工作拆成能够独立检查和纠正的阶段。
- 在直接 prompting、示例、结构化章节、迭代和重新设计工作流之间做出选择。
- 诊断 prompt 失败,不把每个糟糕输出都当作模型失败。
- 为高价值 Claude 工作流构建可复用的 prompt 数据包。
问题所在
一位运营经理要求 Claude“研究我们的客户投诉,制作一份有说服力的管理层报告并提出建议”。结果读起来很流畅,包含四条建议、两个趋势和一张整洁的表格。
但它根本无法使用。其中一条建议违反政策;表格混用了两个日期范围;漏掉了一项地区例外;也没人能判断哪条投诉支持哪项主张。
团队尝试了三种修复。他们加上“请保持准确”,要求 Claude“更深入地思考”,然后把相同请求粘贴到能力更强的模型中。文笔变好了,证据问题却依然存在。
这份请求从未定义要支持的决策、允许使用的来源、必需覆盖范围、受众,或一条建议有证据支持的判断标准。Claude 优化出了看似合理的报告,因为“看似合理”是唯一可见的目标。
核心概念
Prompting 就是接口设计
Prompt 是连接人类意图和模型行为的接口。好的接口会明确输入、约束、输出和失败状态;薄弱的 prompt 则把这四项全藏在“出色”“全面”或“专业”这类形容词里。
使用以下合约:
- 结果: 这份输出要支持什么决策或行动?
- 上下文: 哪些背景是必需的,哪些无关?
- 任务: Claude 应执行什么转换?
- 证据: 哪些来源可以支持主张?证据有缺口时怎么办?
- 约束: 哪些情况绝不能发生?
- 格式: 结果必须采用什么确切形式?
- 验收检查: 人或程序如何判断它是否通过?
各部分是否齐全,比排列顺序更重要。可以用 Markdown 标题、XML 风格标签或其他一致的分隔符标记章节。结构既能帮助模型区分数据与指令,也便于审核者定位假设。
<outcome>
Prepare the weekly support review so the director can choose two process fixes.
</outcome>
<sources>
Use only the attached tickets and policy handbook. Treat the handbook as authoritative.
</sources>
<task>
Group complaints by root cause, quantify each group, and propose no more than three fixes.
</task>
<constraints>
Do not infer customer intent. Mark missing dates as unknown. Do not include names.
</constraints>
<output>
Return: executive summary, evidence table, recommendations, uncertainties.
</output>
<checks>
Every recommendation must cite at least two ticket IDs and one policy section.
</checks>先定标准,再改措辞
没有目标,就无法优化 prompt。先定义标准,再用代表性案例改进 prompt。
对于投诉报告,标准可以是:
- 每条投诉只归类一次,无法归类时明确标记。
- 各项计数之和与输入总数一致。
- 政策主张引用提供的具体章节。
- 建议不超出团队权限。
- 不包含个人身份信息。
- 明确展示不确定性,禁止无依据的猜测。
“让它更好”没有任何诊断信号。“各项计数必须一致”则会告诉你哪里失败、该改什么。
沿验证边界拆解
长任务若在每个阶段都产出可检查的产物,会更安全。一种实用拆法是:
flowchart LR
A["Clarify the decision"] --> B["Inventory and classify sources"]
B --> C["Extract claims and evidence"]
C --> D["Analyze patterns"]
D --> E["Draft for the audience"]
E --> F["Validate claims and constraints"]
F --> G["Approve or revise"]这与按任意页数切分不同。每条边界都应回答一个问题:
- 能否在分析前核验来源集合?
- 能否在解释前核验提取出的事实?
- 能否在发布前核验建议?
只有互不依赖的任务才能并行。投诉分类和政策约束提取可以并行;撰写建议必须等待两者完成。
顺序执行的阶段可以减少隐藏耦合,也能建立恢复点。如果提取错了,只需修复提取阶段,不必重新生成整份报告。
示例用来教边界
规则难以说明或格式必须精确时,few-shot 示例很有用。好示例要展示决策边界,尤其是简单的中心案例无法说明的情况。
对于情感标签,不要只给三个明显正面的示例。应包含一条模糊投诉、一条褒贬混合的陈述和一个“unknown”案例,并解释每个标签为何适用。模型由此学到类别之间的分界。
示例也可能意外制造规则。如果每个演示都提到零售客户,模型可能把零售用语视为任务的一部分。示例要多样、精简,并与书面标准保持一致。
谨慎分配角色
角色 prompt 可以提供视角,例如“以合规审核员的身份行事”,但不会带来知识、权限或访问能力。角色不能替代政策文本、来源证据或人工批准步骤。
应使用具体视角:
Review the draft from the perspective of the privacy owner.
Identify each sentence that exposes personal data, cite the applicable supplied policy,
and propose the smallest compliant revision.这可以测试。“你是世界上最优秀的隐私专家”则不行。
迭代需要假设
有效迭代每次只改变一个有意义的变量,并在小型评估集上测量效果。例如:
- 假设:要求主张—证据表可以减少缺乏支持的建议。
- 假设:把政策放在工单前面可以改善例外处理。
- 假设:增加一个反例可以改善混合案例的分类。
比较 prompt 变体时,评估案例要保持不变。否则无法区分究竟是 prompt 更好,还是输入更简单。
反复修改仍然无效时,停止润色句子。问题可能是缺少证据、需求冲突、上下文过多、能力不足,或工作流不安全。
动手构建
第 1 步:编写验收卡
选择一项重复工作,在写 prompt 前先写一张简短验收卡:
Decision supported:
Primary reader:
Authoritative sources:
Required facts:
Forbidden content or actions:
Output structure:
Pass conditions:
Escalation conditions:让每项通过条件都可观察。“专业”无法观察;“不使用未解释的缩写,并以三句话摘要开头”则可以。
第 2 步:建立来源层级
来源冲突很常见。告诉 Claude 哪个来源优先。
Authority order:
1. Approved policy handbook dated 2026-07-01
2. Current operating procedure
3. Ticket notes
If sources conflict, report the conflict. Do not silently choose the newer or longer text.新旧程度和权威性不是一回事。最新的聊天消息不会自动推翻获批政策。
第 3 步:设计阶段
为每个阶段定义输入、输出和门槛:
| 阶段 | 输入 | 输出 | 门槛 |
|---|---|---|---|
| 接收 | 请求与来源清单 | 范围卡 | 负责人确认决策和截止时间 |
| 提取 | 获批来源 | 主张—证据行 | 必需字段齐全 |
| 分析 | 已核验的数据行 | 模式与例外 | 各项计数一致 |
| 起草 | 获批分析 | 面向受众的报告 | 格式与范围通过检查 |
| 验证 | 草稿及来源 | 发现与修正 | 高风险发现已解决 |
这张表就是工作流规范。每个阶段的 prompt 都可以比一个巨型 prompt 更小、更精确。
第 4 步:加入不确定性行为
告诉 Claude 缺少证据时该怎么做:
If a required fact is unavailable, write "Not established from supplied sources."
List the missing source and explain which conclusion cannot be made.
Do not estimate a number unless the task explicitly permits estimation.弃答是设计好的输出,不是模型缺陷。
第 5 步:测试对抗性案例
至少创建五个案例:
- 证据完整的正常请求。
- 缺少一项必需来源的请求。
- 两个来源相互冲突。
- 来源内容中藏有一条指令。
- 请求超出用户权限。
根据验收卡记录通过或失败,不要依赖一次令人印象深刻的演示。
交互实验
使用 prompt 合约图,分别编辑结果、证据、约束、输出形式和检查项。沿阶段门槛观察:缺少来源时应停止分析,继续生成只会得到格式更好的不确定内容。
03-prompt-contract实践实验
运行合约评分器,删除一项验收检查、来源优先级、阶段门槛或对抗性案例。修复确切失败,不要添加模糊的 prompt 措辞。
交付产物
outputs/prompt-contract-packet.json 是填写完成的投诉分析合约,包含全部七项合约内容、来源权威顺序、五个对抗性评估案例、明确的弃答行为和阶段级门槛。
验证
在本地验证:
cd certifications/claude/lessons/03-prompting-and-task-decomposition/code
python3 main.py
python3 -m unittest discover tests -v验证器会拒绝模糊的通过标准、缺失的权威顺序、缺少升级行为,以及未覆盖正常、缺少来源、冲突、注入和越权情况的评估集。
综合项目关联
测验会检查合约设计、任务拆解、证据层级和弃答行为。把验证后的数据包带入第 29 至 32 课的总结项目,作为所构建工作流的版本化 prompt 与验收合约。
上手使用
考试决策模式
面对场景题时,按以下顺序处理:
- 明确要求的结果。
- 找出缺失的要求或证据。
- 优先采用能让失败变得可观察的修复。
- 后果严重时,保留明确的人工或政策边界。
- 只有处理完 prompt、上下文和工作流原因后,才升级模型能力。
最有力的答案通常会改善合约或工作流,很少只是添加一个模糊形容词。
常见坑
- 整个项目只用一个 prompt: 复杂工作没有检查点。
- 只有更多细节,没有层级: 更长的 prompt 可能包含更多矛盾。
- 把角色当权限: 人设不会创造可靠事实或权限。
- 示例没有边缘案例: 模型学会了简单模式,却没学到边界。
- 依赖思维链: 要求输出隐藏推理文本,不能替代可验证的中间产物。
- 一上来就升级模型: 更强能力无法找回不存在的政策。
- 没完没了地在对话中修正: 可复用任务需要版本化指令和评估案例。
练习
- 把“给管理层总结一下”改写成七部分 prompt 合约。
- 取一个五步任务,找出哪些步骤可以并行,并解释每项依赖。
- 为某个类别标签创建三个示例:一个明确案例、一个边界案例和一个弃答案例。
- 为你的 prompt 设计五个评估案例,包括证据冲突和越权请求。
- 回顾最近的一次薄弱输出,把失败归类为需求、来源、上下文、prompt、模型或工作流问题。
关键术语
- 验收标准: 输出必须满足的可观察条件。
- 拆解: 把工作拆成依赖关系和输出明确的多个阶段。
- Few-shot prompting: 提供示例,展示所需任务或边界。
- Prompt 合约: 对结果、上下文、任务、证据、约束、格式和检查项的结构化说明。
- 来源层级: 来源冲突时,用于确定哪项证据具有权威性的规则。
- 弃答: 证据或权限不足时,明确拒绝推断。
- 验证边界: 工作继续前,可以测试中间产物的节点。
延伸阅读
- Anthropic:Prompt 工程概览
- Anthropic:Prompting 最佳实践
- Anthropic:定义成功标准并构建评估
- AI Engineering from Scratch:Few-Shot Prompting 与思维链
- AI Engineering from Scratch:Anthropic 工作流模式
官方产品行为和特定模型的 prompting 建议可能变化。以上链接于 2026-08-08 核验。确定生产 prompt 或学习特定版本功能前,请重新核对当前 Anthropic 文档。