Claude 官方的 Prompt Engineer 建议
随着大语言模型(LLM)参数的增加和指令遵从性的提升。加上最近的 Agent 开发都越来越多的依赖于 ReAct 这类 node,使得 Prompt 的优化变得比以前更加的重要了。
机缘巧合下看到了 Claude 官方文档中对于 Prompt 的一系列建议与最佳实践,适合拿来改进 prompt。或者对于 AI 生成的 Prompt 自己也可以试着用下面的规则来引导优化
核心原则概览
从 Anthropic 文档中总结的几个核心原则,包括但不限于:
Prompting vs. Fine-tuning
使用 prompt(和 prompt engineering)比起对模型进行 fine-tuning,通常在资源、时间、透明度、灵活性和适应新领域等方面具有优势。“Be clear, direct, and detailed”
像对待一个新同事一样,Claude 需要清晰的背景、角色说明、任务目标、风格指引等;越明确,越容易让模型按期望执行。Use examples / multishot prompting
给出多个示例(few-shot / multishot)可以大幅提升一致性、结构性和输出质量,尤其是任务复杂或格式要求严格的时候。Use XML tags to structure prompt
使用标签(像<instructions>
、<example>
、<formatting>
、<document>
等)把 prompt 中不同部分区分开来,比如背景说明、要遵守的规则、要输出格式、示例等。这样 Claude 不易混淆这些部分。Chain complex prompts
对于复杂任务,把任务拆成多个子任务 / 步骤,并通过 prompt chain(多个 prompt 连起来)处理。这样每一步 Claude 的注意力更集中,也便于调试和追踪问题。Long-context prompting tips
当输入/上下文很长(很多文档或非常多 token)时,有技巧可以让性能更好,比如把长文本放在 prompt 顶部,用标签组织文档和元数据,请求引用相关片段等。
各项技巧与具体示例
下面把每个技巧展开,并配上官方 example(或接近官方示例)以帮助理解。
一、Be Clear, Direct, and Detailed
要点:
提供上下文(context):任务目标是什么,用于谁,用在什么场景;
明确你希望的输出形式(格式、结构、风格、字数、语调等);
将指令分步骤/分点列出,以减少模型忽略或误解的可能性。
官方示例:
❌ 模糊 Prompt: |
二、Multishot Prompting / Use Examples
要点:
提供 3-5 个相关、多样且覆盖边缘情况的示例;
每个示例格式要清晰,用标签或格式标记出来(比如
<example>...</example>
),帮助模型学会结构;确保示例与实际任务尽量相近,包括问题类别、输出格式等。
官方示例:
❌ 模糊 Prompt: |
三、Use XML Tags
要点:
用标签把 prompt 的组成部分分开:指令 (instructions),示例 (example/examples),格式 (formatting / formatting_example)、背景、数据等;
标签要语义清晰;统一风格;可嵌套。这样可以方便修改某个块,也能让模型“领会”prompt 的结构。(Anthropic)
官方示例:
❌ 模糊 Prompt: |
四、Chain Complex Prompts(任务拆链)
要点:
对于复杂的任务,不要把所有子任务压在一个 prompt 里。拆开来,例如先生成摘要,然后检查摘要,再改进,最后格式化/撰写最终稿。这样每一步任务清晰、输出控制好。(Anthropic)
结构化交接:用 XML 标签或类似方式,在步骤间传输内容;每个子任务聚焦一个目标。(Anthropic)
可以用“自我纠错链”(self-correction chains):让 Claude 在某一步输出后自己检查/评估,提出反馈,再做改进。(Anthropic)
官方示例:
请总结以下研究论文。 |
五、Long-Context Prompting Tips
当 prompt 输入中包含非常长的内容(多个文档、大量文本)时,这些技巧尤为重要。以下是官方建议并配示例。
要点:
长文本/长输入放在 prompt 的顶部,即在指令/示例/query 之前。实验显示这样能提升质量。(Anthropic)
Query(你要模型做的事)放在末尾:在处理多文档或复杂输入时,把任务目标/问题放在 prompt 的末尾,会让输出质量好很多(在测试里提高了 ~30%)。(Anthropic)
用 XML 标签组织多个文档及其元数据:每个文档用
<document>
标签包裹,并附source
、document_content
等子标签。(Anthropic)请 Claude 引用相关文档片段:在回答任务前,让 Claude 抽取/引用 input 中与任务相关内容,以便“从长上下文中去噪声”。(Anthropic)
示例:
- 多文档结构示例(文档 + 源 + 内容):
<documents> |
- 引用提取示例(诊断任务):
您是 AI 医生助手。任务:帮助医生诊断患者疾病。 |
使用顺序建议 &调试方法
除了具体技巧,Anthropic 的文档里也建议一个大致的调优流程/顺序,以及调试方法:
如果你没有一个初步 prompt(first draft),先构建一个简单版本,再逐步改进。
优先尝试简单的改进(清晰指令、明确格式、用示例),再用更复杂的技巧(long context, prompt chaining 等)。也就是说,从大多数情形中收益最高的技巧先用。
在拆链 prompt 的时候,如果某一步出错了/表现不好,可以 isolate(隔离)那一步,只调试这一部分,而不是重写整个流程。
常见问题 &坑
结合官方提示,这里也整理一些可能的误区/坑,以及如何回避:
问题 | 原因 | 对应官方建议 |
---|---|---|
指令不够明确,模型自由发挥太多 | prompt 中未明确结构、格式、要求 | 使用“Be clear, direct”风格,分点说明,示例;使用 XML tags 来标明结构 |
输出格式/顺序错乱/漏写 | 没有示例/没有拆任务/过长的 prompt 混合多个任务 | 引入 multishot 示例;拆链(chain prompts)使每一步明确;long context 工具来组织内容 |
模型忽视某些内容 / 被上下文噪声干扰 | 长文本中重要内容被掩盖 / query 排在顶部使得模型焦点不对 | 将长文本置顶,把 query 放在末尾;请求模型引用相关段落;用 XML 标签结构组织文档与元数据 |
当任务特别复杂但 prompt 写在一个块里 | cognitive load 太大,模型容易漏步骤或混淆 | 用 prompt chaining,把任务分子任务处理;先结构 → 草稿 → 校对 → 最终稿 |
总结
- Claude 的 prompt 工程建议总体可以归纳为三层:清晰指令 → 示例指导 → 结构与上下文管理。清晰、具体是基础;示例可以快速传达你的格式与风格;复杂任务和大上下文时要用结构标签、拆链与引用来保证质量。
- 在实践中,不一定所有技巧都必须用到。Prompt 的复杂度也要权衡成本(编辑/维护 prompt 的时间/token 成本)与收益。
- 推荐做法:先写一个清晰明确的版本 + 一个或两个示例 → 如果输入文本很长就用 long context 技巧 → 如果任务复杂,就拆链 prompt → 用 XML tags 来组织 prompt 内的部分。