缓存时间:
2026/05/08 09:42
# “think” 工具:让 Claude 停下来思考 来源:https://www.anthropic.com/engineering/claude-think-tool
- 扩展思考更新 2025年12月15日 扩展思考功能自首次发布以来已有显著改进,因此我们建议在大多数情况下使用扩展思考功能,而非专用的 think 工具。扩展思考提供了类似的收益——为 Claude 提供空间来推理复杂问题——并且具有更好的集成度和性能。有关实现细节,请参阅我们的扩展思考文档。
随着我们不断提升 Claude 的复杂问题解决能力,我们发现了一种特别有效的方法:一个"think"工具,它为 Claude 在复杂任务中创建专用的结构化思考空间。这种简单而强大的技术——如下所述,它与 Claude 的新"扩展思考"(https://www.anthropic.com/research/visible-extended-thinking)功能不同(扩展思考实现细节见此处:https://platform.claude.com/docs/en/build-with-claude/extended-thinking)——显著提升了 Claude 的代理工具使用能力。这包括遵循策略、做出一致决策和处理多步骤问题,且实现开销极小。
在这篇文章中,我们将探讨如何在不同应用中实现"think"工具,基于经过验证的基准测试结果为开发者提供实用指导。
### 什么是"think"工具?
通过"think"工具,我们为 Claude 提供了包含额外思考步骤的能力——拥有自己指定的空间——作为得出最终答案的一部分。虽然听起来与扩展思考相似,但这是一个不同的概念。扩展思考关注的是 Claude 在生成响应**之前**做什么。在扩展思考中,Claude 在采取行动之前深入考虑并迭代其计划。
"think"工具则是让 Claude 在**开始生成响应之后**,增加一个步骤来停下来思考是否拥有继续前进所需的所有信息。这在执行长链工具调用或与用户进行长对话时特别有帮助。这使得"think"工具更适合 Claude 无法仅凭用户查询获得制定响应所需的所有信息,且需要处理外部信息(例如工具调用结果中的信息)的情况。
Claude 使用"think"工具进行的推理不如扩展思考全面,更专注于模型发现的**新**信息。
我们建议将扩展思考用于更简单的工具使用场景,如非顺序工具调用或简单的指令遵循。扩展思考也适用于不需要 Claude 调用工具的场景,如编程、数学和物理。
"think"工具更适合 Claude 需要调用复杂工具、仔细分析长链工具调用中的工具输出、在具有详细策略的环境中导航,或在每个步骤都建立在之前步骤之上且错误代价高昂的连续决策中使用。
以下是使用 τ-Bench(https://arxiv.org/abs/2406.12045)标准工具规范格式的示例实现:
```
{
"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。
Claude 3.7 Sonnet 在 Tau-Bench 评估"航空"领域表现的折线图
Claude 3.7 Sonnet 在 Tau-Bench 评估"航空"领域四种不同配置下的表现。
| Claude 3.7 Sonnet 在 Tau-Bench 评估"航空"领域的表现 | | | | | |
|:---|:---|:---|:---|:---|:---|
| 配置 | k=1 | k=2 | k=3 | k=4 | k=5 |
| "Think" + Prompt | 0.584 | 0.444 | 0.384 | 0.356 | 0.340 |
| "Think" | 0.404 | 0.254 | 0.186 | 0.140 | 0.100 |
| Extended thinking | 0.412 | 0.290 | 0.232 | 0.192 | 0.160 |
| Baseline | 0.332 | 0.206 | 0.148 | 0.116 | 0.100 |
四种不同配置的评估结果。分数为比例值。
航空领域表现最好的是将"think"工具与优化提示词结合使用,该提示词给出了分析客户请求时使用的推理方法示例。以下是优化提示词的示例:
```
## 使用 think 工具
在收到工具结果后采取任何行动或响应用户之前,使用 think 工具作为草稿纸来:
- 列出适用于当前请求的具体规则
- 检查是否收集了所有必需信息
- 验证计划行动是否符合所有策略
- 迭代检查工具结果的正确性
以下是一些在 think 工具中迭代检查的示例:
用户想要取消航班 ABC123
- 需要验证:用户 ID、预订 ID、原因
- 检查取消规则:
* 是否在预订后 24 小时内?
* 如果不是,检查机票舱位和保险
- 验证没有已飞行或已过期的航段
- 计划:收集缺失信息、验证规则、获取确认
用户想要预订 3 张去纽约的机票,每人 2 件托运行李
- 需要用户 ID 来检查:
* 会员等级对应的行李额度
* 个人资料中存在的支付方式
- 行李计算:
* 经济舱 × 3 名乘客
* 如果是普通会员:每人 1 件免费 → 3 件额外 = $150
* 如果是银卡会员:每人 2 件免费 → 0 件额外 = $0
* 如果是金卡会员:每人 3 件免费 → 0 件额外 = $0
- 需要验证的支付规则:
* 最多 1 张旅行券、1 张信用卡、3 张礼品卡
* 所有支付方式必须在个人资料中
* 旅行券余额作废
- 计划:
1. 获取用户 ID
2. 验证会员等级对应的行李费
3. 检查个人资料中的支付方式及其组合是否允许
4. 计算总价:机票价格 + 任何行李费
5. 获取预订的明确确认
```
特别有趣的是不同方法的比较。使用"think"工具配合优化提示词显著优于扩展思考模式(其表现与未提示的"think"工具相似)。单独使用"think"工具(无提示)比基线有所改进,但仍不及优化方法。"think"工具与优化提示词的组合以显著优势提供了最强性能,这可能是因为基准测试中的航空策略(https://github.com/sierra-research/tau-bench/blob/main/tau_bench/envs/airline/wiki.md)部分复杂度很高,模型从如何"思考"的示例中获益最大。
在零售领域,我们也测试了各种配置以了解每种方法的具体影响:
Claude 3.7 Sonnet 在 Tau-Bench 评估"零售"领域表现的折线图
Claude 3.7 Sonnet 在 Tau-Bench 评估"零售"领域三种不同配置下的表现。
| Claude 3.7 Sonnet 在 Tau-Bench 评估"零售"领域的表现 | | | | | |
|:---|:---|:---|:---|:---|:---|
| 配置 | k=1 | k=2 | k=3 | k=4 | k=5 |
| "Think" + no prompt | 0.812 | 0.735 | 0.685 | 0.650 | 0.626 |
| Extended thinking | 0.770 | 0.681 | 0.623 | 0.581 | 0.548 |
| Baseline | 0.783 | 0.695 | 0.643 | 0.607 | 0.583 |
三种不同配置的评估结果。分数为比例值。
即使没有额外提示,"think"工具也达到了最高的 pass^1 分数 0.812。零售策略(https://github.com/sierra-research/tau-bench/blob/main/tau_bench/envs/retail/wiki.md)比航空领域明显更容易处理,Claude 仅通过拥有思考空间就能改进,无需进一步指导。
#### τ-Bench 分析的关键见解
我们的详细分析揭示了几个模式,可帮助您有效实现"think"工具:
1. **提示词在困难领域显著重要**。仅提供"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. **顺序决策**。当每个行动都建立在之前行动之上且错误代价高昂时(常见于多步骤领域)。
## 实现最佳实践
为了最大限度地发挥"think"工具与 Claude 的效果,我们基于 τ-bench 实验推荐以下实现实践。
#### 1. 使用特定领域示例的策略性提示
最有效的方法是提供关于何时以及如何使用"think"工具的明确说明,如 τ-bench 航空领域使用的示例。提供针对您特定用例的示例可显著提升模型使用"think"工具的效果:
- 推理过程中期望的细节程度;
- 如何将复杂指令分解为可执行步骤;
- 处理常见场景的决策树;以及
- 如何检查是否已收集所有必要信息。
#### 2. 将复杂指导放在系统提示中
我们发现,当指导较长和/或较复杂时,将关于"think"工具的说明放在系统提示中比放在工具描述本身更有效。这种方法提供更广泛的背景,帮助模型更好地将思考过程整合到其整体行为中。
### 何时*不*使用"think"工具
虽然"think"工具可以提供实质性改进,但它并不适用于所有工具使用场景,并且确实以增加提示长度和输出 token 为代价。具体来说,我们发现"think"工具在以下用例中没有改进:
1. **非顺序工具调用**。如果 Claude 只需进行一次工具调用或多次并行调用即可完成任务,添加"think"不太可能有任何改进。
2. **简单指令遵循**。当没有太多约束需要 Claude 遵守,且其默认行为足够好时,额外的"think"不太可能有收益。
### 开始使用
"think"工具是 Claude 实现中一个简单的补充,只需几个步骤即可产生有意义的改进:
1. **在代理工具使用场景中测试**。从具有挑战性的用例开始——即 Claude 目前在策略遵守或长工具调用链中的复杂推理方面存在困难的用例。
2. **添加工具定义**。实现一个针对您领域的"think"工具。它需要最少的代码,但可实现更有结构的推理。同时考虑在系统提示中包含关于何时以及如何使用该工具的说明,并附上与您领域相关的示例。
3. **监控和优化**。观察 Claude 在实践中如何使用该工具,并调整您的提示以鼓励更有效的思考模式。
最棒的是,添加此工具在性能结果方面几乎没有负面影响。除非 Claude 决定使用它,否则不会改变外部行为,也不会干扰您现有的工具或工作流。
### 结论
我们的研究表明,"think"工具可以显著增强 Claude 3.7 Sonnet 在需要策略遵守和长工具调用链推理的复杂任务上的性能。¹ "Think"不是一刀切的解决方案,但对于正确的用例,它提供了实质性收益,且实现复杂度极低。
我们期待看到您如何使用"think"工具与 Claude 一起构建更强大、更可靠、更透明的 AI 系统。
¹ 虽然我们的 τ-Bench 结果聚焦于 Claude 3.7 Sonnet 使用"think"工具的改进,但我们的实验表明 Claude 3.5 Sonnet(New)也能通过相同的配置获得性能提升,表明这种改进可以推广到其他 Claude 模型。