Claude "think" 工具:让 Claude 在复杂工具使用场景中停下来思考
原文链接: www.anthropic.com/engineering…
发布日期: 2025年3月20日
扩展思考更新 (2025年12月15日)
扩展思考功能自首次发布以来已得到改进,因此我们建议在大多数情况下使用该功能而不是专用的 think 工具。扩展思考提供了类似的好处——给 Claude 思考复杂问题的空间——并具有更好的集成和性能。
引言
随着我们持续增强 Claude 的复杂问题解决能力,我们发现了一种特别有效的方法:创建一个 "think" 工具,为结构化思考在复杂任务中提供专用空间。
这种简单而强大的技术——正如我们将在下面解释的,它与 Claude 新的"扩展思考"能力不同——已经在 Claude 的智能体工具使用能力方面带来了显著改进。这包括遵循策略、做出一致决策以及处理多步骤问题,所有这些都只需要最少的实现开销。
在本文中,我们将探讨如何在不同应用中实现 "think" 工具,基于经过验证的基准测试结果分享开发者的实用指导。
什么是 "think" 工具?
通过 "think" 工具,我们赋予 Claude 包含额外思考步骤的能力——拥有自己的专用空间——作为得出最终答案的一部分。
虽然听起来与扩展思考类似,但这是一个不同的概念:
-
扩展思考:关注 Claude 在开始生成响应之前所做的事情。通过扩展思考,Claude 在采取行动之前深入考虑并迭代其计划。
-
"think" 工具:让 Claude 在开始生成响应后,添加一个步骤来停下来思考它是否拥有继续前进所需的所有信息。这在执行长链工具调用或与用户进行长时间多步骤对话时特别有用。
这使得 "think" 工具更适合 Claude 无法仅从用户查询中获得制定响应所需的所有信息,并且需要处理外部信息(例如工具调用结果中的信息)的情况。Claude 使用 "think" 工具执行的推理不如扩展思考所能获得的那样全面,更专注于模型发现的新信息。
💡 扩展思考 vs Think 工具
| 维度 | 扩展思考 | Think 工具 |
|---|---|---|
| 触发时机 | 响应生成前 | 响应生成过程中 |
| 主要用途 | 深度规划和迭代方案 | 处理新获取的外部信息 |
| 推理深度 | 更全面、更深入 | 聚焦于新信息的处理 |
| 适用场景 | 简单工具调用、编码、数学 | 长链工具调用、策略遵循 |
| 信息依赖 | 基于初始查询 | 需要工具输出的外部信息 |
使用场景建议
我们建议在以下场景使用扩展思考:
- 简单的工具使用场景,如非顺序工具调用或直接的指令遵循
- 不需要 Claude 调用工具的用例,如编码、数学和物理
"think" 工具更适合以下情况:
- Claude 需要调用复杂工具
- 在长链工具调用中仔细分析工具输出
- 导航具有详细指南的策略密集环境
- 做出顺序决策,其中每个步骤建立在前一个步骤之上,错误代价高昂
💡 使用场景决策
graph TD
A{任务类型?} --> B[单次工具调用]
A --> C[多步骤工具链]
A --> D[策略遵循任务]
A --> E[简单指令]
B --> F[推荐:扩展思考]
E --> F
C --> G{需要分析工具输出?}
G -->|是| H[推荐:Think 工具]
G -->|否| F
D --> I{策略复杂?}
I -->|高| J[推荐:Think + 提示词]
I -->|中| H
I -->|低| F
style H fill:#90EE90
style J fill:#FFD700
style F fill:#87CEEB
工具规范示例
以下是来自 τ-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"]
}
}
💡 Think 工具工作流程
graph TD
A[用户发起请求] --> B[Claude 开始生成响应]
B --> C[执行工具调用]
C --> D[接收工具输出]
D --> E{需要验证/推理?}
E -->|是| F[调用 think 工具]
F --> G[结构化思考]
G --> H[记录思考内容]
H --> I[验证信息完整性]
I --> J[检查策略合规性]
J --> K{满足条件?}
K -->|否| C
K -->|是| L[继续执行或响应用户]
E -->|否| L
L --> M[完成任务]
τ-Bench 基准测试性能
我们使用 τ-bench(tau-bench)评估了 "think" 工具,这是一个全面的基准测试,旨在测试模型在真实客户服务场景中使用工具的能力,其中 "think" 工具是评估标准环境的一部分。
τ-bench 评估内容
τ-bench 评估 Claude 的能力:
- 导航真实对话:与模拟用户进行真实对话
- 遵循复杂策略:一致地遵循复杂的客户服务代理策略指南
- 使用多种工具:使用各种工具访问和操作环境数据库
评估指标说明
τ-bench 使用的主要评估指标是 pass^k,它衡量对于给定任务,所有 k 次独立任务试验都成功的概率,并在所有任务中取平均值。与其他 LLM 评估中常见的 pass@k 指标(衡量 k 次试验中至少有一次成功)不同,pass^k 评估一致性和可靠性——这是客户服务应用中至关重要的品质,其中一致地遵守策略至关重要。
💡 评估指标对比
| 指标 | pass@k | pass^k |
|---|---|---|
| 定义 | k次试验中至少1次成功 | k次试验全部成功 |
| 衡量重点 | 能力上限 | 一致性和可靠性 |
| 计算方式 | 任意成功即可 | 必须全部成功 |
| 适用场景 | 代码生成、创意任务 | 客户服务、策略遵循 |
| 对错误容忍 | 高容忍 | 零容忍 |
性能分析
我们的评估比较了几种不同的配置:
- 基线(无 "think" 工具,无扩展思考模式)
- 仅扩展思考模式
- 仅 "Think" 工具
- "Think" 工具 + 优化提示词(针对航空领域)
航空领域性能结果
结果显示,当 Claude 3.7 在基准测试的"航空"和"零售"客户服务领域有效使用 "think" 工具时,性能有了显著改进:
- 航空领域:使用优化提示词的 "think" 工具在 pass^1 指标上达到 0.570,而基线仅为 0.370——相对提升 54%
- 零售领域:仅使用 "think" 工具就达到 0.812,而基线为 0.783

