ingFang SC', Cambria, Cochin, Georgia, Times, 'Times New Roman', serif;font-size: 16px;margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;">随着大语言模型(LLM)参数的增加和指令遵从性的提升。加上最近的 Agent 开发都越来越多的依赖于 ReAct 这类 node,使得 Prompt 的优化变得比以前更加的重要了。 机缘巧合下看到了Claude 官方文档中对于 Prompt 的一系列建议与最佳实践,适合拿来改进 prompt。或者对于 AI 生成的 Prompt 自己也可以试着用下面的规则来引导优化 ingFang SC', Cambria, Cochin, Georgia, Times, 'Times New Roman', serif;font-size: 16px;margin: 1.5em 8px;color: #3f3f3f;"> ingFang SC', Cambria, Cochin, Georgia, Times, 'Times New Roman', serif;font-size: 16px;display: block;max-width: 100%;margin: 0.1em auto 0.5em;border-radius: 8px;box-shadow: 0 4px 8px rgba(0,0,0,0.1);" title="null"/> ingFang SC', Cambria, Cochin, Georgia, Times, 'Times New Roman', serif;font-size: 20.8px;display: table;padding: 0.3em 1em;margin: 4em auto 2em;color: #fff;background: #009874;font-weight: bold;border-radius: 8px;box-shadow: 0 4px 6px rgba(0,0,0,0.1);">核心原则概览
ingFang SC', Cambria, Cochin, Georgia, Times, 'Times New Roman', serif;font-size: 16px;margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;">从 Anthropic 文档中总结的几个核心原则,包括但不限于: ingFang SC', Cambria, Cochin, Georgia, Times, 'Times New Roman', serif;font-size: 16px;padding-left: 1.5em;margin-left: 0;color: #3f3f3f;" class="list-paddingleft-1"> ingFang SC', Cambria, Cochin, Georgia, Times, 'Times New Roman', serif;font-size: 16px;display: block;margin: 0.5em 8px;color: #3f3f3f;">1. ingFang SC', Cambria, Cochin, Georgia, Times, 'Times New Roman', serif;font-size: inherit;color: #009874;font-weight: bold;">Prompting vs. Fine-tuning 使用 prompt(和 prompt engineering)比起对模型进行 fine-tuning,通常在资源、时间、透明度、灵活性和适应新领域等方面具有优势。 ingFang SC', Cambria, Cochin, Georgia, Times, 'Times New Roman', serif;font-size: 16px;display: block;margin: 0.5em 8px;color: #3f3f3f;">2. ingFang SC', Cambria, Cochin, Georgia, Times, 'Times New Roman', serif;font-size: inherit;color: #009874;font-weight: bold;">“Be clear, direct, and detailed” 像对待一个新同事一样,Claude 需要清晰的背景、角色说明、任务目标、风格指引等;越明确,越容易让模型按期望执行。 3.Use examples / multishot prompting 给出多个示例(few-shot / multishot)可以大幅提升一致性、结构性和输出质量,尤其是任务复杂或格式要求严格的时候。 4.Use XML tags to structure prompt 使用标签(像<instructions>、<example>、<formatting>、<document>等)把 prompt 中不同部分区分开来,比如背景说明、要遵守的规则、要输出格式、示例等。这样 Claude 不易混淆这些部分。 5.Chain complex prompts 对于复杂任务,把任务拆成多个子任务 / 步骤,并通过 prompt chain(多个 prompt 连起来)处理。这样每一步 Claude 的注意力更集中,也便于调试和追踪问题。 6.Long-context prompting tips 当输入/上下文很长(很多文档或非常多 token)时,有技巧可以让性能更好,比如把长文本放在 prompt 顶部,用标签组织文档和元数据,请求引用相关片段等。 各项技巧与具体示例 下面把每个技巧展开,并配上官方 example(或接近官方示例)以帮助理解。
一、Be Clear, Direct, and Detailed 要点 :
• 提供上下文(context):任务目标是什么,用于谁,用在什么场景; • 明确你希望的输出形式(格式、结构、风格、字数、语调等); • 将指令分步骤/分点列出,以减少模型忽略或误解的可能性。 官方示例 :
❌ 模糊 Prompt: 请删除以下客户反馈中的个人身份信息: {{客户反馈数据}} ✅ 清晰 Prompt: 任务:对客户反馈进行匿名化处理。 规则: 1. 姓名替换为 CUSTOMER_[ID]。 2. 邮箱替换为 EMAIL_[ID]@example.com。 3. 电话替换为 PHONE_[ID]。 4. 产品名保留。 5. 没有发现个人信息则保持原文。 6. 输出用“---”分隔。 输入: "你好,我是小王(wang@example.com)。我很喜欢你们的产品,但我的手机(555-123-4567)坏了。" 输出: "你好,我是 CUSTOMER_1(EMAIL_1@example.com)。我很喜欢你们的产品,但我的手机(PHONE_1)坏了。"二、Multishot Prompting / Use Examples 要点 :
• 提供 3-5 个相关、多样且覆盖边缘情况的示例; • 每个示例格式要清晰,用标签或格式标记出来(比如<example>...</example>),帮助模型学会结构; • 确保示例与实际任务尽量相近,包括问题类别、输出格式等。 官方示例 :
❌ 模糊 Prompt: 分析此客户反馈并对问题进行归类。请使用以下类别:UI/UX(用户界面/体验)、性能、功能请求、集成、定价,以及其他。同时评估其情绪(积极/中性/消极)和优先级(高/中/低)。 反馈内容如下:{{FEEDBACK}} ✅ 清晰 Prompt: 角色:请分析客户反馈。 类别:界面体验 (UI/UX)、性能问题、功能请求、系统集成、价格相关、其他 对每条反馈输出:类别、情感(正面/负面/中性)、优先级(高/中/低)。 <example> 输入:"我上传照片时应用一直崩溃。" 输出: 类别:性能问题 情感:负面 优先级:高 </example> <example> 输入:"我希望应用能支持深色模式。" 输出: 类别:功能请求 情感:中性 优先级:中 </example> 现在分析: 输入:"界面很好看,但订阅价格太贵了。"三、Use XML Tags 要点 :
• 用标签把 prompt 的组成部分分开:指令 (instructions),示例 (example/examples),格式 (formatting / formatting_example)、背景、数据等; • 标签要语义清晰;统一风格;可嵌套。这样可以方便修改某个块,也能让模型“领会”prompt 的结构。(Anthropic) 官方示例 :
❌ 模糊 Prompt: 你是AcmeCorp的一名财务分析师。请为我们的投资者生成一份Q2财务报告。报告需包含收入增长、利润率和现金流等部分,参照去年的示例:{{Q1_REPORT}}。请使用此电子表格中的数据点:{{SPREADSHEET_DATA}}。报告应极其简洁、切中要害、专业,并以列表格式呈现。报告应同时突出优势和改进领域。 (注:{{Q1_REPORT}} 和 {{SPREADSHEET_DATA}} 为模板变量,在实际使用时会替换为具体内容) ✅ 清晰 Prompt: 分析下面的合同。 重点关注:风险分配、责任限制、知识产权。 在输出中,请将发现写在 <findings>,建议写在 <recommendations>。 </instructions> <agreement> 本协议由甲方(Alpha 公司)与乙方(Beta 公司)签订…… </agreement> <standard_contract> 标准合同条款示例:…… </standard_contract> 预期输出: <findings> - 缺少责任上限条款 - 未明确知识产权归属 </findings> <recommendations四、Chain Complex Prompts(任务拆链) 要点 :
• 对于复杂的任务,不要把所有子任务压在一个 prompt 里。拆开来,例如先生成摘要,然后检查摘要,再改进,最后格式化/撰写最终稿。这样每一步任务清晰、输出控制好。(Anthropic) • 结构化交接:用 XML 标签或类似方式,在步骤间传输内容;每个子任务聚焦一个目标。(Anthropic) • 可以用“自我纠错链”(self-correction chains):让 Claude 在某一步输出后自己检查/评估,提出反馈,再做改进。(Anthropic) 官方示例 :
请总结以下研究论文。 重点包括:研究方法、研究结果、临床意义。 <strategy> {{STRATEGY}} </strategy> 请审阅以下摘要,从准确性、清晰度、完整性三个方面打分(1-5分),并给出反馈。 <analysis> {{ANALYSIS}} </analysis> 请根据反馈改进摘要。 Include an executivesummary, detailed analysis, and recommendations.五、Long-Context Prompting Tips 当 prompt 输入中包含非常长的内容(多个文档、大量文本)时,这些技巧尤为重要。以下是官方建议并配示例。
要点 :
•长文本/长输入放在 prompt 的顶部 ,即在指令/示例/query 之前。实验显示这样能提升质量。(Anthropic) •Query(你要模型做的事)放在末尾 :在处理多文档或复杂输入时,把任务目标/问题放在 prompt 的末尾,会让输出质量好很多(在测试里提高了 ~30%)。(Anthropic) •用 XML 标签组织多个文档及其元数据 :每个文档用<document>标签包裹,并附source、document_content等子标签。(Anthropic) •请 Claude 引用相关文档片段 :在回答任务前,让 Claude 抽取/引用 input 中与任务相关内容,以便“从长上下文中去噪声”。(Anthropic) 示例 :
<documents> <documentindex="1"> <source>annual_report_2023.pdf</source> <document_content> {{ANNUAL_REPORT}} </document_content> </document> <documentindex="2"> <source>competitor_analysis_q2.xlsx</source> <document_content> {{COMPETITOR_ANALYSIS}} </document_content> </document> </documents> 分析这些报告,识别战略优势并推荐 Q3 的重点领域。您是 AI 医生助手。任务:帮助医生诊断患者疾病。 <documents> <document index="1"> <source>patient_symptoms.txt</source> <document_content> {{PATIENT_SYMPTOMS}} </document_content> </document> <document index="2"> <source>patient_records.txt</source> <document_content> {{PATIENT_RECORDS}} </document_content> </document> <document index="3"> <source>patient01_appt_history.txt</source> <document_content> {{PATIENT01_APPOINTMENT_HISTORY}} </document_content> </document> </documents> 要求: - 在 `<quotes>` 标签内放出与诊断最相关的文档片段 - 然后基于这些引用片段列出诊断信息,在 `<info>` 标签中输出。 使用顺序建议 &调试方法 除了具体技巧,Anthropic 的文档里也建议一个大致的调优流程/顺序,以及调试方法:
• 如果你没有一个初步 prompt(first draft),先构建一个简单版本,再逐步改进。 • 优先尝试简单的改进(清晰指令、明确格式、用示例),再用更复杂的技巧(long context, prompt chaining 等)。也就是说,从大多数情形中收益最高的技巧先用。 • 在拆链 prompt 的时候,如果某一步出错了/表现不好,可以 isolate(隔离)那一步,只调试这一部分,而不是重写整个流程。 常见问题 &坑 结合官方提示,这里也整理一些可能的误区/坑,以及如何回避:
使用“Be clear, direct”风格,分点说明,示例;使用 XML tags 来标明结构 没有示例/没有拆任务/过长的 prompt 混合多个任务 引入 multishot 示例;拆链(chain prompts)使每一步明确;long context 工具来组织内容 长文本中重要内容被掩盖 / query 排在顶部使得模型焦点不对 将长文本置顶,把 query 放在末尾;请求模型引用相关段落;用 XML 标签结构组织文档与元数据 cognitive load 太大,模型容易漏步骤或混淆 用 prompt chaining,把任务分子任务处理;先结构 → 草稿 → 校对 → 最终稿
总结 • Claude 的 prompt 工程建议总体可以归纳为三层:清晰指令 → 示例指导 → 结构与上下文管理 。清晰、具体是基础;示例可以快速传达你的格式与风格;复杂任务和大上下文时要用结构标签、拆链与引用来保证质量。 • 在实践中,不一定所有技巧都必须用到。Prompt 的复杂度也要权衡成本(编辑/维护 prompt 的时间/token 成本)与收益。 • 推荐做法:先写一个清晰明确的版本 + 一个或两个示例 → 如果输入文本很长就用 long context 技巧 → 如果任务复杂,就拆链 prompt → 用 XML tags 来组织 prompt 内的部分。