Claude Code 报错 400 怎么解决?常见原因排查

浏览:1次阅读
没有评论

Claude Code 报错 400(API Error: 400)意思是“请求本身被拒绝了”,和账号认证无关。最常见的原因有五类:版本太旧、模型名写错、上下文或附件超限、第三方网关不兼容、对话历史损坏。先看报错里 400 后面的那句英文,再对照下面的小节处理,大多数情况升级 Claude Code 或执行一次 /rewind、/compact 就能恢复。

Claude Code 报错 400 怎么解决?常见原因排查插图
图片来源:Claude Code Docs:Model configuration

先分清:400 和 401、403、429 不是一回事

按 Claude Code 官方错误参考(Error reference),400 属于“请求错误”(Request errors),问题出在请求内容上:字段、模型名、长度、对话结构。它和下面几类报错的处理方向完全不同:

  • 401 / 403:认证或权限问题,要查登录和密钥,见 Claude Code 报错 401/403 认证错误排查;
  • 429:额度或限流问题,要等重置或降低并发;
  • 500 / 529:服务端临时故障或过载,一般稍后重试即可。

所以遇到 400,重新登录、换 Key 通常没用,重点是看报错原文里的关键字。

排查前的三步准备

  1. 运行 claude --version 看当前版本,官方文档里很多 400 都是“旧版本不支持新模型或新字段”导致的;
  2. 运行 /status 确认当前用的是哪个模型、哪种凭据,以及是否走了第三方网关;
  3. 把报错完整复制下来,重点看 API Error: 400 ... 后面的英文,下面每一节都按这段文字匹配。

升级命令是:

claude update

原因一:版本太旧,报 thinking.type.enabled is not supported

报错原文:

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 版本低于所选模型要求的最低版本,客户端发了新模型已经不接受的思考参数。处理方法:

  1. 运行 claude update 后重启 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;
  2. 如果你在 stable(稳定)更新通道,更新后可能仍低于上面的版本,需要切到 latest 通道再更新;
  3. 暂时没法升级的话,用 /model 改选 Opus 4.6 或 Sonnet 4.6。

原因二:模型名不对,报 There's an issue with the selected model

报错原文类似:

There's an issue with the selected model (claude-...). It may not exist or you may not have access to it. Run /model to pick a different model.

意思是模型名无法识别,或你的账号没有这个模型的权限。处理方法:

  • 交互模式下直接运行 /model,从列表里选;
  • 非交互模式(-p)用 --model 传入正确的别名或 ID,或设置 ANTHROPIC_MODEL 环境变量;
  • 尽量用 sonnet、opus 这类别名,别名会自动指向维护中的默认模型,不会过期;
  • 如果改了还是回到旧模型,说明别处还写着旧 ID,按官方“设置模型的优先级”逐个检查,比如 settings.json 配置文件 里的 model 字段。

相近的报错还有 Model 'xxx' not found(按名称切换时 API 确认不了这个模型存在)和 Model "xxx" is not a recognized model id(传入的是显示名之类不能当 ID 的字符串)。处理思路一样:用 /model 不带参数打开列表,照列表里的名字填写。

原因三:上下文或附件超限,报 Prompt is too long / Request too large

这一类报错内容超了,常见三种:

  • Prompt is too long,交互界面里显示为 Context limit reached · /compact or /clear to continue:对话加附件超过了模型的上下文窗口。运行 /compact 压缩对话,或 /clear 重新开始;
  • Request too large (max 32MB):请求体超过 API 的 32MB 上限,通常是贴了大量内容、图片或附件。运行 /compact 可以去掉累积的图片和附件;如果提示 compacting cannot make it fit,就按两次 Esc 回退到加入大内容之前,或直接 /clear;
  • max_tokens must be greater than thinking.budget_tokens:思考预算比最大输出长度还大,没给回答留空间。把 CLAUDE_CODE_MAX_OUTPUT_TOKENS 调到大于思考预算即可。

官方建议:大文件尽量 给路径而不是把内容整段粘贴,让 Claude 分块读取,能从根本上减少这类报错。

原因四:对话历史损坏,报 tool_use / tool_result 相关 400

报错原文是下面任意一种:

