阿里开发者

解锁AI潜力:如何高效运用Claude进行复杂任务处理

Image

阿里妹导读

本文系统解读了Anthropic官方发布的提示词优化策略,旨在帮助用户充分发挥Claude等先进大语言模型的潜力。

来自 Anthropic 官方的提示词优化建议[1]:

1.Be clear and direct[2]

2.Use examples (multishot) [3]

3.Let Claude think (chain of thought)[4]

4.Use XML tags[5]

5.Prefill Claude’s response[6]

6.Chain complex prompts[7]

7.Long context tips[8]

根据个人理解做了一些提炼,读完之后最大的感受就是:

1.使用 xml 标签结构化提示词。

2.触发 Claude Thinking 和 Plan。

保持清晰直接

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

  • 给 Claude contextual 的信息:

  • 任务结果将用于什么;

  • 输出内容面向什么受众;

  • 任务属于什么工作流程,以及这个任务在工作流程中的位置;

  • 任务的最终目标,或者成功完成任务是什么样子;

  • 具体说明你希望 Claude 做什么:例如,如果你只想要 Claude 输出代码而不要其他内容,就要明确说明。

  • 按顺序提供指示:使用编号列表或项目符号,以更好地确保 Claude 按照你想要的方式执行任务。

Image

使用示例

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

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

  • 示例需要反映真实用例;

  • 示例不要过于雷同,防止出现过拟合现象;

  • 示例可以用<example>标记,多个的话嵌套在<examples>中;

触发 Claude CoT

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

Image
Image

使用 XML 标签结构化提示词

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

1.保持一致性: 在整个提示词中使用相同的标签名称,并在涉及相关内容时引用这些标签名称(例如,使用<contract>标签中的合同...)。

2.嵌套标签: 对于层次结构内容,你应该嵌套标签 <outer><inner></inner></outer>。

分析这份软件许可协议的法律风险和责任。我们是一家考虑将此协议用于核心数据基础设施的跨国企业。
<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 就会从预填充的文本之后继续生成其响应。

{  "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 第一个提示词:

我有一个 Python 应用,其中包含一个名为 `payment_processor.py` 的文件,负责处理支付逻辑。我需要对其中的 `process_payment` 函数进行重构。你可以通过以下路径访问该文件的内容:`/app/src/payment_processor.py`
请分析该文件内容,并列出所有你可以识别的重构点。对于每个重构点,请简要说明为什么需要重构,以及你计划如何改进。
请使用 XML 标签 `<refactoring_points>` 和 `<point>` 来结构化你的输出。

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

<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 的第一步输出后,发送的第二个提示词:

根据你之前识别的重构点(例如:函数职责单一原则、硬编码验证等),为 `payment_processor.py` 文件设计一个新的、更模块化的代码结构。
请为每个新函数或修改后的现有函数提供函数签名(包括参数和返回类型建议),并简要说明其职责。不需要提供完整的函数实现。
请使用 XML 标签 `<new_structure>` 和 `<function_signature>` 来结构化你的输出。

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

<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 的第二步输出后,发送的第三个提示词:

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

Claude 就会开始改代码了。

长提示词技巧

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

  • 将长格式数据放在顶部:建议将长篇数据放在提示的顶部,以帮助模型更好地理解和处理信息。

  • 使用 XML 标签:使用多个文档时将每个文档包装在 <document> 标签中,并带有 <document_content> 和 <source>子标签。

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

您是一位AI医生助手。您的任务是帮助医生诊断可能的患者疾病。
<documents>  <documentindex="1">    <source>patient_symptoms.txt</source>    <document_content>      {{PATIENT_SYMPTOMS}}    </document_content>  </document>  <documentindex="2">    <source>patient_records.txt</source>    <document_content>      {{PATIENT_RECORDS}}    </document_content>  </document>  <documentindex="3">    <source>patient01_appt_history.txt</source>    <document_content>      {{PATIENT01_APPOINTMENT_HISTORY}}    </document_content>  </document></documents>
从患者记录和就诊历史中找出与诊断患者报告症状相关的引用。将这些引用放在<quotes>标签中。然后,根据这些引用,列出所有能帮助医生诊断患者症状的信息。将您的诊断信息放在<info>标签中。

extended thinking 技巧

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

启用 extended thinking

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内容块。

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

使用高层次指令

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

Image

mutishot

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

我将向你展示如何解决一个数学问题,然后我希望你解决一个类似的问题。
问题1:80的15%是多少?
<thinking>要找到 80 的 15%:1. 将 15% 转换为小数:15% = 0.152. 相乘:0.15 × 80 = 12</thinking>
答案是12。
现在解决这个问题:问题2:240 的 35% 是多少?

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

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

Image
Image

让 Claude 自省

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

1.在宣布任务完成之前,要求 Claude 通过简单的测试验证其工作;

2.指导模型分析其前一步骤是否达到了预期结果;

3.对于编码任务,要求 Claude 在其 extended thinking 中运行测试用例;

编写一个计算数字阶乘的函数。在完成之前,请使用以下测试用例验证你的解决方案:- n=0- n=1- n=5- n=10并修复你发现的任何问题。

参考链接:

[1]https://docs.anthropic.com/en/docs/build-with-claude/prompt-engineering/overview

[2]https://docs.anthropic.com/en/docs/build-with-claude/prompt-engineering/be-clear-and-direct

[3]https://docs.anthropic.com/en/docs/build-with-claude/prompt-engineering/multishot-prompting

[4]https://docs.anthropic.com/en/docs/build-with-claude/prompt-engineering/chain-of-thought

[5]https://docs.anthropic.com/en/docs/build-with-claude/prompt-engineering/use-xml-tags

[6]https://docs.anthropic.com/en/docs/build-with-claude/prompt-engineering/prefill-claudes-response

[7]https://docs.anthropic.com/en/docs/build-with-claude/prompt-engineering/chain-prompts

[8]https://docs.anthropic.com/en/docs/build-with-claude/prompt-engineering/long-context-tips

[9]https://docs.anthropic.com/en/docs/build-with-claude/extended-thinking

创意加速器:AI 绘画创作

本方案展示了如何利用自研的通义万相 AIGC 技术在 Web 服务中实现先进的图像生成。其中包括文本到图像、涂鸦转换、人像风格重塑以及人物写真创建等功能。这些能力可以加快艺术家和设计师的创作流程,提高创意效率。

点击阅读原文查看详情。