跳到正文
Anthropic Engineering·· 2025-03-20精选AI 评分70

Anthropic 发布 think 工具:让 Claude 在复杂工具调用中停下来思考

The "think" tool: Enabling Claude to stop and think in complex tool use situations

AI 导读

Anthropic 介绍 think 工具,让 Claude 在生成回复过程中插入一个专门用于结构化思考的步骤,适用于长链工具调用、政策密集环境和顺序决策场景。

推荐理由

Anthropic 给出 think 工具的完整定义、适用场景与 τ-bench 实测数据,可直接迁移到自家智能体工具链。

正文 · AI 翻译
  • 扩展思考更新

    2025年12月15日

    自首次发布以来,扩展思考能力已有所提升,因此在大多数情况下,我们建议使用该功能,而不是专用的 think 工具。扩展思考能带来类似的好处——为 Claude 提供推理复杂问题的空间——同时具有更好的集成性和性能。有关实现细节,请参阅我们的扩展思考文档。

在我们持续增强 Claude 复杂问题解决能力的过程中,我们发现了一种特别有效的方法:一个“think”工具,为复杂任务期间的结构化思考创造专门的空间。

这一简单而强大的技术——正如我们将在下文解释的,它不同于 Claude 新的“扩展思考”能力(有关扩展思考实现细节,请参见此处)——在 Claude 的智能体工具使用能力方面带来了显著提升。这包括遵循策略、做出一致决策以及处理多步骤问题,而且实现开销极小。

在本文中,我们将探讨如何在不同应用中实现“think”工具,并基于经过验证的基准测试结果,为开发者分享实用指导。

什么是“think”工具?

借助“think”工具,我们让 Claude 能够在得出最终答案的过程中加入一个额外的思考步骤——并为其提供专门的空间。

虽然这听起来与扩展思考相似,但它是不同的概念。扩展思考关注的是 Claude 在开始生成回复之前所做的思考。借助扩展思考,Claude 会在采取行动之前深入考虑并反复推敲其计划。“think”工具则是让 Claude 在开始生成回复后,加入一个步骤来停下来思考它是否拥有继续推进所需的全部信息。这在执行长链工具调用或与用户进行长多步骤对话时尤其有用。

这使得“think”工具更适合以下情况:Claude 仅凭用户查询无法获得制定回复所需的全部信息,并且需要处理外部信息(例如工具调用结果中的信息)。Claude 使用“think”工具进行的推理不如扩展思考所能获得的推理全面,并且更侧重于模型发现的新信息。

对于更简单的工具使用场景,例如非顺序工具调用或直接遵循指令,我们建议使用扩展思考。当你不需要 Claude 调用工具时,扩展思考也适用于编码、数学和物理等用例。当 Claude 需要调用复杂工具、在长链工具调用中仔细分析工具输出、在具有详细指南且策略繁多的环境中导航,或做出每一步都建立在前一步之上且错误代价高昂的顺序决策时,“think”工具更为适合。

以下是使用来自 τ-Bench 的标准工具规范格式的示例实现:

{
  "name": "think",
  "description": "Use the tool to think about something. It will not obtain new information or change the database, but just append the thought to the log. Use it when complex reasoning or some cache memory is needed.",
  "input_schema": {
    "type": "object",
    "properties": {
      "thought": {
        "type": "string",
        "description": "A thought to think about."
      }
    },
    "required": ["thought"]
  }
}

在 τ-Bench 上的表现

我们使用 τ-bench(tau-bench)评估了“think”工具,这是一个全面的基准测试,旨在测试模型在真实客户服务场景中使用工具的能力,其中“think”工具是该评估标准环境的一部分。

τ-bench 评估 Claude 的以下能力:

  • 与模拟用户进行真实对话
  • 始终遵循复杂的客户服务代理政策指南
  • 使用多种工具访问和操作环境数据库

τ-bench 中使用的主要评估指标是 pass^k,它衡量的是对于给定任务,所有 k 次独立任务试验均成功的概率,并在所有任务上取平均值。与其他 LLM 评估中常见的 pass@k 指标(衡量 k 次试验中是否至少有一次成功)不同,pass^k 评估的是一致性和可靠性——这对于需要始终遵守政策的客户服务应用来说是至关重要的品质。

性能分析

我们的评估比较了几种不同的配置:

  1. 基线(无“think”工具,无扩展思考模式)
  2. 仅扩展思考模式
  3. 仅“think”工具
  4. “think”工具配合优化提示(针对航空领域)

