今天在使用 Claude CLI 配合国产 GLM-5.2 模型(通过 Nvidia 代理网关)时,发现请求报错并中断:
API Error:400Error from provider(Nvidia,z-ai/glm-5.2:400):{"message":"Validation: Unsupported parameter(s):`reasoning`","type":"Bad Request","code":400}Error: Error from provider(Nvidia,z-ai/glm-5.2:400):{"message":"Validation: Unsupported parameter(s):`reasoning`","type":"Bad Request","code":400}1. 原因
Claude Code(Anthropic 官方 CLI 工具)默认会开启针对 Anthropic 原生 API 的实验性扩展参数,以支持高级特性。
但当请求被路由至 非 Anthropic 的第三方网关或非 Claude 模型(如本案例中的 Nvidia 代理 + GLM-5.2)时,这些目标服务仅支持标准的通用 API 格式(如 OpenAI 兼容结构)。
我这次报错直接指向的非法字段reasoning,通常与 Claude Sonnet 的Thinking / Reasoning实验性功能相关。此外,其他扩展字段(如cache_control、部分tool扩展字段)也可能一并被拒。
根本逻辑:
第三方网关(Nvidia)对请求体进行了严格的 JSON Schema 校验,无法识别的扩展字段(
reasoning)会直接触发 400 Bad Request。
2. 解决方案
方案一:临时方案(单次会话生效)
在启动 Claude Code 的当前终端会话中,直接导出环境变量:
exportCLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1设置后,在当前终端窗口运行claude命令即可生效。关闭终端后失效。
方案二:永久方案(推荐)
根据使用习惯,从以下两种方式中任选其一即可。
修改配置文件
找到 Claude Code 的配置文件settings.json(通常位于~/.claude/settings.json或项目根目录下的.claude/settings.json),在env字段中添加环境变量:
"env":{"CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS":"1"}保存文件后,重启 Claude Code 进程即可生效。
修改环境变量
根据操作系统和 Shell 环境,将变量写入对应的配置文件中。
Mac / Linux(bash):
echo'export CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1'>>~/.bashrcsource~/.bashrcMac(zsh,默认):
echo'export CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1'>>~/.zshrcsource~/.zshrcWindows(PowerShell):
[System.Environment]::SetEnvironmentVariable("CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS","1","User")⚠️ 注意:PowerShell 设置的是用户级环境变量,设置后必须关闭所有终端窗口并重新打开,或注销重新登录才能生效(仅重启当前 PowerShell 窗口可能不生效)。
3. 验证
执行以下命令,检查变量是否已正确加载:
echo$CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS输出结果为1即表示配置成功。此时再次运行 Claude CLI,报错应已消失。
参考文档:https://docs.apiyi.com/scenarios/programming/claude-code/aws-400-error#mac-%2F-linux%EF%BC%88bash%EF%BC%89