过去一年里,Claude 的“思考”方式发生了很大的形态变化。旧的扩展思考(extended thinking)由人来指定模型可以花多少 token 去推理。当前一代则以自适应思考(adaptive thinking)取而代之——是否思考、思考多深,由模型自己决定。而且从 Claude Opus 5 开始,思考已默认开启,“不配置就等于不思考”这条旧假设也成了过去式。

本文将逐一梳理扩展思考与自适应思考究竟差在哪里、各模型的行为有何不同,以及迁移代码时最容易踩中的陷阱——400 错误、输出被截断、账单悄悄上涨。所有内容均以 Anthropic 官方文档为依据。

THINKING: EXTENDED → ADAPTIVE

从“人来设定深度”到“模型自己决定”

三步看懂这次代际更替

扩展思考(旧)
budget_tokens: 10000
思考预算由人来指定
自适应思考(现行)
type: "adaptive"
是否思考、思考多少由模型判断
Opus 5 及之后
思考默认开启
深度进入用 effort 调节的时代
来源:Anthropic 官方文档“Thinking”与“Extended thinking”(截至 2026 年 8 月)

1. 思考是什么

思考(thinking),是 Claude 在动笔写最终答案之前,先用自己的话把问题过一遍的阶段。它会复述问题、尝试多条思路、核对中间结果、放弃走不通的路径——这个过程会以 thinking 内容块的形式,在正式回答之前生成出来。在中间过程的质量决定答案质量的任务上收益最大:数学、编程、分析,以及长时间运行的智能体(agent)工作。

不过它并不免费。正如 Anthropic 的“Thinking”文档所明言,Claude 用于推理的 token 按输出 token 计费,并计入 max_tokens——而且即使在思考文本根本不会返回给你的配置下,计费也完全相同(见第 6 节)。设计思考配置,既是质量问题,也同样是成本与延迟问题

2. 扩展思考时代——由你设定 budget_tokens

第一代形态是扩展思考。在请求里附上 thinking: {"type": "enabled", "budget_tokens": N},Claude 就会在这个预算内先推理再作答。每一次请求,思考多少都由人来指定。按官方文档,规则如下:

  • 最少 1,024 个 token。更小的值会被 API 拒绝
  • 必须小于 max_tokens——思考计入其中,必须给答案留出空间
  • 预算是目标值,不是硬性上限。实际用量因任务而异,Claude 也常常远在预算耗尽之前就结束思考
  • 思考预算超过 32,000 时,Anthropic 建议改用批处理以避免超时

这个设计的问题很直接:合适的预算因任务而异,人无法事先猜准。简单的问题可能烧光你分配的预算;难题又可能因预算不足而喂不饱。而且改动预算值会让提示词缓存(prompt cache)失效——文档还用一个实测例子演示了这一点。

3. 转向自适应思考——由模型决定

2026 年推出的自适应思考取代的正是这一切。配置只有一行:thinking: {"type": "adaptive"}要不要思考、思考多深,由 Claude 根据请求看上去的难度自行判断。简单的输入跳过思考立即作答;难题则展开深入推理。

迁移按照 Anthropic“Extended thinking”文档列出的时间表推进:budget_tokens 在 Claude Opus 4.6 / Sonnet 4.6 上被弃用(在那里仍然可用),而从 Claude Opus 4.7 起的模型会以 400 错误直接拒绝它。旧代码一旦指向新模型,就会在这里停下:

# 旧写法:扩展思考(在 Opus 4.7 及之后返回 400 错误)
"thinking": {"type": "enabled", "budget_tokens": 10000}
→ 400: "thinking.type.enabled" is not supported ...

# 新写法:自适应思考(深度通过 effort 设定)
"thinking": {"type": "adaptive"},
"output_config": {"effort": "high"}

改写本身很小——删掉 budget_tokens、切换到 adaptive、把深度控制交给 effort。但正如文档所警告的,这是行为上的变化,而不只是语法上的变化。固定预算时代,Claude 每次请求都会思考;而在自适应思考下,较低的 effort 档位遇到简单输入时,可能完全跳过思考

4. 各模型的思考行为一览

麻烦的地方在于,“默认是否开启”和“能否关闭”因模型而异。下面把官方文档浓缩成一张表。

模型 什么都不配置时 关闭思考 budget_tokens
Claude Fable 5 / Mythos 5 思考开启(始终) 不可(400) 不可(400)
Claude Opus 5 思考开启(自适应) 仅限 effort high 及以下
与 xhigh / max 组合:400
不可(400)
Claude Sonnet 5 思考开启(自适应) 可以 不可(400)
Claude Opus 4.8 / 4.7 不思考(需显式设置 adaptive 才开启) 可以 不可(400)
Claude Opus 4.6 / Sonnet 4.6 不思考(需显式设置 adaptive 才开启) 可以 已弃用(仍可用)
Sonnet 4.5 / Haiku 4.5 及更早 不思考 —(默认本来就是关闭) 必需(唯一的思考模式;adaptive 返回 400)