结果显示,当 Claude 3.7 在基准测试的“航空”和“零售”客户服务领域中有效使用“think”工具时,性能有了显著提升:

  • 航空领域:配合优化提示的“think”工具在 pass^1 指标上达到了 0.570,而基线仅为 0.370——相对提升了 54%;
  • 零售领域:仅“think”工具就达到了 0.812,而基线为 0.783。
A line graph showing the performance of Claude 3.7 Sonnet on the "airline" domain of the Tau-Bench eval
Claude 3.7 Sonnet 在 Tau-Bench 评估的“航空”领域下四种不同配置的性能表现。

Claude 3.7 Sonnet 在 Tau-Bench 评估的“航空”领域上的性能表现

配置k=1k=2k=3k=4k=5
“think”+提示0.5840.4440.3840.3560.340
“think”0.4040.2540.1860.1400.100
扩展思考0.4120.2900.2320.1920.160
基线0.3320.2060.1480.1160.100

四种不同配置的评估结果。分数为比例值。

在航空领域,最佳性能是通过将“think”工具与优化提示配对实现的,该提示提供了在分析客户请求时应使用的推理方法类型的示例。以下是优化提示的示例:

## Using the think tool

Before taking any action or responding to the user after receiving tool results, use the think tool as a scratchpad to:
- List the specific rules that apply to the current request
- Check if all required information is collected
- Verify that the planned action complies with all policies
- Iterate over tool results for correctness 

Here are some examples of what to iterate over inside the think tool:
<think_tool_example_1>
User wants to cancel flight ABC123
- Need to verify: user ID, reservation ID, reason
- Check cancellation rules:
  * Is it within 24h of booking?
  * If not, check ticket class and insurance
- Verify no segments flown or are in the past
- Plan: collect missing info, verify rules, get confirmation
</think_tool_example_1>

<think_tool_example_2>
User wants to book 3 tickets to NYC with 2 checked bags each
- Need user ID to check:
  * Membership tier for baggage allowance
  * Which payments methods exist in profile
- Baggage calculation:
  * Economy class × 3 passengers
  * If regular member: 1 free bag each → 3 extra bags = $150
  * If silver member: 2 free bags each → 0 extra bags = $0
  * If gold member: 3 free bags each → 0 extra bags = $0
- Payment rules to verify:
  * Max 1 travel certificate, 1 credit card, 3 gift cards
  * All payment methods must be in profile
  * Travel certificate remainder goes to waste
- Plan:
1. Get user ID
2. Verify membership level for bag fees
3. Check which payment methods in profile and if their combination is allowed
4. Calculate total: ticket price + any bag fees
5. Get explicit confirmation for booking
</think_tool_example_2>

特别有趣的是不同方法的比较。使用“think”工具配合优化提示取得了显著优于扩展思考模式的结果(后者与未提示的“think”工具表现相似)。仅使用“think”工具(无提示)相比基线有所提升,但仍未达到优化方法的水平。

“think”工具与优化提示的结合以显著优势提供了最强的性能,这可能是因为基准测试中 航空政策 部分的高度复杂性,模型从获得如何“思考”的示例中获益最多。

在零售领域,我们也测试了各种配置,以了解每种方法的具体影响

Line graph showing the performance of Claude 3.7 Sonnet on the "retail" domain of the Tau-Bench eval
Claude 3.7 Sonnet 在 Tau-Bench 评估的“零售”领域下三种不同配置的性能表现。

Claude 3.7 Sonnet 在 Tau-Bench 评估的“零售”领域上的性能表现

配置k=1k=2k=3k=4k=5
“think”+无提示0.8120.7350.6850.6500.626
扩展思考0.7700.6810.6230.5810.548
基线0.7830.6950.6430.6070.583

三种不同配置的评估结果。分数为比例值。

即使没有额外提示,“think”工具也取得了最高的 pass^1 分数 0.812。零售政策 相比航空领域明显更容易处理,Claude 仅通过拥有思考空间就得以提升,无需进一步指导。

τ-Bench 分析的关键洞察

我们的详细分析揭示了若干模式,可帮助您有效实施“think”工具:

  1. 提示在困难领域至关重要。仅仅提供“think”工具可能会略微提升性能,但将其与优化提示相结合,在困难领域能显著提升效果。然而,较简单的领域可能仅需访问“think”即可受益。
  2. 跨试验一致性提升。使用“think”带来的改进在pass^k直至k=5时仍得以保持,表明该工具有助于Claude更有效地处理边缘情况和不寻常场景。

