博客

Claude Code 报「thinking.type.enabled is not supported」等 400 思考错误:原因和解决办法

一句话答案

API Error: 400 的报错里提到 thinking,意思是 Claude Code 请求里的思考(thinking)设置和模型能接受的不一致。对照下表找到你的报错:

报错里包含 意思 先试什么
"thinking.type.enabled" is not supported for this model Claude Code 给只支持自适应思考的模型发了旧的固定预算思考模式 claude update
adaptive thinking is not supported on this model 反过来:自适应思考发到了只支持固定预算的模型上 查清实际处理请求的是哪个模型
Effort '...' isn't available with thinking turned off 关了思考,effort 又高于 high /effort high,或者把思考重新打开
max_tokens must be greater than thinking.budget_tokens 思考预算把回答的空间占没了 调高 CLAUDE_CODE_MAX_OUTPUT_TOKENS,或调低 MAX_THINKING_TOKENS
thinking blocks ... cannot be modified 对话历史和 API 返回的不一致 /rewind
Invalid data in redacted_thinking block 之前某一轮带着 API 不接受的思考块 claude update,还不行就 /clear

以上来自 Claude Code 错误说明 和 Anthropic 的 思考问题排查指南。如果你用的网关有自己的模型名,也请看下面网关那一节。

哪些模型接受哪种思考设置

现在的 Claude 模型有两种思考模式。自适应思考(thinking: {type: "adaptive"})由模型自己决定想多少,用 effort 档位来调节。扩展思考是更早的手动模式,用固定的 budget_tokens。按 Anthropic 指南:

模型 思考模式 会被 400 拒绝的 thinking.type
Fable 5.1、Fable 5、Opus 5.5、Opus 5、Opus 4.8、Opus 4.7、Sonnet 5.5、Sonnet 5、Haiku 5.5 只支持自适应 "enabled"(其中几个也拒绝 "disabled")
Opus 4.6、Sonnet 4.6 自适应,以及扩展(已弃用) 无
Opus 4.5、Sonnet 4.5、Haiku 4.5 只支持扩展 "adaptive"

有些模型还不能关闭思考。按 Claude Code 模型配置文档,在 Opus 5.5、Sonnet 5.5、Haiku 5.5 和 Fable 系列上,alwaysThinkingEnabled: false 和 MAX_THINKING_TOKENS=0 都不起作用。

「"thinking.type.enabled" is not supported for this model」

text
API Error: 400 ... "thinking.type.enabled" is not supported for this model. Use "thinking.type.adaptive" and "output_config.effort" to control thinking behavior.

Claude Code 错误说明里的解释是:你的 Claude Code 版本低于所选模型要求的最低版本。文档列出的版本:

模型 Claude Code 最低版本
Opus 4.7 v2.1.111
Opus 4.8 v2.1.154
Sonnet 5 v2.1.197
Opus 5 v2.1.219
Opus 5.5 v2.1.280
Sonnet 5.5 v2.1.284

解决办法:

  1. 运行 claude update,然后重启 Claude Code。
  2. 如果你在 stable 发布通道,更新只会到最新的 stable 版本,可能仍然低于上面的版本。切到 latest 通道再更新。
  3. 暂时没法升级,就运行 /model 换成 Opus 4.6 或 Sonnet 4.6。
  4. 如果是 Agent SDK 报的,升级 SDK 包。错误说明里列了各模型要求的 SDK 最低版本。

Opus 4.7 刚出来时这个报错很常见。在 anthropics/claude-code#49219 里,v2.1.110 用 /model claude-opus-4-7 切模型就报这个错,维护者回复说 v2.1.111 已修复。

「adaptive thinking is not supported on this model」

text
API Error: 400 adaptive thinking is not supported on this model

这是反过来的情况。按 Anthropic 指南,模型只支持扩展思考时会报这个错,比如 Opus 4.5、Sonnet 4.5、Haiku 4.5。

Claude Code 根据模型 ID 来决定思考设置。如果 ID 写的是新模型,实际处理请求的却是旧模型,请求里就可能带着模型不接受的自适应思考。查一下你的网关或代理把这个 ID 映射到了哪个模型,换一个它直接提供的 ID。anthropics/claude-code#89633(仍未关闭)报告说,一个会话里每次调用 WebSearch 工具都报这个错,换了主模型也一样。

「Effort isn't available with thinking turned off」

text
API Error: Effort 'xhigh' isn't available with thinking turned off on this model · run /effort high to continue, or turn thinking back on (unset MAX_THINKING_TOKENS=0)

你关掉了思考,同时把 effort 设得高于 high。有些模型(比如 Opus 5)不接受这种组合。

解决办法: 用 /effort high 降低 effort,或者重新打开思考:去掉 MAX_THINKING_TOKENS,或从设置里删掉 "alwaysThinkingEnabled": false。非交互运行时,用 --effort high 或 effortLevel 设置。

v2.1.242 之前,Claude Code 显示的是 API 的原始提示:

text
API Error: 400 output_config.effort 'xhigh' is not supported when thinking is disabled on this model. Use effort 'high' or below, or enable thinking.

「max_tokens must be greater than thinking.budget_tokens」

text
API Error: 400 ... max_tokens must be greater than thinking.budget_tokens

用固定思考预算时,budget_tokens 必须小于 max_tokens,这样预算之外总能留出写回答的空间。只有 Claude Code 使用固定预算时才会碰到:模型只支持扩展思考,或者在 Opus 4.6、Sonnet 4.6 上设置了 CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING=1。在自适应模型上,Claude Code 会忽略 MAX_THINKING_TOKENS 的正数值。

