Opus 4.8 后的 400 是什么问题

Claude Opus 4.8 发布后,如果 Claude Code CLI 同步升级到 v2.1.154 或更高版本,再接入 DeepSeek Anthropic API 时突然返回 400,先按 CLI 版本兼容问题处理。

这个问题的关键不是 Opus 4.8 模型本身,而是 Claude Code CLI 升级后请求格式发生变化。DeepSeek 的 Anthropic 兼容端点收到 messages[].role = "system" 后,会按不支持的 role 解析失败。

Text
API Error: 400 Failed to deserialize the JSON body into the target type:
messages[1].role: unknown variant `system`, expected `user` or `assistant`

哪些 Claude Code 版本容易触发

先确认当前 Claude Code CLI 版本。社区复现集中指向 v2.1.154 及之后的请求格式变化;如果你的版本已经高于这个范围,先不要继续改 DeepSeek Key、base URL 或模型名。

PowerShell
claude --version

先不要重置 DeepSeek 配置

如果这套 DeepSeek 配置在升级前可以正常使用,先不要把 Key、base URL、模型名全部推倒重来。这个 400 更像 CLI 请求体和 DeepSeek 兼容层之间的协议不匹配。

需要核对的只有三项:入口、Key 是否存在、模型名是否仍是 DeepSeek 支持的名称。

DeepSeek Anthropic 入口https://api.deepseek.com/anthropic
关键变量ANTHROPIC_BASE_URL / ANTHROPIC_AUTH_TOKEN / ANTHROPIC_MODEL
先不要改API Key、代理地址、模型映射

什么时候需要回退 CLI 版本

当前最直接的处理方式是把 Claude Code CLI 回退到 v2.1.153。先卸载当前全局版本,再安装指定版本。

这段命令只处理 Claude Code 全局包版本,不会修改项目依赖。仓库里的 Nuxt 项目仍然使用 pnpm;命令里的 npm 是 Claude Code 官方包的全局安装方式。

PowerShell
npm uninstall -g @anthropic-ai/claude-code
npm install -g @anthropic-ai/claude-code@2.1.153
claude --version

npm 下载慢怎么办

如果全局安装下载慢或超时,可以临时指定 npm 镜像源安装同一个版本。安装完成后仍然用 claude --version 确认结果,不要只看 npm 命令退出码。

PowerShell
npm install -g @anthropic-ai/claude-code@2.1.153 --registry=https://registry.npmmirror.com

怎么避免再次自动升级

回退成功后,先关闭 Claude Code 后台自动更新。否则 CLI 可能再次升到触发 DeepSeek 400 的版本。

官方文档说明 DISABLE_AUTOUPDATER=1 会禁用后台自动更新;如果你要阻止手动 claude update 这类路径,可以再使用更严格的 DISABLE_UPDATES

PowerShell
[Environment]::SetEnvironmentVariable("DISABLE_AUTOUPDATER", "1", "User")
[Environment]::SetEnvironmentVariable("DISABLE_UPDATES", "1", "User")

settings 里要不要锁版本

如果你更习惯用 Claude Code settings 管理环境变量,可以把更新限制写进用户级 settings 的 env 字段。写完后重新打开终端,让新进程读取配置。

不要把真实 DeepSeek API Key 写进会提交到仓库的项目 settings。用户级 ~/.claude/settings.json 和项目级 .claude/settings.local.json 要分清。

JSON
{
  "env": {
    "DISABLE_AUTOUPDATER": "1",
    "DISABLE_UPDATES": "1"
  }
}

回退后怎么确认 DeepSeek 正常

回退版本并关闭自动更新后,打开一个新的终端窗口,再启动 Claude Code。成功标准是 CLI 能进入会话,并且 DeepSeek 模型能返回首轮回答。

如果错误从 400 system role 变成 401、404 或 model not found,说明版本问题已经绕开,下一步按对应错误继续排查。

PowerShell
claude

400 消失后还有新错误怎么办

不要把所有 400 都当成同一个问题。unknown variant system 指向请求体里的 role;thinking mode 相关 400 指向推理内容回传;401、404、model not found 又是不同层。

回退后变成 401 unauthorized

请求已经进入鉴权层。检查 ANTHROPIC_AUTH_TOKEN 是否进入当前进程、Key 是否复制完整、DeepSeek 账号是否有可用额度。

回退后变成 404 endpoint not found

继续检查 ANTHROPIC_BASE_URL。Claude Code 接 DeepSeek 要用 https://api.deepseek.com/anthropic,不要填 OpenAI 入口。

回退后变成 model not found

继续检查 ANTHROPIC_MODEL、ANTHROPIC_DEFAULT_HAIKU_MODEL 和网关模型映射。

报 content[].thinking must be passed back

这是 thinking 模式或代理转发链路的另一个 400。先关闭高强度 thinking 或换不触发该协议的模型配置,再检查代理是否完整回传 thinking 内容。

参考来源

DeepSeek Anthropic endpoint: 400 error on role system after v2.1.154GitHub issueClaude Code 环境变量文档官方文档Claude Code advanced setup官方文档DeepSeek Anthropic API 文档官方文档

相关文章

Claude Code 接入 DeepSeek API:配置方法和报错处理智能编程 / 约 24 分钟DeepSeek Anthropic API 404 错误排查步骤错误日志 / 约 12 分钟Claude Code unsupported parameter / unknown field 怎么排查错误日志 / 约 12 分钟Claude Code Windows 环境变量生效验证开发环境 / 约 13 分钟

作者信息