API Error: 400 due to tool use concurrency issues. Run /rewind to recover the conversation.
API Error: 400 orphaned tool_result in conversation history. Run /rewind to recover the conversation.
API Error: 400 duplicate tool_use ID in conversation history. Run /rewind to recover the conversation.
API Error: 400 ... unexpected `tool_use_id` found in `tool_result` blocks
API Error: 400 ... thinking blocks ... cannot be modified

官方解释:对话历史里 tool_use、tool_result、thinking 这几种块的顺序乱了,API 不接受。处理方法:

  1. 如果你用的是 Opus 4.7 或 Opus 4.8,先运行 claude update,v2.1.156 之前的版本在正常调用工具时就可能触发这个错误,而且 /rewind 清不掉;
  2. 运行 /rewind,或连按两次 Esc,退回到出错之前的检查点继续工作。
Claude Code 报错 400 怎么解决?常见原因排查插图1
图片来源:Claude Code Docs:Checkpointing

原因五:接第三方 API / 网关,报 Extra inputs are not permitted

设置了 ANTHROPIC_BASE_URL 接中转或网关的用户最容易遇到:

API Error: 400 ... context_management: Extra inputs are not permitted

官方说明:Claude Code 会发送 context_management、工具搜索的 defer_loading 等测试版字段,同时带上启用它们的 anthropic-beta 请求头。如果网关转发了请求体却丢了这个请求头,或者把请求转给了格式不同的上游,就会被拒绝。处理方法:

  1. 报错里有 context_management:升级到 v2.1.304 或更高,新版收到这个拒绝后会自动去掉该字段再发一次;
  2. 报错里有 defer_loading 或 tool_reference:升级到 v2.1.305 或更高,新版会自动去掉工具搜索字段重发;
  3. 网关是你自己维护的:配置成转发 anthropic-beta 请求头;
  4. 兜底方案:启动前设置环境变量关闭实验性功能:
# macOS / Linux
export CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1

# Windows PowerShell
$env:CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS = "1"
Claude Code 报错 400 怎么解决?常见原因排查插图2
图片来源:Claude Code Docs:Other LLM gateways

常见报错与解决速查表

报错关键字 原因 解决方法
thinking.type.enabled is not supported 版本低于模型要求 claude update,或 /model 换 4.6 系列
There's an issue with the selected model 模型名无效或无权限 /model 重选,用别名
Prompt is too long 超出上下文窗口 /compact 或 /clear
Request too large (max 32MB) 请求体过大 /compact,大文件给路径
max_tokens must be greater than thinking.budget_tokens 思考预算过大 调大 CLAUDE_CODE_MAX_OUTPUT_TOKENS
orphaned tool_result / duplicate tool_use ID 对话历史损坏 /rewind 或连按两次 Esc
Extra inputs are not permitted 网关丢了 beta 请求头 升级到 v2.1.305+,或设 CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1
tools.N.custom.input_schema: JSON schema is invalid 某个 MCP 工具参数定义不合法 升级,或停用对应 MCP 服务器

最后一行和 MCP 有关:报错里的 N 只是工具在列表中的序号,不是名字。官方建议先升级到 v2.1.300 以上(新版会去掉被拒工具的参数再重试),还不行就逐个停用 MCP 服务器定位。MCP 的添加和停用方法可以看 Claude Code 配置 MCP 教程。

常见问题 FAQ

Claude Code 报错 400 要重新登录吗?

一般不用。400 是请求内容被拒,和登录无关;只有 401、403 才需要查登录和密钥。

升级后还是报 thinking.type.enabled 怎么办?

用 claude --version 确认版本是否真的到了模型要求的最低版本。稳定通道的最新版可能还不够新,需要切到 latest 通道;也可以先 /model 改用 4.6 系列模型。

用中转 API 一直报 400,是中转的问题吗?

如果报错里有 Extra inputs are not permitted,多半是网关没转发 anthropic-beta 请求头或上游格式不兼容。先升级 Claude Code,再试 CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1,仍不行就联系网关服务方。

还没装好 Claude Code 的话,可以先看 Claude Code Windows 安装教程(2026)。

信息来源

正文完
 0