来源:Anthropic“Thinking”“Extended thinking”(截至 2026 年 8 月)

实践中有两点最要紧。第一,默认值在 Opus 5 这一代翻转成了“思考开启”——如果你原本在 Opus 4.8 上关着思考低成本地跑任务,只改一个模型 ID,输出 token 就会多出思考的那一份,答案在 max_tokens 处被截断,或者账单上涨(详见我们对 Opus 5 破坏性变更的解读)。第二,仍在使用 budget_tokens 的只剩旧代模型——只要停留在 Sonnet 4.5 或更早的模型上就无需迁移任何东西;等换到新模型时再改写即可。

5. 深度改由 effort 调节

“预算”退场之后,思考深度通过 output_config: {"effort": ...} 来调整——共五档,low / medium / high / xhigh / max,其中 high 是 API 默认值。effort 影响的不只是思考深度:它还左右工具调用的合并程度和前置说明的多少,也就是整体的 token 开销

low / medium

例行任务、分类、子智能体。简单输入可能跳过思考,因此又快又省

high(默认)至 xhigh

一般工作用 high;编程与智能体则以 xhigh 作为 Anthropic 推荐的起点

max

用于正确性压倒成本的问题。结果未必总是最好,所以不要一直钉死在这一档

五个档位各自意味着什么、Claude Code 里的滑块、设置如何持久化,都写在我们的 effort 设置指南里。文档中还有一条与缓存相关的提醒:在自适应模式下,effort 的取值会被渲染进提示词,因此改动它会让提示词缓存失效——与扩展思考时代“改预算就打穿缓存”是同一个形状。不要在对话中途来回切换。

6. 看不见的思考也一样计费

思考在外部如何呈现,由 display 字段控制。它有两个取值:

  • "summarized"——thinking 块中携带推理过程的可读摘要Claude Opus 4.6 / Sonnet 4.6 及更早模型的默认值
  • "omitted"——thinking 块返回时里面是空字符串Fable 5 / Mythos 5 / Opus 5 / Sonnet 5 / Opus 4.8 / 4.7 的默认值

这里埋着两个陷阱。第一,模型越新,默认越倾向于“不展示”——把一个向用户流式展示推理过程的应用迁到新模型上,体验就会变成长时间的沉默之后突然蹦出答案。想让它可见就明确写出来:thinking: {"type": "adaptive", "display": "summarized"}。第二,display 改变的只是可见性——计费完全一样。文档说得很明白:即便是 omitted,思考 token 也照全额计费;省下的是延迟,不是钱。而且在任何配置下你都拿不到原始思考链——summarized 展示的也只是摘要。

衡量思考花了你多少钱:响应字段 usage.output_tokens_details.thinking_tokens 报告已计费的输出 token 中有多少属于内部推理。流式传输时,它只出现在最后一个 message_delta 事件上。“看不见思考”绝不等于“没有在思考”——迁移之后记得检查这个字段。

还有一件实践中很重要的事:thinking 块的处理。在多轮对话和工具使用中,要把上一个响应里的 thinking 块原封不动地传回去。对它们做任何改动都会触发 400——Claude Code 用户遇到的“thinking 块签名无效”错误,正是出自这套机制。

7. 关闭思考的陷阱

“我们更在意速度,把思考关掉吧”是个正当的选择——但在 Opus 5 上它是带条件的。按官方文档:

✅ 允许

关闭思考 + effort low / medium / high

❌ 400 错误

关闭思考 + effort xhigh / max(每个请求都会校验)

🔧 推荐

不要关——改为把 effort 降到 low / medium

即便请求能通过,也有副作用。Anthropic 在文档中写明:思考被关闭时,Opus 5 可能把工具调用当作正文文本写出来(工具从未运行,回合看起来却是成功的),还可能把内部 XML 标签泄漏到输出里。如果你在构建智能体,保持思考开启、调低 effort 才是安全路径——而且它省成本的方向也大体相同。

8. 在工具调用之间思考——交错思考

思考并不只发生在“作答之前的那一次”。借助交错思考(interleaved thinking),Claude 也会在工具调用之间进行推理,先掂量每个工具的返回结果,再决定下一步——读完搜索结果后修订计划,读完上一条命令的输出后选择下一条命令。这正是优秀智能体行为背后的机制。