Claude 3.7 Sonnet 在航空领域的性能表现
| 配置 | k=1 | k=2 | k=3 | k=4 | k=5 |
|---|---|---|---|---|---|
| "Think" + 提示词 | 0.584 | 0.444 | 0.384 | 0.356 | 0.340 |
| "Think" 工具 | 0.404 | 0.254 | 0.186 | 0.140 | 0.100 |
| 扩展思考 | 0.412 | 0.290 | 0.232 | 0.192 | 0.160 |
| 基线 | 0.332 | 0.206 | 0.148 | 0.116 | 0.100 |
注:分数为比例值
💡 航空领域性能提升
graph LR
A[基线<br/>0.332] -->|+21.7%| B[扩展思考<br/>0.412]
A -->|+21.7%| C[Think 工具<br/>0.404]
A -->|+75.9%| D[Think + 提示词<br/>0.584]
style D fill:#90EE90
style A fill:#FFB6C6
优化提示词示例
航空领域的最佳性能是通过将 "think" 工具与优化提示词配对实现的,该提示词提供了分析客户请求时使用的推理方法示例。以下是优化提示词的示例:
## 使用 think 工具
在接收到工具结果后采取任何行动或响应用户之前,使用 think 工具作为草稿板:
- 列出适用于当前请求的特定规则
- 检查是否收集了所有必需信息
- 验证计划的行动是否符合所有策略
- 迭代检查工具结果的正确性
以下是在 think 工具内迭代的一些示例:
<think_tool_example_1>
用户想取消航班 ABC123
- 需要验证:用户ID、预订ID、原因
- 检查取消规则:
* 是否在预订后24小时内?
* 如果不是,检查票类和保险
- 验证没有已飞行或过去的航段
- 计划:收集缺失信息、验证规则、获取确认
</think_tool_example_1>
<think_tool_example_2>
用户想预订3张去纽约的机票,每人2件托运行李
- 需要用户ID来检查:
* 会员等级以确定行李额度
* 个人资料中存在哪些支付方式
- 行李费用计算:
* 经济舱 × 3位乘客
* 如果是普通会员:每人1件免费行李 → 3件额外行李 = $150
* 如果是银卡会员:每人2件免费行李 → 0件额外行李 = $0
* 如果是金卡会员:每人3件免费行李 → 0件额外行李 = $0
- 需要验证的支付规则:
* 最多1张旅行证书、1张信用卡、3张礼品卡
* 所有支付方式必须在个人资料中
* 旅行证书余额将作废
- 计划:
1. 获取用户ID
2. 验证会员级别以确定行李费
3. 检查个人资料中的支付方式及其组合是否允许
4. 计算总额:机票价格 + 任何行李费
5. 获取明确的预订确认
</think_tool_example_2>
💡 优化提示词的作用机制
graph TD
Root((优化提示词))
Root --> A[示例驱动学习]
Root --> B[结构化指导]
Root --> C[领域特定知识]
A --> A1[真实场景案例]
A --> A2[具体推理步骤]
B --> B1[检查清单]
B --> B2[验证流程]
C --> C1[航空策略规则]
C --> C2[会员等级体系]
C --> C3[支付方式限制]
性能对比分析
特别有趣的是不同方法的比较结果:
- 使用优化提示词的 "think" 工具显著优于扩展思考模式(后者与未提示的 "think" 工具表现相似)
- 单独使用 "think" 工具(无提示)比基线有所改进,但仍不及优化方法
- "think" 工具与优化提示的组合以显著优势提供了最强性能
这可能是由于基准测试的航空策略部分具有高度复杂性,模型从给出如何"思考"的示例中获益最多。
零售领域性能结果
在零售领域,我们还测试了各种配置以了解每种方法的具体影响。

