Claude 提示词最佳实践

来自 Anthropic 官方的提示词优化建议

  1. Be clear and direct
  2. Use examples (multishot)
  3. Let Claude think (chain of thought)
  4. Use XML tags
  5. Prefill Claude's response
  6. Chain complex prompts
  7. Long context tips

保持清晰直接

把 Claude 当做一个才华横溢的新同事,它没有关于团队项目的规范、风格、准则或团队偏好的工作方式等信息,因此我们越准确地解释你想要什么,Claude 的回应就越好

  • 给 Claude contextual 的信息
    • 任务结果将用于什么
    • 输出内容面向什么受众
    • 任务属于什么工作流程,以及这个任务在工作流程中的位置
    • 任务的最终目标,或者成功完成任务是什么样子
  • 具体说明你希望 Claude 做什么: 例如,如果你只想要 Claude 输出代码而不要其他内容,就要明确说明。
  • 按顺序提供指示: 使用编号列表或项目符号,以更好地确保 Claude 按照你想要的方式执行任务。
模糊的 Prompt 为我们新的 AcmeCloud 功能撰写一封营销邮件。
清晰的 Prompt 你的任务是为我们第三季度 AcmeCloud 功能发布制作一封有针对性的营销邮件。 指示: 1. 针对目标受众:从本地部署升级到云端的中型科技公司(100-500名员工) 2. 突出3个关键新功能:高级数据加密、跨平台同步和实时协作 3. 语气:专业但平易近人。强调安全性、效率和团队协作 4. 包含明确的行动号召:30天免费试用,优先获得入门培训 5. 主题行:少于50个字符,提到"安全"和"协作" 6. 个性化:使用{{COMPANY_NAME}}和{{CONTACT_NAME}}变量 结构: 1. 主题行 2. 邮件正文(150-200字) 3. CTA按钮文本

使用示例

multishot Prompting 是 few-shot Learning 在大模型上的一个具体实现方式,两者不是反义词。

通过在提示中提供一些精心设计的示例,可以显着提高 Claude 输出的准确性、一致性和质量,这种技术称为multishot,对于需要结构化输出或遵守特定格式的任务特别有效。

  • 示例需要反映真实用例
  • 示例不要过于雷同,防止出现过拟合现象
  • 示例可以用<example>标记,多个的话嵌套在<examples>

触发 Claude CoT

当面对复杂任务时,触发 Claude 思维链(CoT),鼓励 Claude 逐步分解问题,可以获得更准确、更细致的输出。

提示词建议 提示词示例
在提示词中加入 "Think step-by-step" 起草向捐助者发送个性化电子邮件,要求为今年的"关爱儿童"计划捐款。 项目详情: {{PROGRAM_DETAILS}} 捐赠者信息: {{DONOR_DETAILS}} 在写邮件之前,请逐步思考。
概述 Claude 在思考过程中要遵循的具体步骤 起草向捐助者发送个性化电子邮件,要求为今年的"关爱儿童"计划捐款。 项目详情: {{PROGRAM_DETAILS}} 捐赠者信息: {{DONOR_DETAILS}} 在写邮件之前请逐步思考。 1. 首先,参考该捐赠者的捐赠历史以及他们过去支持过哪些活动,考虑哪些信息可能会吸引他们。 2. 然后,参考到他们的历史,考虑一下 Care for Kids 计划的哪些方面会吸引他们。 3. 最后,使用你的分析撰写个性化的捐赠者电子邮件。
使用 xml 标签结构化提示词 起草向捐助者发送个性化电子邮件,要求为今年的"关爱儿童"计划捐款。 项目详情: {{PROGRAM_DETAILS}} 捐赠者信息: {{DONOR_DETAILS}} 写邮件之前在 标签中思考。 1. 首先,参考该捐赠者的捐赠历史以及他们过去支持过哪些活动,考虑哪些信息可能会吸引他们。 2. 然后,参考到他们的历史,考虑一下 Care for Kids 计划的哪些方面会吸引他们。 3. 最后,使用你的分析在 标签内撰写个性化的捐赠者邮件。

使用 XML 标签结构化提示词

当提示词涉及上下文、说明和示例等多类型时,使用 XML 标签结构化提示词,可以帮助 Claude 更准确地解析提示词,从而获得更高质量的输出。

  1. 保持一致性: 在整个提示词中使用相同的标签名称,并在涉及相关内容时引用这些标签名称(例如,使用标签中的合同...)。
  2. 嵌套标签: 对于层次结构内容,你应该嵌套标签 。