这里同样存在代际差异。在旧的扩展思考体系里,这需要 beta 请求头 interleaved-thinking-2025-05-14;而在自适应思考下它是自动的,不再需要该请求头(文档写明“自适应思考会自动交错”,并表示迁移后可以去掉这个请求头)。迁到自适应思考,代码又能少一项配置。

9. 需要速度时:快速模式(fast mode)

如果你既想要思考的质量、又不想等那么久,选项是快速模式(fast mode)。按 Claude Code 关于 fast mode 的文档,它不是降级到另一个模型:跑的仍是同一个 Claude Opus,只是换成速度优先的配置。输出最高约快 2.5 倍,价格翻倍(Opus 5 和 Opus 4.8 均为每百万 token 输入 $10 / 输出 $50)。仅 Opus 5 与 Opus 4.8 可用;Opus 4.7 的快速模式已于 2026 年 7 月 24 日移除。

在 Claude Code 里:/fast

在 CLI 里输入 /fast 即可切换(VS Code 扩展不支持)。官方建议:交互式快速迭代时开启;成本比延迟更重要时关闭。

在 API 上:研究预览版

仅限 Claude API——Amazon Bedrock、Google Cloud、Microsoft Foundry 上不可用。另外注意,切换速度档会使提示词缓存失效。

思考、effort、快速模式各司其职:思考决定“要不要推理”,effort 决定“推理多深”,快速模式决定“同样的推理多快送到”。在伸手去“太慢了,把思考砍掉”之前,记住你手里还有另外两张牌:调低 effort,或者打开快速模式。

总结

  • 扩展思考(budget_tokens)是旧方式。在 Opus 4.6 / Sonnet 4.6 上已弃用,从 Opus 4.7 起返回 400 错误——但在旧代模型(Sonnet 4.5 / Haiku 4.5 等)上仍是唯一的思考模式
  • 自适应思考是当前方式。是否思考、思考多少由模型决定;深度用 effort 调节(五档,默认 high)
  • Opus 5 / Sonnet 5 / Fable 5 默认开启思考。Fable 5 无法关闭;Opus 5 仅在 effort high 及以下可以关
  • 看不见的思考也要付费。新一代的默认值是 display: "omitted"(空的 thinking 块)。用 usage.output_tokens_details.thinking_tokens 来测量
  • 关闭思考有副作用(工具调用被写成文本、标签泄漏)。调低 effort 比直接禁用更安全
  • 交错思考在自适应模式下自动生效——不再需要 beta 请求头
  • 需要速度?用快速模式(约 2.5 倍速、2 倍价格,仅 Opus 5/4.8;在 Claude Code 里用 /fast 切换)

常见问题

Q. 我设置了 budget_tokens,结果收到 400 错误。

A. 从 Opus 4.7 起的模型(包括 Opus 5 / Sonnet 5 / Fable 5)不再接受 thinking: {"type": "enabled", "budget_tokens": N}。改写为 thinking: {"type": "adaptive"},并用 output_config: {"effort": ...} 控制深度。如果继续停留在 Sonnet 4.5 / Haiku 4.5 等旧代模型上,则无需改写。

Q. 切换到自适应思考后,回答总在半途被截断。

A. 思考 token 计入 max_tokens。尤其是 Opus 5 默认开启思考,那些为旧模型精打细算过 max_tokens 的代码,现在预算被思考挤占,答案随之被截断。给 max_tokens 留出更多余量,或者调低 effort。

Q. thinking 块返回来是空的,是哪里坏了吗?

A. 这是规格本身。在 Opus 5 / Sonnet 5 / Fable 5 / Opus 4.8 / 4.7 上,display 的默认值是 "omitted"(空的 thinking 块)。想看到摘要,就显式设置 thinking: {"type": "adaptive", "display": "summarized"}。两种设置的计费完全相同。

Q. 把思考关掉,就能省下那笔钱吗?

A. 思考 token 本身确实省下了。但在 Opus 5 上它不能与 effort xhigh/max 组合(400 错误),而且即使能用,Anthropic 也在文档中写明了副作用:工具调用被当成纯文本写出、内部标签泄漏进输出。对智能体工作负载来说,保持思考开启、把 effort 降到 low / medium,省得更安全。

Q. 在 Claude Code(或聊天应用)里需要配置思考吗?

A. 不需要——Claude Code 和 claude.ai 会替你管理思考,没有任何 API 参数要设。你能碰到的只有 effort 设置/fast(快速模式开关);思考的开关机制永远不会暴露出来。

注:本文中的规格与数字基于 Anthropic 文档“Thinking”“Extended thinking”,以及 Claude Code 文档“Fast mode”(均截至 2026 年 8 月)。规格会变化;在据此构建之前,请先核对官方文档的最新表述。