think 工具:在复杂工具调用中为 Claude 留出思考空间
官方原文: https://www.anthropic.com/engineering/claude-think-tool
发布日期: 2025 年 3 月 20 日
更新(2025 年 12 月 15 日): Extended thinking 自首次发布后已有改进。Anthropic 现在建议大多数情况下优先使用 Extended thinking;它提供类似收益,且集成度与性能更好。
概览
think 是一项用于提升 Claude 复杂问题处理能力的工具,为模型在复杂任务中进行结构化推理留出专门空间。它与 Extended thinking 不同,曾在 Agent 工具调用、遵循 policy、保持决策一致性和处理多步骤问题上带来提升。
think 工具是什么
think 让 Claude 在形成最终回答的过程中额外执行一次思考步骤。Extended thinking 处理的是生成回复前的推理;而在 Claude 已开始生成回复后,think 允许它暂停,检查是否已有足够信息继续。它特别适合长链工具调用和持续较久的多步骤对话。
当 Claude 无法仅凭用户问题获得所有信息,必须分析工具调用返回的外部数据时,think 最有用。它的推理范围通常不如 Extended thinking 全面,更关注模型刚刚发现的新信息。
适用建议:
- Extended thinking: 更适合简单工具调用、非顺序工具调用、直接遵循指令,以及不调用工具的编码、数学、物理等任务。
think: 更适合复杂工具调用、长调用链中的输出分析、规则细密的 policy 环境,以及每一步都依赖前一步的顺序决策。
示例实现
{
"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 是针对真实客服场景的综合 benchmark,用于评估模型如何在真实对话中遵循复杂 policy,并使用工具访问、修改环境数据库。
主要指标是 pass^k:对某项任务,连续 k 次独立运行都成功的概率,再对所有任务取平均。它不同于 pass@k;后者只看 k 次尝试中是否至少有一次成功,pass^k 衡量的是一致性与可靠性。
评测配置
评测比较了:无 think、无 Extended thinking 的 baseline;仅 Extended thinking;仅 think;以及在航空领域使用优化 prompt 的 think。
航空领域
带优化 prompt 的 think 在 pass^1 上达到 0.570,而 baseline 为 0.370,相对提升 54%。
| 配置 | 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 配置优化 prompt,其中示范如何分析客户请求:把工具当作 scratchpad,列出适用规则,检查已收集信息,验证是否符合 policy,并迭代分析工具结果。文中给出航班取消和含行李计算的机票预订两个详细例子。
航空 policy 的复杂度高,因此仅提供思考空间不足够;用例化方式教会模型“如何思考”效果最好。
零售领域
零售 policy 更简单,单独提供 think 就取得最高的 pass^1,达到 0.812。
| 配置 | k=1 | k=2 | k=3 | k=4 | k=5 |
|---|---|---|---|---|---|
think,无额外 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 |
τ-Bench 分析要点
τ-Bench 的结论是:困难领域中,prompt 设计至关重要;较简单领域只要有额外思考空间就可能受益。并且 think 对 pass^k 的改进能延续到 k=5,说明它有助于处理 edge case 和异常场景。
在 SWE-bench 上的表现
评估 Claude 3.7 Sonnet 时,团队也把类似的 think 加入 SWE-bench 配置,帮助取得 0.623 的先进成绩。改写后的定义提示模型在复杂推理或 brainstorming 时使用,例如思考如何修复 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"]
}
}实验中,使用 think 的样本数为 30,未使用的样本数为 144。单独加入该工具平均带来 1.6% 提升(Welch's t-test:t(38.89) = 6.71, p < .001, d = 1.47)。
何时使用 think
- 分析工具输出: 行动前必须认真处理前序工具结果,且可能需要回退时。
- 规则密集型环境: 需要遵循详细 guideline 并验证合规性时。
- 顺序决策: 每一步都建立在前一步上,且错误代价较高时。
实现建议
用领域示例引导使用方式
最有效的方式是清楚说明何时、怎样调用 think。示例应覆盖推理所需的细节程度、如何把复杂指令拆为可执行步骤、常见情景的决策树,以及如何确认信息已经收集齐全。
把复杂指导放入 system prompt
当 think 的说明很长或很复杂时,放进 system prompt 比只写在工具 description 中更有效。这样模型能在更完整的上下文中整合思考过程。
何时不使用 think
think 会增加 prompt 长度和输出 tokens,并非所有工具任务都有收益:
- 非顺序工具调用: 仅需单次或并行调用时,通常没有明显提升。
- 简单指令遵循: 约束很少、默认行为已足够时。
开始使用
- 从 Claude 当前表现较弱的困难 agentic tool-use 场景开始测试。
- 实现适合本领域的
think,并考虑在 system prompt 中加入带示例的使用说明。 - 观察实际调用方式,持续调整 prompt,引导更有效的推理模式。
该工具的副作用较小:除非 Claude 主动调用,否则不会改变外部行为,也不会干扰现有工具和工作流。
结论
think 曾显著提升 Claude 3.7 Sonnet 在复杂 policy 和长工具调用链中的表现,但不是通用解法。对合适场景,它能以较低实现复杂度带来可观收益。虽然 τ-Bench 结果以 Claude 3.7 Sonnet 为主,Claude 3.5 Sonnet (New) 在相同配置下也得到提升,说明这种效果具有一定可迁移性。