How to prompt engineer
在解决性能问题时,建议按顺序尝试这些技术,尽管每种技术的实际影响将取决于用例:
- Prompt generator
- Be clear and direct
- Use examples (multishot)
- Let Claude think (chain of thought)
- Use XML tags
- Give Claude a role (system prompts)
- Prefill Claude’s response
- Chain complex prompts
- Long context tips
Prompt generator
自动生成 prompt 的初稿
有时,使用人工智能模型最困难的部分是弄清楚如何有效地提示它。为了帮助解决这个问题,我们创建了一个提示生成工具,引导 claude 生成针对您特定任务的高质量提示模板。这些模板遵循了我们许多提示工程的最佳实践。https://console.anthropic.com/dashboard
Be clear and direct
在与 claude 互动时,将其视为一位才华横溢但非常新的员工(患有失忆症),需要明确的指示。像任何新员工一样,claude 不了解您的规范、风格、指南或偏好的工作方式。您对所需内容的解释越精确,claude 的回应就会越好。
The golden rule of clear prompting
Show your prompt to a colleague, ideally someone who has minimal context on the task, and ask them to follow the instructions. If they’re confused, Claude will likely be too.
如何做到清晰、有上下文且具体?
- 为 claude 提供上下文信息:就像如果您了解更多上下文可能会更好地完成一项任务一样,如果 Claude 拥有更多的上下文信息,它的表现也会更好。一些上下文信息的示例:
- 任务结果将用于何处
- 输出面向的受众
- 任务所属的工作流程以及在该工作流程中此任务的位置
- 任务的最终目标,或者成功完成任务的样子
- 明确说明你希望 claude 做什么:例如,如果你希望 claude 只输出代码而不输出其他内容,请说明
- 提供按顺序排列的步骤说明:使用编号列表(numbered lists)或项目符号点(bullet points),以更好地确保 claude 以你确切希望的方式执行任务
Use examples (multishot prompting)
通过在提示中提供几个精心制作的示例(examples),可以显著提高 claude 输出的准确性、一致性和质量。这种被称为少样本(few-shot)或多样本(multishot)提示的技术对于需要结构化输出或遵循特定格式的任务特别有效。
为什么使用 examples?
- 准确性:示例减少了对说明的误解
- 一致性:示例强制统一的结构和风格
- 性能:精心挑选的例子提高了 claude 处理复杂任务的能力
如何制作有效的 examples
- 相关性:示例反映实际用例
- 多样化:示例涵盖了边缘 case 和潜在挑战,并且具有足够的变化性,以确保 Claude 不会无意中捕捉到非预期的模式
- 清晰:示例用
<example>
标签包裹(如果有多个示例,则嵌套在<examples>
标签内)以提供结构
Let Claude think (CoT)
CoT - chain of thought
当面对复杂任务如研究、分析或问题解决时,给 Claude 思考的空间可以显著提高其表现。这种被称为思维链(Chain of Thought,简称CoT)提示的技术,鼓励 Claude 逐步分解问题,从而产生更准确和细致的输出
为什么需要让 Claude 思考?
- 准确性:逐步解决问题可以减少错误,尤其是在数学、逻辑、分析或一般复杂性任务中
- 连贯性:结构化思维可以带来更加连贯、组织良好的回答
- 调试:观察 claude 的思考过程有助于准确定位 prompt 可能不清晰的地方
为什么不让 Claude 思考?
- 增加输出长度可能会影响延迟
- 并非所有任务都需要深度思考。明智地使用思维链(CoT)以确保性能和延迟之间的适当平衡
何时应当使用 CoT?
在人类需要深入思考的任务中使用思维链(CoT),比如复杂的数学问题、多步骤分析、撰写复杂文档,或涉及多个因素的决策
如何编写 prompt 从而让 Claude 思考?
使用 CoT 时重要的一点:始终让 Claude 输出其思考过程,如果不输出思考过程,就不会发生思考
Basic prompt:prompt 中包含 “Think step-by-step”
弊端:这种方式缺乏关于如何思考(how to think)的指导,这在任务非常特定于你的应用、用例或组织时尤其不理想
eg:
Draft personalized emails to donors asking for contributions to this year’s Care for Kids program.
Program information:
<program>{{PROGRAM_DETAILS}}
</program>
Donor information:
<donor>{{DONOR_DETAILS}}
</donor>
Think step-by-step before you write the email.
Guided prompt:为 Claude 的思考过程列出具体的步骤
弊端:缺乏结构化,难以轻松的提取和分离答案和思考过程
Draft personalized emails to donors asking for contributions to this year’s Care for Kids program.
Program information:
<program>{{PROGRAM_DETAILS}}
</program>
Donor information:
<donor>{{DONOR_DETAILS}}
</donor>
Think before you write the email. First, think through what messaging might appeal to this donor given their donation history and which campaigns they’ve supported in the past. Then, think through what aspects of the Care for Kids program would appeal to them, given their history. Finally, write the personalized donor email using your analysis.
Structured prompt:使用像<thinking>
和<answer>
这样的 XML 标签来分离推理过程和最终答案
Draft personalized emails to donors asking for contributions to this year’s Care for Kids program.
Program information:
<program>{{PROGRAM_DETAILS}}
</program>
Donor information:
<donor>{{DONOR_DETAILS}}
</donor>
Think before you write the email in <thinking> tags. First, think through what messaging might appeal to this donor given their donation history and which campaigns they’ve supported in the past. Then, think through what aspects of the Care for Kids program would appeal to them, given their history. Finally, write the personalized donor email in <email> tags, using your analysis.
Use XML tags
当你的 prompt 包含多个组成部分,如背景信息、指令和示例时,XML 标签可以成为一个改变游戏规则的工具。它们能帮助 Claude 更准确地解析你的提示,从而产生更高质量的输出
为什么使用 XML tags
- 清晰:清楚的分割 prompt 的不同部分,确保 prompt 结构良好
- 准确性:减少因为 Claude 误解 prompt 部分而导致的错误
- 灵活性:轻松找到、添加、删除或修改你的 prompt 的部分内容,而无需重写全部
- 可解析性:让 Claude 在其输出中使用 XML 标签,使得通过后处理更容易提取其响应的特定部分
建议使用的 XML tags 名称应与它们所包含的信息相符
标签使用的最佳实践
- 保持一致性,使用标签名称代表其对应的内容
- 嵌套标签,对于有层级结构的内容,应该嵌套使用标签
高级用户技巧:将XML标签与其他技术结合使用,如多样本提示(<examples>
)或思维链(<thinking>
,<answer>
)。这可以创建超结构化、高性能的提示
Give Claude a role (system prompts)
在 system prompt 中给它赋予一个角色(role),可以显著提升其表现。这也被称为 role prompting
合适的角色赋予,可以将 Claude 从一个通用的助手转变为某个领域的专家
使用 claude 时,在 system prompt 中设定角色信息,在 user prompt 中放置其他内容,如和特定任务相关的指令
为什么使用 role prompting?
- 提高准确性:在复杂场景中,role prompting 可以显著提升表现
- 定制语气风格:role prompting 可以调整沟通风格
- 聚焦:通过设置 role context,claude 可以更聚焦于你的特定任务范围
role prompting tip:尝试不同的角色!对于相同的数据,data scientist
可能会看到与 marketing strategist
不同的见解。专门为财富 500 强公司进行客户洞察分析的 data scientist specializing in customer isight analysis for Fortune 500 companies
可能仍然会产生不同的结果!
Prefill Claude’s response
在使用 Claude 时,您拥有通过预先填写(prefill) Assistant 消息来引导其响应的独特能力。这种强大的技术使您能够指挥 Claude 的行动、跳过开场白、强制采用 JSON 或 XML 等特定格式,甚至帮助 Claude 在角色扮演场景中保持角色的一致性。
在某些 Claude 表现未达预期的情况下,预先填写的几句话就能极大地提高 Claude 的性能。少量的预先填写能带来很大的作用!
Chain complex prompts
在处理复杂任务时,如果您尝试在一个 prompt 中处理所有内容,Claude 有时会出错。思维链(CoT)提示很棒,但是如果您的任务有多个不同的步骤,每个步骤都需要深入思考怎么办?
进入到 prompt chaining:将复杂任务分解为更小的、可管理的子任务
为什么使用 chain prompts?
- 准确性:每个子任务都能得到 Claude 的充分关注,从而减少错误
- 清晰性:更简单的子任务意味着更清晰的指令和输出
- 可追溯性:能够轻松查明并解决 prompt chain 中的问题
何时需要使用 chain prompts?
将提示链用于多步骤任务,如研究综述、文档分析或迭代内容创建。
如何进行 chain prompts?
- 确定子任务: 将任务分解为不同的连续步骤
- 使用 XML 构建清晰的交接: 使用 XML 标记在提示之间传递输出
- 有一个单一的任务目标:每个子任务都应有一个单一、明确的目标
- 迭代: 根据 claude 的表现完善子任务
工程化 tips:对于多个独立的子任务,可以并行执行以提高效率
高阶:Self-correction chains
可以通过 chain prompts 让 Claude 审查自己的工作,这会捕获错误并细化输出,尤其是对于高风险任务
Long context tips
使用长上下文 prompt 时的一些技巧:
- 将长篇数据放在顶部:将长文档和输入(~20K+标记)放在 prompt 的顶部附近,查询、说明和示例上方。这可以显着提高 Claude 在所有模型中的性能
- 在测试中,将查询(query)放在末尾可以将响应质量提高多达30%,尤其是在处理复杂的多文档输入时
- 使用 XML 标签构建文档内容和元数据:在使用多个文档时,用
<document>
标签包裹每个文档,并在其中使用<document_content>
和<source>
(以及其他元数据)子标签来增加清晰度 - 在引用中建立回应基础:对于长文档任务,要求 Claude 在执行任务之前先引用文档中的相关部分。这有助于 Claude 从文档其余内容的"噪音"中提取出关键信息
References
以上内容整理自 claude 官方文档