"think" 工具:让 Claude 在复杂工具使用场景中停下来思考
发布日期: 2025年3月20日
说明(2025年12月15日更新): 扩展思维能力自首次发布以来已有改进,Anthropic 建议在大多数情况下使用该功能而非专用的 think 工具。扩展思维以更好的集成和性能提供了类似的好处。
概述
一种提高 Claude 复杂问题解决表现的新工具。文章描述了一个 "think" 工具,为"复杂任务中的结构化思维创造专门空间"。这种方法不同于 Claude 的扩展思维能力,在 Agent 式工具使用、策略遵循、一致决策和多步骤问题处理方面表现出改进。
什么是 "think" 工具?
think 工具让 Claude 在得出最终答案的过程中,能够包含一个额外的思考步骤。扩展思维关注的是 Claude 在生成响应之前做什么,而 think 工具让 Claude 在生成响应时,能够添加一个步骤来检查是否有足够的信息继续。这在长链工具调用或扩展的多步骤对话中特别有帮助。
think 工具适用于 Claude 无法仅从用户查询中获得所有所需信息、必须处理来自工具调用结果的外部信息的情况。其推理不如扩展思维全面,更侧重于模型发现的新信息。
推荐使用指南:
- 扩展思维 推荐用于更简单的工具使用场景、非顺序工具调用、直接的指令遵循,以及不涉及工具调用的编码、数学和物理等用例。
- "think" 工具 更适合复杂工具调用、在长链中仔细分析工具输出、具有详细指南的策略密集型环境,以及每个步骤都建立在前一步基础上的顺序决策。
示例实现
{
"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 上的表现
τ-Bench 是一个全面的基准测试,测试模型在真实客户服务场景中的工具使用能力。它评估 Claude 在真实对话中导航、遵循复杂策略指南以及使用工具访问和操作环境数据库的能力。
主要指标是 pass^k,衡量给定任务的所有 k 次独立试验都成功的概率,在所有任务上取平均值。与 pass@k(衡量 k 次试验中至少一次成功)不同,pass^k 评估一致性和可靠性。
评估的配置
- 基线(无 think 工具,无扩展思维)
- 仅扩展思维模式
- 仅 think 工具
- think 工具配合优化提示词(航空领域)
航空领域结果
think 工具配合优化提示词在 pass^1 上达到 0.570,而基线为 0.370——相对改进 54%。
航空领域结果表(比例):
| 配置 | 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 |
航空领域的最佳表现来自将 think 工具与优化提示词配对,提供分析客户请求的推理方法示例。文中包含了一个优化提示词示例,展示了将 think 工具用作草稿本的说明,列出适用规则、检查收集的信息、验证策略合规性以及迭代工具结果。提供了两个详细示例——一个用于航班取消,一个用于预订机票并计算行李。
think 工具配合优化提示词显著优于扩展思维模式(后者与未提示的 think 工具表现相似)。航空政策的高复杂度意味着模型从如何思考的示例中获益最多。
零售领域结果
think 工具在没有额外提示词的情况下也达到了最高 pass^1 分数 0.812。
零售领域结果表(比例):
| 配置 | 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 |
零售政策明显比航空领域简单,因此 Claude 仅仅通过拥有思考空间就得到了改进,无需进一步指导。
τ-Bench 分析的关键发现
- 提示词在困难领域非常重要。 仅仅让 think 工具可用可能会稍微提高性能,但将其与优化提示词配对在困难领域产生了显著更好的结果。较简单的领域可能仅通过访问 think 就能受益。
- 跨试验的一致性得到改善。 think 带来的改进在 pass^k 上维持到 k=5,表明该工具有助于 Claude 更有效地处理边缘情况和异常场景。
在 SWE-Bench 上的表现
在评估 Claude 3.7 Sonnet 时,类似的 think 工具被添加到 SWE-bench 设置中,帮助达到了 0.623 的最先进分数。改编后的定义包含一个描述,鼓励在需要复杂推理或头脑风暴时使用,例如头脑风暴修复 bug 或失败测试的方法。
{
"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.",
"input_schema": {
"type": "object",
"properties": {
"thought": {
"type": "string",
"description": "Your thoughts."
}
},
"required": ["thought"]
}
}实验(n=30 个使用 think 工具的样本,n=144 个不使用的样本)显示,包含此工具的独立效果平均提高了 1.6% 的性能(Welch's t-test: t(38.89) = 6.71, p < .001, d = 1.47)。
何时使用 "think" 工具
根据评估结果,Claude 在以下场景中从 think 工具获益最多:
- 工具输出分析 — 当 Claude 需要在行动之前仔细处理之前的工具调用输出,并且可能需要回溯时。
- 策略密集型环境 — 当 Claude 需要遵循详细指南并验证合规性时。
- 顺序决策 — 当每个行动都建立在之前的基础上,且错误代价高昂时。
实现最佳实践
1. 使用领域特定示例进行策略性提示
最有效的方法提供关于何时以及如何使用 think 工具的清晰说明。示例应针对特定用例定制,并应涵盖:
- 推理中预期的详细程度
- 如何将复杂指令分解为可执行步骤
- 常见场景的决策树
- 如何检查是否已收集所有必要信息
2. 将复杂指导放在系统提示词中
当关于 think 工具的说明较长和/或复杂时,将其包含在系统提示词中比放在工具描述本身中更有效。这提供了更广泛的上下文,帮助模型更好地整合思考过程。
何时不使用 "think" 工具
think 工具不适用于所有工具使用情况,并且会增加提示词长度和输出 Token。它在以下方面不提供改进:
- 非顺序工具调用 — 如果 Claude 只需要单次或多次并行工具调用,不太可能有改进。
- 简单的指令遵循 — 当没有太多约束且默认行为足够时。
开始使用
- 用 Agent 式工具使用场景测试 — 从 Claude 目前表现不佳的具有挑战性的用例开始。
- 添加工具定义 — 实现一个针对你的领域定制的 think 工具,并考虑在系统提示词中包含带示例的说明。
- 监控和完善 — 观察 Claude 如何使用该工具,并调整提示词以鼓励更有效的思考模式。
添加此工具的负面影响很小——除非 Claude 决定使用它,否则不会改变外部行为,也不会干扰现有工具或工作流程。
结论
研究表明,think 工具可以显著增强 Claude 3.7 Sonnet 在需要策略遵循和长工具调用链中推理的复杂任务上的表现。它不是万能解决方案,但对于合适的用例,以最小的实现复杂度提供了实质性的好处。
脚注: 虽然 τ-Bench 结果集中在 Claude 3.7 Sonnet 上,但实验表明 Claude 3.5 Sonnet (New) 在相同配置下也能获得性能提升,表明这种改进可以推广到其他 Claude 模型。