解决办法:

  • 把 CLAUDE_CODE_MAX_OUTPUT_TOKENS 调到高于思考预算,或者调低 MAX_THINKING_TOKENS。
  • 两个值都要查:终端环境变量里有没有,~/.claude/settings.json 的 env 里有没有。

Claude Code 自己会把 MAX_THINKING_TOKENS 限制在比请求最大输出少 1 个 token。对它无法识别的模型 ID,最大输出默认 32,000、上限 128,000(见 环境变量说明)。anthropics/claude-code#8756 报告在 Bedrock 经 LiteLLM 代理时偶尔会出这个错,再试一次往往就好了。

思考块和对话历史相关的报错

text
API Error: 400 ... thinking blocks ... cannot be modified
API Error: 400 ... Invalid `data` in `redacted_thinking` block

API 会检查之前的思考块是否原样传回。这类报错说明对话历史已经对不上了。

  • 思考块不能修改: 运行 /rewind,或按两次 Esc,回到出问题那一轮之前的检查点。用 Opus 4.7 或 Opus 4.8 的话,先 claude update:错误说明里写着,v2.1.156 之前的版本在正常调用工具时也可能触发,而且 /rewind 清不掉。
  • redacted_thinking 数据无效: 从 v2.1.282 起,Claude Code 会自动去掉之前的思考并重试一次。更早的版本之后每一轮都会失败,所以先 claude update 再恢复会话。还不行就 /clear 开一个不带这个块的新对话。
  • 经过代理时: Anthropic 指南说,最常见的原因是代码丢掉了 redacted_thinking 块,或者重新拼装了 assistant 消息。会转换或改写消息的代理也会造成同样的问题。

用网关或自定义模型 ID 时

Claude Code 是靠把模型 ID 和已知规则做匹配,来决定开不开 effort 档位和思考的。文档提到,匹配不上的 ID 可能让模型本来支持的功能保持关闭。也可能反过来出错:anthropics/claude-code#52541 报告,Cowork 接第三方网关时,给 claude-opus-4.7 发了 thinking.type.enabled,被模型拒绝,而 Opus 4.6、Sonnet 4.6 正常。

怎么处理:

  1. 留意启动警告。 如果 Claude Code 提示 Model "..." isn't recognized,说明它不认识这个 ID。
  2. 先更新。 比你的 Claude Code 版本更新的模型,它是认不出来的。
  3. 把网关的名字映射到模型。 在设置里加一条 modelOverrides,比如 "claude-opus-4-8": "my-gateway-opus",Claude Code 就会把这个 ID 当成对应的模型来处理(见 模型配置文档)。
  4. 如果网关连 thinking 参数本身都拒绝, 设置 CLAUDE_CODE_DISABLE_THINKING=1。环境变量说明把它描述为给拒绝该参数的代理和网关用的兼容选项。默认会思考的模型仍然可能思考。

ANTHROPIC_DEFAULT_*_MODEL_SUPPORTED_CAPABILITIES 这组变量可以直接声明模型支持哪些功能,但它们只在 Amazon Bedrock、Google Cloud Agent Platform 和 Microsoft Foundry 上生效。ANTHROPIC_BASE_URL 指向网关时,只有对应的 _NAME 和 _DESCRIPTION 变量生效。

通过 TeamoRouter 使用 Claude Code

TeamoRouter 是一个 API 网关,一个 Key 可以调 Claude、GPT、Gemini、DeepSeek。Claude 走原生 Anthropic 协议(/v1/messages),Claude Code 只需要一个 Base URL 和一个 Key。没有订阅,按用量付费。

  1. 在 TeamoRouter 控制台 创建 API Key,Key 以 sk-teamo- 开头。
  2. 充值,最低 $5。 充值弹窗支持银行卡;也可以点 「USDT支付」,用 USDT、USDC 或 ETH,从任意交易所 App 转账——收银台会按金额显示可用网络(BEP20 从 $5 起就能用)。步骤见 用 USDT 充值。
  3. 设置两个环境变量(macOS / Linux):
bash
export ANTHROPIC_BASE_URL=https://api.teamorouter.com
export ANTHROPIC_AUTH_TOKEN="你的 TeamoRouter API Key"
claude

Base URL 后面不要加 /v1。可用的模型 ID 用 GET /v1/models 查。如果启动时某个模型出现 isn't recognized 警告,先运行 claude update,再按上一节用 modelOverrides 做映射。Windows 命令和模型设置见 安装与配置 Claude Code。

常见问题

重试有用吗? 一般没用。思考设置和模型不匹配,每次都会以同样的方式失败,直到你更新 Claude Code、换模型或改设置。

直接把思考关掉行不行? 不是所有模型都行。Opus 5.5、Sonnet 5.5、Haiku 5.5 和 Fable 系列不能关闭思考。能关的模型上,关掉思考的同时 effort 高于 high,又会触发上面的 effort 报错。

MAX_THINKING_TOKENS 现在还有用吗? 在自适应模型上,Claude Code 会忽略它的正数值,思考多少由 effort 档位控制。它在固定预算的模型上才起作用;在允许关闭思考的模型上,MAX_THINKING_TOKENS=0 会关掉思考。

我没用网关,为什么也报「thinking.type.enabled」? 通常是 Claude Code 版本太旧。用 claude --version 对照上面的表;如果更新后版本还是不够,切到 latest 发布通道。

延伸阅读

准备好接入了吗?登录控制台 · 购买额度 · 创建 API Key,三步即可开始。