确认是不是 Opus 4.8 后的 CLI 兼容问题

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

这个问题的关键不是 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 CLI 版本

先确认当前 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")

也可以写入 Claude Code 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"
  }
}

重新启动 CLI 验证 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 内容。

记录这次可用的 CLI 版本

修好以后记录 Claude Code CLI 版本、DeepSeek 入口、模型名、是否关闭自动更新和最后验证日期。下次 Opus 或 Claude Code 再升级时,先对比这份记录,不要从搜索结果里随机复制另一套配置。

Text
日期:2026-06-05
Claude Code:v2.1.153
DeepSeek 入口:https://api.deepseek.com/anthropic
主模型:填你的 ANTHROPIC_MODEL
自动更新:DISABLE_AUTOUPDATER=1 / DISABLE_UPDATES=1
结果:首轮对话成功 / 仍失败的错误片段

参考来源

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:配置方法和报错处理智能编程 / 约 20 分钟DeepSeek Anthropic API 404 错误排查步骤错误日志 / 约 12 分钟Claude Code unsupported parameter 错误排查步骤错误日志 / 约 12 分钟Claude Code Windows 环境变量生效验证开发环境 / 约 13 分钟