本页目录16
- 手动扩展思维通过 `thinking: {type: "enabled", budget_tokens: N}` 开启,`budget_tokens` 最小 1024,且必须小于 `max_tokens`(交错思维除外)
- 该模式在 Claude 4.6 系列已废弃(仍可用),Claude 4.7 及更新模型直接拒绝并返回 400 错误,应迁移到 `thinking: {type: "adaptive"}` + `output_config.effort`
- 更改 `budget_tokens` 会使提示缓存失效,应在同一对话生命周期内保持预算值稳定
- 交错思维在不同模型代际支持差异较大,需按模型分别判断是否需要 `interleaved-thinking-2025-05-14` beta 头
- 可通过响应中的 `usage.output_tokens_details.thinking_tokens` 字段追踪实际思维 token 消耗
本文是对 Anthropic 官方参考页的中文整理,完整与最新内容以原文为准:https://platform.claude.com/docs/en/build-with-claude/extended-thinking
概述与弃用状态
扩展思维(manual extended thinking)通过在请求中设置固定的思维 token 预算,让 Claude 在给出最终答案前先进行内部推理。适用于需要可预测延迟或需要精确控制思维成本的场景。
| 场景 | 状态 |
|---|---|
thinking.type: "enabled" + budget_tokens(手动模式) | 在 Claude 4.6 系列模型上已弃用,但仍可正常请求成功 |
| Claude 4.7 及更新模型 | 不支持手动扩展思维,使用该参数会返回 400 错误 |
| Claude 4.5 及更早支持思维的模型 | 扩展思维是唯一可用的思维模式 |
| Claude Mythos Preview | 同时支持手动扩展思维与自适应思维两种模式 |
若请求返回 400 错误,且错误信息以「"thinking.type.enabled" is not supported」开头,说明该模型使用的是自适应思维模式,应参考本文「迁移到自适应思维」章节。
凡两种模式都可用的模型,官方建议优先使用自适应思维(adaptive thinking)。
支持的模型
各模型对扩展思维的支持情况(含仅支持扩展思维的模型列表),参见按模型配置对照表。
基本用法
请求体中加入 thinking 对象即可启用:
{
"model": "claude-sonnet-4-6",
"max_tokens": 16000,
"thinking": {
"type": "enabled",
"budget_tokens": 10000
},
"messages": [ ... ]
}
响应中的 content 数组会包含 type: "thinking" 的思维块(内容在 thinking 字段中,为摘要形式)和 type: "text" 的正文文本块。
budget_tokens 规则
| 规则 | 说明 |
|---|---|
| 最小值 1,024 tokens | 小于该值 API 会拒绝请求 |
必须小于 max_tokens | 思维 token 计入该轮的 max_tokens 限额,需为最终回答留出空间 |
| 交错思维例外 | 在交错思维场景下,budget_tokens 可以超过 max_tokens,因为预算覆盖同一助手轮次内的所有思维块 |
| 不支持缓存预热 | 由于 budget_tokens 必须小于 max_tokens,扩展思维无法与 max_tokens: 0(缓存预热)组合使用 |
budget_tokens 是目标值而非严格上限——Claude 实际用量可能远小于预算;max_tokens 才是输出总量的硬上限。
在 Claude Opus 4.5(唯一支持effort的纯扩展思维模型)上,effort 决定整体响应形态,budget_tokens 决定思维深度,两者需同时设置。
预算调优建议
| 任务类型 | 建议起点 |
|---|---|
| 简单任务 | 从接近 1,024 的最小值开始,逐步增加寻找最优区间 |
| 复杂任务 | 从 16,000 tokens 起,依据延迟与质量需求调整 |
| 超过 32k 的思维预算 | 建议改用批处理(batch processing),否则长时间运行的请求可能触发系统超时或连接数限制 |
预算越高通常推理越全面,但收益递减,且延迟增加。
用量追踪
响应中 usage.output_tokens_details.thinking_tokens 字段记录被计费输出 token 中用于内部推理的部分。流式返回时,该字段只出现在最后一个 message_delta 事件中。
手动模式下的交错思维(Interleaved Thinking)
交错思维允许 Claude 在同一助手轮次内的工具调用之间进行思考,对每个工具结果推理后再决定下一步。概念与轮次结构参见思维总览页。
| 模型 | 手动模式下的交错思维支持 |
|---|---|
| Claude Opus 4.5、Claude Sonnet 4.5、Claude Opus 4.1、Claude Opus 4、Claude Sonnet 4 | 需添加 beta 头 interleaved-thinking-2025-05-14 |
| Claude Sonnet 4.6 | 该 beta 头配合手动 type: "enabled" 仍可用但已弃用,建议改用自适应思维(无需该头) |
| Claude Opus 4.6 | 手动模式完全不支持交错思维,需切换为 thinking: {type: "adaptive"} |
| Claude Haiku 4.5 | 不支持交错思维;Claude API 会接受该 beta 头但忽略之 |
其他要点:
- 在交错思维场景下,
budget_tokens可超过max_tokens(见上文预算规则例外) - 交错思维仅支持通过 Messages API 使用的工具
各平台对 beta 头的处理
| 平台 | 行为 |
|---|---|
| Claude API、AWS 上的 Claude Platform | 在任意模型上接受 interleaved-thinking-2025-05-14 头,在不支持的模型上忽略它 |
| Amazon Bedrock、Google Cloud(Vertex AI) | 同样在任意模型上接受该头且不报错,在不支持交错思维的模型上忽略它 |
注意:「接受」不等于「生效」——在拒绝 type: "enabled" 的模型(4.7 及更新)或手动模式不支持交错思维的模型(Claude Opus 4.6)上,该头在手动模式下不产生效果,此时是自适应思维自动完成交错。
手动模式下的轮次结构
通用的轮次结构规则(单轮工具调用循环、轮次中途配置冲突处理、跨轮次切换思维开关)参见思维总览页 - 工具使用中的思维。
手动模式额外要求:启用思维的请求中,最后一个助手轮次必须以思维块开头(自适应思维取消了该要求)。跨轮次更改思维配置会使提示缓存失效(见下节)。
手动模式下的提示缓存
除思维模式通用的缓存行为(参见思维与提示缓存)外,手动模式额外规则:
跨请求更改 budget_tokens 会使缓存断点失效,原理与切换思维模式相同——因为预算值会被渲染进提示词中。
| 缓存断点类型 | 更改 budget_tokens 后的影响 |
|---|---|
| 消息级(message-level)断点 | 总是失效(miss) |
| 工具与系统提示断点 | 是否失效取决于模型在何处渲染该配置 |
实测示例(Claude Sonnet 4.6,消息级缓存)
| 请求 | 说明 | usage 关键字段 |
|---|---|---|
| 第一次请求 | 建立缓存 | cache_creation_input_tokens: 1370, cache_read_input_tokens: 0, input_tokens: 17, output_tokens: 700 |
| 第二次请求 | 思维参数不变(预期命中缓存) | cache_creation_input_tokens: 0, cache_read_input_tokens: 1370, input_tokens: 303, output_tokens: 874 |
| 第三次请求 | 预算从 4,000 改为 8,000(预期缓存失效) | cache_creation_input_tokens: 1370, cache_read_input_tokens: 0, input_tokens: 747, output_tokens: 619 |
建议:在同一缓存对话的生命周期内选定一个预算值并保持不变。
与思维模式无关的共享机制
以下内容在思维总览页统一说明,手动模式同样适用:
迁移到自适应思维(Adaptive Thinking)
| 情况 | 是否需要迁移 |
|---|---|
| 模型仅支持扩展思维(Claude Sonnet 4.5、Claude Opus 4.5、Claude Haiku 4.5 及更早的 Claude 4 系列) | 暂不需要,type: "adaptive" 会返回 400 错误,应继续使用 budget_tokens 直到升级模型 |
| 使用 Claude Opus 4.6 或 Claude Sonnet 4.6 | 需要迁移,budget_tokens 已弃用 |
| 迁移到 Claude Opus 4.7、Claude Opus 4.8、Claude Opus 5、Claude Sonnet 5、Claude Fable 5、Claude Mythos 5 | 必须迁移,type: "enabled" 会返回 400 错误 |
迁移映射
迁移前:
{
"model": "claude-sonnet-4-6",
"max_tokens": 16000,
"thinking": {
"type": "enabled",
"budget_tokens": 10000
}
}
迁移后:
{
"model": "claude-sonnet-4-6",
"max_tokens": 16000,
"thinking": {
"type": "adaptive"
},
"output_config": {
"effort": "high"
}
}
即:移除 budget_tokens,设置 thinking: {type: "adaptive"},改用 output_config.effort 控制推理深度。effort: "high" 与 API 默认值一致,省略该字段效果相同。
行为差异(不仅是语法变化)
| 维度 | 手动模式(固定预算) | 自适应模式 |
|---|---|---|
| 是否思考 | 每次请求都思考 | 由模型按每次请求自行判断是否思考及思考多少;在较低 effort 设置下,遇到简单输入可能完全跳过思考 |
interleaved-thinking-2025-05-14 beta 头 | 部分模型需要 | 迁移后可移除,自适应思维自动交错,Claude API 在这些模型上会忽略该头 |
思维块保留差异
| 模型 | 是否在上下文中保留先前轮次的思维块(并计费为输入) |
|---|---|
| Claude Opus 4.5、编号 4.6 及以上的模型 | 保留 |
| Claude Sonnet 4.5、Claude Haiku 4.5 及更早模型 | 剥离(不保留) |
详见按模型的思维块保留说明。
切换思维模式属于思维配置变更,切换后第一个请求会使缓存断点失效(与「手动模式下的提示缓存」章节所述规则相同)。