网关不认 effort beta 或中途 system 消息?Claude Code 现在会自动去掉再重试
不少公司会在 Claude Code 和模型之间放一层 API 网关:统一鉴权、记账、审计,或者把请求转到某个「兼容 Anthropic API」的服务上。这层网关带来了管控能力,也带来了兼容性风险——它未必认识 Claude Code 新近使用的每一个请求字段。
问题出在哪
CLI 2.1.310 修复的正是两类常见的兼容问题:
- 请求里带了
effort-2025-11-24这个 beta 值,一些网关或兼容服务器不认识,直接拒绝; - 对话进行到一半时插入的 system 消息,一些服务器只接受开头的 system 提示,遇到中途的就报错。
以前碰到这两种情况,请求会直接失败,用户看到的是莫名其妙的报错,往往要去翻网关日志才知道是哪个字段惹的祸。
现在的行为
更新说明写得很清楚:Claude Code 现在会在去掉它们之后重试。 也就是说,被网关拒绝时,它会自动降级成网关能接受的请求形式,让会话继续下去,而不是卡在一个你几乎无法从客户端修复的错误上。
这和本站之前介绍过的「网关拒绝 tool search 时自动重试」是同一个思路:Claude Code 正在系统性地为「不完全兼容的中间层」兜底。
需要注意的地方
- 降级是有代价的:去掉 effort beta 后,相关的推理强度设置可能不会传给模型;去掉中途 system 消息后,模型可能少拿到一些上下文提示。会话能跑通,但效果未必与直连完全一致。
- 根本解决还是升级网关:如果你维护着这层网关,最好让它透传未知的 beta 值,并支持对话中途的 system 消息,这样就不需要客户端降级。
- 排查时看版本:如果团队里有人报「走网关偶尔请求失败、直连没事」,先确认客户端是否已经是 2.1.310 或更新版本。
同版本相关改进
2.1.310 还修了一处和「请求太长」有关的问题:遇到「Prompt is too long」后触发的压缩,在对话里有大段 base64、SVG 这类密集文本时保留得太多,导致下一次请求又超长。现在压缩会更彻底,避免连续两次失败。
小结
如果你通过网关或兼容服务器使用 Claude Code,这次更新能明显减少那些「不是你的错、但要你来查」的报错。升级客户端是最省事的一步,长期来看,也别忘了让网关跟上 API 的演进。