# Claude Code 升到 2.1.304 以后，公司自建网关每个请求都回 400，是 tool search 的锅吗

**URL:** <https://www.shiqidu.com/t/topic/1810>\
**Category:** 问题求助\
**Tags:** Claude, AICoding, 问与答, API\
**Created:** [2026 年10 月 27 日 07:48 UTC](https://www.shiqidu.com/t/topic/1810 "2026-10-27T07:48:14Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

作者： ![shiqidu\_editor](https://www.shiqidu.com/user_avatar/www.shiqidu.com/shiqidu_editor/32/528_2.png) [@shiqidu\_editor](https://www.shiqidu.com/u/shiqidu_editor)\
发布日期： [2026 年10 月 27 日 07:48 UTC](https://www.shiqidu.com/t/topic/1810/1 "2026-10-27T07:48:14Z")

</div>

报错大概长这样（示意，外层格式各家网关不一样）：

```auto
API Error: 400 {"type":"error","error":{"type":"invalid_request_error","message":"context_management: Extra inputs are not permitted"}}

```

常见的情况是组里的 Claude Code 一直走公司自己搭的网关，`ANTHROPIC_BASE_URL` 指过去，用了几个月都没事。某天自动更新了一下，再开会话，随便问一句就是上面这种 400，或者网关日志里一排 422，报的字段名有时是 `context_management`，有时是 `defer_loading`、`tool_reference`，有时干脆是 `anthropic-beta` 里的某个值不认。配置一个字没动的话，就该查客户端版本了。

官方 changelog 里 10 月这几版跟网关有关的条目是下面几条（我看的时候 changelog 最新已经到 2.1.311）：

**2.1.304（10 月 19 日）** ：自定义 `ANTHROPIC_BASE_URL` 时 tool search 改成默认开启，changelog 上写的是网关回 400 或 422 时会去掉 tool search 再重试。同一版还修了网关后面报 `context_management: Extra inputs are not permitted` 的问题，现在会去掉这个字段重发。官方的网关兼容文档也写了，2.1.304 之前遇到这个报错是不会自动重试的，所以更老的版本碰上这个错只能自己改配置。

**2.1.305（10 月 20 日）** ：修了一个 2.1.304 带进来的回归：端点或网关拒绝 tool search 时每个请求都失败，网关里禁用了 ToolSearch、或者 `--tools` 没带它的情况也算。修好以后会不带 tool search 重试。如果恰好停在 2.1.304 上，请求全挂大概率就是这一条。

**2.1.310（10 月 23 日）** ：修了部分网关和兼容服务拒绝 `effort-2025-11-24` 这个 beta 值，或者拒绝对话中途的 system 消息导致请求失败的问题，现在会去掉它们重试。

动手之前可以先去网关日志里看一眼被拒的那条请求，上游报错里点名的是哪个字段、哪个 beta 值，基本就能对上上面哪一条。`defer_loading`、`tool_reference` 对应 tool search，`context_management` 对应上下文管理，`effort-2025-11-24` 或者 `Unexpected role "system"` 一类对应 2.1.310 那条。

先在终端跑 `claude --version` 看自己停在哪一版，落在 2.1.304 的话直接 `claude update` 升上去就行。升级后还不对，跑 `claude doctor`，它是在 shell 里直接执行的只读诊断，不用起会话，安装状态、settings 文件校验错误、上次自动更新成没成功都会列出来。会话内的 `/doctor` 是个需要调模型的 skill，请求全 400 的时候它多半也跑不起来，所以这时候用命令行那个更靠谱。

如果升到新版还是报错，或者你们因为内部规定暂时不能升，文档里有两个开关可以用：

- `ENABLE_TOOL_SEARCH=false`：新版遇到原因不明的 400/422 会自动去掉 `defer_loading` 和 `tool_reference` 重试，但过一阵还会再试 tool search，网关日志里就会周期性地出现一次被拒、一次重试。设了这个变量就每个请求都不带这些字段，代价是 MCP 工具全部一开始就加载进上下文。
- `CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1`：范围更大，`context_management`、`strict`/`defer_loading` 这类 beta 工具字段、MCP tool search 都会停掉。它不管 effort 相关的 beta 值和对话中途的 system 消息，这两样要靠 2.1.310 的自动重试，或者网关这边放行。

还有个容易漏的地方：有人在 `ANTHROPIC_BETAS` 里手动写过 `effort-2025-11-24`，文档说这种情况下 Claude Code 会继续发它，照样 400，得自己把这一项删掉。

网关那边能配合的话，官方的意思是 `anthropic-beta` 头和对应的 body 字段要成对转发，上游的错误响应体原样透传，别包一层自己的格式。客户端的自动重试大多是按上游报错原文匹配的，网关把报错改写了，状态码没变也认不出来，就不会重试。

官方链接：

- changelog：[Claude Code changelog - Claude Code Docs](https://code.claude.com/docs/en/changelog)
- LLM gateway 总览：[https://code.claude.com/docs/en/llm-gateway](https://code.claude.com/docs/en/llm-gateway)
- 网关兼容说明（重试逻辑、`ENABLE_TOOL_SEARCH`、`CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS` 都在这页）：[Claude Code gateway compatibility guide - Claude Code Docs](https://code.claude.com/docs/en/llm-gateway-protocol)
- 连接网关和报错对照表：[https://code.claude.com/docs/en/llm-gateway-connect](https://code.claude.com/docs/en/llm-gateway-connect)

有没有人是升到 2.1.310 以后还在 400 的？想知道报错里具体是哪个字段，是不是还有文档没覆盖到的情况。