SWE-Bench上的表现

在评估Claude 3.7 Sonnet时,我们的SWE-bench设置中也加入了类似的“think”工具,助力实现了0.623的最先进得分。调整后的“think”工具定义如下:

{
  "name": "think",
  "description": "Use the tool to think about something. It will not obtain new information or make any changes to the repository, but just log the thought. Use it when complex reasoning or brainstorming is needed. For example, if you explore the repo and discover the source of a bug, call this tool to brainstorm several unique ways of fixing the bug, and assess which change(s) are likely to be simplest and most effective. Alternatively, if you receive some test results, call this tool to brainstorm ways to fix the failing tests.",
  "input_schema": {
    "type": "object",
    "properties": {
      "thought": {
        "type": "string",
        "description": "Your thoughts."
      }
    },
    "required": ["thought"]
  }
}

我们的实验(使用“think”工具的n=30个样本,未使用的n=144个样本)显示,单独引入此工具平均提升了1.6%的性能(Welch's t-检验:t(38.89) = 6.71,p < .001,d = 1.47)。

何时使用“think”工具

基于这些评估结果,我们确定了Claude从“think”工具中获益最多的特定场景:

  1. 工具输出分析。 当Claude需要仔细处理先前工具调用的输出后再行动,并可能需要回溯其方法时;
  2. 政策密集型环境。当Claude需要遵循详细指南并验证合规性时;以及
  3. 顺序决策。当每个行动都基于前一个,且错误代价高昂时(常见于多步骤领域)。

实施最佳实践

为了充分利用Claude的“think”工具,我们根据τ-bench实验推荐以下实施实践。

1. 结合领域特定示例的策略性提示

最有效的方法是提供关于何时及如何使用“think”工具的清晰指示,如τ-bench航空领域所采用的那样。提供针对您具体用例的示例能显著提高模型使用“think”工具的效率:

  • 推理过程中期望的详细程度;
  • 如何将复杂指令分解为可操作的步骤;
  • 处理常见场景的决策树;以及
  • 如何检查是否已收集所有必要信息。

2. 将复杂指导置于系统提示中

我们发现,当指导内容长且/或复杂时,将关于“think”工具的说明包含在系统提示中比放在工具描述本身更为有效。这种方法提供了更广泛的上下文,帮助模型更好地将思考过程融入其整体行为。

何时不使用“think”工具

尽管“think”工具能带来显著改进,但它并非适用于所有工具使用场景,且会增加提示长度和输出令牌的成本。具体而言,我们发现“think”工具在以下用例中并未带来任何改进:

  1. 非顺序工具调用。如果Claude只需进行单个工具调用或多个并行调用来完成任务,添加“think”不太可能带来任何改进。
  2. 简单的指令遵循。当 Claude 需要遵守的约束不多,且其默认行为已足够好时,额外的“思考”不太可能带来收益。

开始使用

“think”工具是对你的 Claude 实现的一个简单补充,只需几步就能带来有意义的改进:

  1. 用智能体工具使用场景进行测试。从具有挑战性的用例开始——那些 Claude 目前在策略合规或长工具调用链中的复杂推理方面表现吃力的用例。
  2. 添加工具定义。实现一个针对你的领域定制的“think”工具。它只需极少的代码,却能实现更结构化的推理。同时考虑在系统提示中加入关于何时以及如何使用该工具的说明,并附上与你的领域相关的示例。
  3. 监控并优化。观察 Claude 在实践中如何使用该工具,并调整你的提示以鼓励更有效的思考模式。

最棒的是,添加这个工具在性能结果方面的弊端极小。除非 Claude 决定使用它,否则它不会改变外部行为,也不会干扰你现有的工具或工作流程。

结论

我们的研究表明,“think”工具可以显著提升 Claude 3.7 Sonnet1 在需要策略遵循和长工具调用链推理的复杂任务上的表现。“Think”并非万能解决方案,但它在正确的用例中能带来可观的收益,且实现复杂度极低。

我们期待看到你如何使用“think”工具,与 Claude 一起构建更强大、更可靠、更透明的 AI 系统。

1. 虽然我们的 τ-Bench 结果聚焦于使用“think”工具后 Claude 3.7 Sonnet 的提升,但我们的实验表明,Claude 3.5 Sonnet (New) 在与 3.7 Sonnet 相同的配置下也能获得性能提升,这表明这一改进同样适用于其他 Claude 模型。

来源:Anthropic Engineering · anthropic.com