Claude 3.7 Sonnet 在零售领域的性能表现
| 配置 | k=1 | k=2 | k=3 | k=4 | k=5 |
|---|---|---|---|---|---|
| "Think" 工具(无提示) | 0.812 | 0.735 | 0.685 | 0.650 | 0.626 |
| 扩展思考 | 0.770 | 0.681 | 0.623 | 0.581 | 0.548 |
| 基线 | 0.783 | 0.695 | 0.643 | 0.607 | 0.583 |
注:分数为比例值
即使没有额外的提示,"think" 工具也达到了 0.812 的最高 pass^1 分数。零售策略明显比航空领域更容易导航,Claude 仅通过拥有思考空间就能够改进,无需进一步指导。
💡 不同领域的复杂度对比
| 领域特征 | 航空领域 | 零售领域 |
|---|---|---|
| 策略复杂度 | 高(需要示例指导) | 中等(自然改进) |
| 基线性能 | 0.332 | 0.783 |
| Think工具提升 | +75.9%(需提示) | +3.7%(无需提示) |
| 是否需要优化提示 | 是,显著影响 | 否,可选 |
τ-Bench 分析的关键见解
我们的详细分析揭示了几种模式,可以帮助你有效实现 "think" 工具:
-
提示在困难领域中非常重要
- 简单地提供 "think" 工具可能会在一定程度上提高性能
- 但将其与优化提示配对可以为困难领域带来显著更好的结果
- 然而,较简单的领域可能仅从访问 "think" 中受益
-
跨试验的一致性改进
- 使用 "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-test: t(38.89) = 6.71, p < .001, d = 1.47)。
💡 SWE-Bench 统计结果
| 指标 | 值 | 含义 |
|---|---|---|
| 平均提升 | +1.6% | 显著改进 |
| t 值 | 6.71 | 高统计显著性 |
| p 值 | < .001 | 极显著 |
| 效应量 d | 1.47 | 大效应 |
| 样本量(有think) | 30 | 实验组 |
| 样本量(无think) | 144 | 对照组 |
何时使用 "think" 工具
基于这些评估结果,我们确定了 Claude 从 "think" 工具中获益最多的特定场景:
适用场景
-
工具输出分析
- 当 Claude 需要在行动前仔细处理先前工具调用的输出
- 可能需要在其方法中回溯
-
策略密集环境
- 当 Claude 需要遵循详细指南并验证合规性
-
顺序决策制定
- 当每个行动建立在前一个行动之上
- 错误代价高昂(通常出现在多步骤领域中)
💡 适用场景总览
graph TD
Think((Think 工具<br/>最佳场景))
Think --> A[工具输出分析]
Think --> B[策略密集环境]
Think --> C[顺序决策]
A --> A1[处理复杂输出]
A --> A2[可能需要回溯]
B --> B1[详细指南]
B --> B2[合规验证]
C --> C1[步骤依赖]
C --> C2[错误代价高]
实施最佳实践
为了充分利用 Claude 的 "think" 工具,我们根据 τ-bench 实验推荐以下实施实践。
1. 使用领域特定示例的战略性提示
最有效的方法是提供关于何时以及如何使用 "think" 工具的清晰说明。提供针对特定用例的示例可以显著改善模型使用 "think" 工具的效果:
- 推理过程的详细程度:期望的详细级别
- 如何分解复杂指令:将其转化为可操作的步骤
- 处理常见场景的决策树
- 如何检查是否收集了所有必要信息
2. 将复杂指导放在系统提示中
我们发现,当指导较长和/或复杂时,将关于 "think" 工具的说明包含在系统提示中比将其放在工具描述本身中更有效。这种方法提供了更广泛的上下文,并帮助模型更好地将思考过程整合到其整体行为中。
💡 提示词放置策略
| 放置位置 | 系统提示 | 工具描述 |
|---|---|---|
| 适用内容 | 长指导、复杂规则、示例 | 简短功能说明 |
| 上下文范围 | 全局、整体行为 | 局部、工具特定 |
| 推荐度 | ⭐⭐⭐⭐⭐ 复杂场景 | ⭐⭐⭐ 简单说明 |
何时不使用 "think" 工具
虽然 "think" 工具可以提供实质性改进,但它并不适用于所有工具使用用例,并且确实会增加提示长度和输出令牌的成本。具体而言,我们发现在以下用例中 "think" 工具不会提供任何改进:
不适用场景
-
非顺序工具调用
- 如果 Claude 只需要进行单次工具调用或多个并行调用来完成任务
- 添加 "think" 不太可能有任何改进
-
简单指令遵循
- 当 Claude 需要遵守的约束不多
- 其默认行为已经足够好
- 不太可能从额外的 "think"-ing 中获益
💡 成本收益分析
graph TD
A[考虑使用 Think] --> B{任务复杂度}
B -->|高| C{多步骤?}
B -->|低| D[成本 > 收益]
D --> E[不推荐使用]
C -->|是| F{策略密集?}
C -->|否| D
F -->|是| G[收益 > 成本]
F -->|否| H{需要工具输出分析?}
G --> I[强烈推荐]
H -->|是| J[推荐使用]
H -->|否| D
style I fill:#FFD700
style J fill:#90EE90
style E fill:#FFB6C6
入门指南
"think" 工具是对 Claude 实现的直接添加,只需几个步骤即可产生有意义的改进:
实施步骤
-
使用智能体工具使用场景进行测试
- 从具有挑战性的用例开始
- 选择 Claude 目前在策略合规性或长工具调用链中的复杂推理方面遇到困难的场景
-
添加工具定义
- 实现针对你的领域定制的 "think" 工具
- 它需要最少的代码但能够实现更结构化的推理
- 还要考虑在系统提示中包含关于何时以及如何使用该工具的说明
- 提供与你的领域相关的示例
-
监控和优化
- 观察 Claude 在实践中如何使用该工具
- 调整提示以鼓励更有效的思考模式
最小风险
添加此工具在性能结果方面的负面影响很小:
- 除非 Claude 决定使用它,否则不会改变外部行为
- 不会干扰现有工具或工作流程
💡 实施流程
sequenceDiagram
participant Dev as 开发者
participant System as 系统集成
participant Claude as Claude 模型
participant Monitor as 监控系统
Dev->>System: 1. 添加 Think 工具定义
Dev->>System: 2. 配置系统提示(含示例)
System->>Claude: 3. 部署到生产环境
Claude->>Claude: 4. 在需要时自主调用
Claude->>Monitor: 5. 记录思考过程
Monitor->>Dev: 6. 性能反馈
Dev->>System: 7. 优化提示词
结论
我们的研究表明,"think" 工具可以显著增强 Claude 3.7 Sonnet 在需要策略遵守和长链工具调用推理的复杂任务上的性能¹。"Think" 不是一个适用于所有情况的解决方案,但它为正确的用例提供了实质性好处,所有这些都只需要最少的实现复杂性。
我们期待看到你将如何使用 "think" 工具与 Claude 一起构建更强大、更可靠和更透明的 AI 系统。
附注
¹ 虽然我们的 τ-Bench 结果专注于使用 "think" 工具的 Claude 3.7 Sonnet 的改进,但我们的实验表明,Claude 3.5 Sonnet(新版)也能够使用与 3.7 Sonnet 相同的配置实现性能提升,表明这种改进可以推广到其他 Claude 模型。
📝 总结
核心要点
-
技术创新
- "Think" 工具在响应生成过程中提供结构化思考空间
- 与扩展思考不同,专注于处理外部信息和工具输出
- 简单实现,显著效果
-
性能突破
- 航空领域:54% 相对提升(使用优化提示)
- 零售领域:3.7% 提升(无需额外提示)
- SWE-Bench:1.6% 平均提升(统计显著)
-
最佳实践
- 困难领域需要优化提示词和示例
- 将复杂指导放在系统提示中
- 从具有挑战性的用例开始测试
-
适用场景
- ✅ 多步骤工具调用链
- ✅ 策略密集型环境
- ✅ 需要分析工具输出
- ❌ 单次或并行工具调用
- ❌ 简单指令遵循
-
实施建议
- 最小代码开销
- 零风险(不使用则无影响)
- 领域特定定制效果最佳
- 持续监控和优化
原文作者: Anthropic Engineering Team