xml 复制代码
分析这份软件许可协议的法律风险和责任。我们是一家考虑将此协议用于核心数据基础设施的跨国企业。

<agreement>{{CONTRACT}}</agreement>

这是我们的标准合同供参考:
<standard_contract>{{STANDARD_CONTRACT}}</standard_contract>

<instructions>
1. 分析以下条款:
- 赔偿
- 责任限制
- 知识产权所有权

2. 注意不寻常或令人担忧的条款。

3. 与我们的标准合同进行比较。

4. 在<findings>标签中总结调查结果。

5. 在<recommendations>标签中列出可行的建议。
</instructions>

预填充 Claude 的回复

可以在提示词中设定一个开头,让 Claude 接着您的思路继续生成,这样有几个好处

  • 跳过冗长的前言: 让 Claude 直接进入核心内容,避免不必要的开场白。
  • 强制特定格式输出 : 如果想让 Claude 直接输出 JSON 或 XML 格式的数据,可以预先提供格式的起始符号(如 { 用于 JSON),Claude 就会从那里开始生成。
  • 在角色扮演中保持一致性 : 在角色扮演对话中,您可以预填充角色名称(例如 [夏洛克·福尔摩斯]),帮助 Claude 更好地保持角色特征。

只需在发送给 Claude 的 Assistant message 中包含希望 Claude 开始的文本,Claude 就会从预填充的文本之后继续生成其响应

json 复制代码
{
  "model": "claude-sonnet-4-20250514"",
  "max_tokens": 1024,
  "messages": [
    {
      "role": "user",
      "content": "请帮我写一封感谢信,感谢对方在最近的项目中提供的帮助。信中要提到项目的成功和我们团队的合作。"
    },
    {
      "role": "assistant",
      "content": "Dear [Name],\n\n我希望这封邮件能找到你。"
    }
  ]
}

Prompt Chaining 提示链

当一次性将复杂任务完全交给模型处理时,模型很可能会遗漏许多关键内容,在这种情况下提示链就能发挥作用。它的核心思想是:将一个复杂的任务拆解成一系列更小、更简单的子任务。随后引导模型逐步完成,其中上一个子任务的输出将作为下一个子任务的输入,从而确保每个环节都能得到模型的充分关注。

如何实施:

  1. 分解任务: 将复杂任务拆分成清晰、有顺序的子任务。
  2. 明确目标: 确保每个子任务只有一个明确、单一的目标。
  3. 使用 XML 标签: 利用 XML 标签来清晰地标记和传递每个子任务的输出,作为下一个子任务的输入。
  4. 迭代优化: 根据 Claude 的表现,不断调整和优化每个子任务的指令。

比如我们希望重构一个项目代码,可以按照以下步骤和模型交互

第一步:分析现有代码并识别重构点

发给 Claude 第一个提示词:

plain 复制代码
我有一个 Python 应用,其中包含一个名为 `payment_processor.py` 的文件,负责处理支付逻辑。我需要对其中的 `process_payment` 函数进行重构。
你可以通过以下路径访问该文件的内容:`/app/src/payment_processor.py`

请分析该文件内容,并列出所有你可以识别的重构点。对于每个重构点,请简要说明为什么需要重构,以及你计划如何改进。

请使用 XML 标签 `<refactoring_points>` 和 `<point>` 来结构化你的输出。

Claude 会返回一个类似这样的响应:

xml 复制代码
<refactoring_points>
  <point>
    <description>函数职责单一原则违反</description>
    <reason>当前的 `process_payment` 函数承担了过多的职责,包括输入验证、支付网关通信、交易记录等。这导致函数过长、难以理解和测试。</reason>
    <improvement>将这些职责拆分到独立的、专注的函数中,例如 `validate_payment_data`、`communicate_with_gateway`、`record_transaction` 等。</improvement>
  </point>
  <point>
    <description>硬编码的验证逻辑</description>
    <reason>支付类型、货币、卡号长度等验证逻辑直接嵌入函数内部,不易扩展和维护。</reason>
    <improvement>将验证规则外部化,可能通过配置文件或独立的数据结构管理,并引入更健壮的验证库。</improvement>
  </point>
  </refactoring_points>

第二步:生成重构后的代码结构和函数签名

在收到 Claude 的第一步输出后,发送的第二个提示词:

plain 复制代码
根据你之前识别的重构点(例如:函数职责单一原则、硬编码验证等),为 `payment_processor.py` 文件设计一个新的、更模块化的代码结构。

请为每个新函数或修改后的现有函数提供函数签名(包括参数和返回类型建议),并简要说明其职责。不需要提供完整的函数实现。

请使用 XML 标签 `<new_structure>` 和 `<function_signature>` 来结构化你的输出。

Claude 会返回一个类似这样的响应:

xml 复制代码
<new_structure>
  <function_signature>
    <name>validate_payment_data</name>
    <parameters>amount: float, currency: str, card_number: str, expiry_date: str, cvv: str</parameters>
    <returns>tuple[bool, str]</returns>
    <responsibility>负责所有支付相关输入的验证。如果验证失败,返回 False 和错误信息。</responsibility>
  </function_signature>
  <function_signature>
    <name>_call_payment_gateway</name>
    <parameters>amount: float, currency: str, card_number: str</parameters>
    <returns>dict</returns>
    <responsibility>模拟与第三方支付网关的通信,返回网关的原始响应。</responsibility>
  </function_signature>
  <function_signature>
    <name>_process_gateway_response</name>
    <parameters>gateway_response: dict</parameters>
    <returns>dict</returns>
    <responsibility>解析支付网关的响应,并标准化处理结果(成功/失败)。</responsibility>
  </function_signature>
  <function_signature>
    <name>record_transaction</name>
    <parameters>customer_id: str, transaction_id: Optional[str], amount: float, currency: str, status: str, transaction_type: str, error_message: Optional[str] = None</parameters>
    <returns>None</returns>
    <responsibility>负责将支付交易记录到持久化存储(如数据库)。</responsibility>
  </function_signature>
  <function_signature>
    <name>process_payment</name>
    <parameters>amount: float, currency: str, card_number: str, expiry_date: str, cvv: str, customer_id: str, transaction_type: str = 'sale'</parameters>
    <returns>dict</returns>
    <responsibility>作为支付流程的入口点,协调调用其他模块化函数完成整个支付流程。</responsibility>
  </function_signature>
</new_structure>

第三步:逐步实现重构后的功能

在收到 Claude 的第二步输出后,发送的第三个提示词:

plain 复制代码
现在,请你为 `validate_payment_data` 函数提供具体的 Python 实现。
这个函数应该接收 `amount, currency, card_number, expiry_date, cvv` 作为输入,并返回一个元组,如果所有验证通过则包含 `(True, "")`,否则包含 `(False, "错误信息")`。

请提供完整的函数实现,包括必要的导入。

Claude 就会开始改代码了

长提示词技巧

Claude 4 有 200k 的 context,当提示词是长文本时有几个技巧

  • 将长格式数据放在顶部:建议将长篇数据放在提示的顶部,以帮助模型更好地理解和处理信息
  • 使用 XML 标签 :使用多个文档时将每个文档包装在 <document> 标签中,并带有 <document_content><source>子标签。
xml 复制代码
<documents>
  <document index="1">
    <source>annual_report_2023.pdf</source>
    <document_content>
      {{ANNUAL_REPORT}}
    </document_content>
  </document>
  <document index="2">
    <source>competitor_analysis_q2.xlsx</source>
    <document_content>
      {{COMPETITOR_ANALYSIS}}
    </document_content>
  </document>
</documents>

分析年度报告和竞争对手分析。识别战略优势并推荐第三季度重点关注领域。
  • 让模型先提炼再执行:在处理包含大量信息的长文档时,要求 Claude 模型首先从文档中提取并引用相关部分,减少噪音信息,然后再执行其主要任务。
xml 复制代码
您是一位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>标签中。

extended thinking 技巧

extended thinking 为 Claude 提供了增强的推理能力,用于处理复杂任务,同时在提供最终答案之前,以不同程度的透明度展示其逐步思考过程

启用 extended thinking

python 复制代码
response = client.messages.create(
    model="claude-sonnet-4-20250514",
    max_tokens=16000,
    thinking={
        "type": "enabled",
        "budget_tokens": 10000
    },
    messages=[{
        "role": "user",
        "content": "Are there an infinite number of prime numbers such that n mod 4 == 3?"
    }]
)

API 响应将包含thinking内容块,随后是text内容块

json 复制代码
{
  "content": [
    {
      "type": "thinking",
      "thinking": "让我逐步分析一下...",
      "signature": "...."
    },
    {
      "type": "text",
      "text": "基于我的分析..."
    }
  ]
}

使用高层次指令

Claude 通常在高层次指令下表现更好,只需要深入思考任务,而不是提供规定性的逐步指导。模型在解决问题时的创造力可能超过人类规定最佳思考过程的能力。

标准 Prompt 增强 Prompt
逐步思考这个数学问题: 1. 首先,确定变量 2. 然后,建立方程 3. 接下来,求解x 请彻底且详细地思考这个数学问题。考虑多种方法并展示您完整的推理过程。如果第一种方法不起作用,请尝试不同的方法。

mutishot

mutishot 与 extended thingking 配合良好,可以 Prompt 中通过 XML 标签包含少量示例,如<thinking><scratchpad>

plain 复制代码
我将向你展示如何解决一个数学问题,然后我希望你解决一个类似的问题。

问题1:80的15%是多少?

<thinking>
要找到 80 的 15%:
1. 将 15% 转换为小数:15% = 0.15
2. 相乘:0.15 × 80 = 12
</thinking>

答案是12。

现在解决这个问题:
问题2:240 的 35% 是多少?

充分利用长输出和长形式思考

对于非常长的输出,可以要求提供详细的大纲,包括段落级别的字数,然后要求 Claude 将其段落索引到大纲中并保持指定的字数。

标准 Prompt 增强 Prompt
编写一个Python脚本,实现一个在正方形内弹跳的黄色球,确保正确处理碰撞检测。让正方形缓慢旋转。 编写一个Python脚本,实现一个在四维超立方体内弹跳的黄色球,确保正确处理碰撞检测。让四维超立方体缓慢旋转。确保球始终保持在四维超立方体内。
计划一个为期一周的日本度假。 计划一个7天的日本之旅,满足以下约束条件: + 预算2,500美元 + 必须包括东京和京都 + 需要适应素食饮食 + 偏好文化体验而非购物 + 必须包括一天徒步旅行 + 每天在不同地点之间的旅行时间不超过2小时 + 每天下午需要空闲时间打电话回家 + 必须尽可能避开人群
为微软在2027年前进入个性化医疗市场制定一个全面战略。 为微软在2027年前进入个性化医疗市场制定一个全面战略。 首先进行: 1. 蓝海战略画布分析 2. 应用波特五力模型识别竞争压力 接下来,基于监管和技术变量进行四种不同未来的情景规划练习。 对于每个情景: + 使用安索夫矩阵开发战略响应 最后,应用三地平线框架来: + 绘制过渡路径 + 识别每个阶段的潜在颠覆性创新

让 Claude 自省

可以使用简单的自然语言提示 Claude 来提高一致性并减少错误:

  1. 在宣布任务完成之前,要求 Claude 通过简单的测试验证其工作
  2. 指导模型分析其前一步骤是否达到了预期结果
  3. 对于编码任务,要求 Claude 在其 extended thinking 中运行测试用例
plain 复制代码
编写一个计算数字阶乘的函数。
在完成之前,请使用以下测试用例验证你的解决方案:
- n=0
- n=1
- n=5
- n=10
并修复你发现的任何问题。
相关推荐
yaocheng的ai分身12 小时前
【Claude Code系列教程】 构建Subagents
claude
302AI19 小时前
302.AI 独家 | 让 Claude Code 支持任意第三方模型
llm·claude
饼干哥哥1 天前
30 个进阶技巧彻底榨干Claude Code价值:工作流、上下文交互、拓展与自动化、架构与重构、性能与协作...
claude
yeshan3 天前
使用 Claude Code 的自定义 Sub Agent 完善博文写作体验
ai编程·claude·掘金·日新计划
清沫4 天前
上下文工程(Context Engineering)
前端·claude·cursor
win4r4 天前
🚀Claude Code重磅推出Sub agents功能!轻松实现任务专业化和模块化!三分钟完美复现Kiro工作流,规范驱动开发时代正式到来!
aigc·claude·vibecoding
不老刘4 天前
Claude Code 基于 VUE + KonvaJS 实现海报生成器(附源码)
vue·claude·konvajs
星际码仔6 天前
AI浪潮下,程序员的岗位不会消失,但可能断层
openai·claude·cursor
yaocheng的ai分身7 天前
Windows 也能用 Claude Code 了!完整安装教程+避坑指南
claude