目录
过去一年里,Claude 的“思考”方式发生了很大的形态变化。旧的扩展思考(extended thinking)由人来指定模型可以花多少 token 去推理。当前一代则以自适应思考(adaptive thinking)取而代之——是否思考、思考多深,由模型自己决定。而且从 Claude Opus 5 开始,思考已默认开启,“不配置就等于不思考”这条旧假设也成了过去式。
本文将逐一梳理扩展思考与自适应思考究竟差在哪里、各模型的行为有何不同,以及迁移代码时最容易踩中的陷阱——400 错误、输出被截断、账单悄悄上涨。所有内容均以 Anthropic 官方文档为依据。
从“人来设定深度”到“模型自己决定”
三步看懂这次代际更替
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 开销。
例行任务、分类、子智能体。简单输入可能跳过思考,因此又快又省
一般工作用 high;编程与智能体则以 xhigh 作为 Anthropic 推荐的起点
用于正确性压倒成本的问题。结果未必总是最好,所以不要一直钉死在这一档
五个档位各自意味着什么、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
关闭思考 + 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 日移除。
在 CLI 里输入 /fast 即可切换(VS Code 扩展不支持)。官方建议:交互式快速迭代时开启;成本比延迟更重要时关闭。
仅限 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 月)。规格会变化;在据此构建之前,请先核对官方文档的最新表述。