文章源自:https://mp.weixin.qq.com/s/6Oh2rlbq-JcgknggAU0xrg

今天凌晨 Claude Opus 4.8 炸场发布,但不少用 DeepSeek API 的朋友打开 Claude Code 发现直接崩了——报 400 错误。这篇文章说清楚原因和解决办法。


一、Claude Opus 4.8 发布,亮点不少

北京时间 2026 年 5 月 28 日深夜,Anthropic 正式发布了 Claude Opus 4.8,距离 Opus 4.7 仅仅 41 天,堪称史上最快迭代。

这次更新的几个重点:

  • 编码能力大幅提升:SWE-Bench Pro 达到 69.2%,自主编程能力更强
  • 诚实度历史性突破:虚假报告率首次降至 0.00,不会再凭空编造代码缺陷;偷懒调查率也降到 0.00
  • Fast 模式降价 3 倍:速度快 2.5 倍,价格只要原来的三分之一
  • 全新 Dynamic Workflows:单个会话可以并行调度上百个子 Agent,适合大规模代码迁移等重型任务
  • Effort 控制:可以通过 /effort low|high|xhigh 控制模型思考深度

同时,Claude Code CLI 也同步更新到了 v2.1.154(随后又快速迭代到了 v2.1.156)。


二、升级后,DeepSeek 用户集体翻车

问题就出在这次 CLI 更新上。

大量使用 DeepSeek API 作为后端的 Claude Code 用户发现,升级后执行任何操作都会直接报错:

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 从 v2.1.154 开始,默认启用了 “Lean System Prompt”(精简系统提示) 功能。它会把系统提示词从请求体的顶层 system 字段,改成了以 {"role": "system", "content": "..."} 的形式,直接塞进 messages 数组里。

打个比方:以前是单独开一个「系统指令」通道,现在是把系统指令当成一条普通消息塞进了聊天记录。

问题是——DeepSeek 的 API 不认这种格式。DeepSeek 的 /anthropic 兼容端点严格按照 Anthropic 原始规范实现:messages 数组里只接受 userassistant 两种角色,突然冒出来一个 system,直接反序列化失败。

此外,v2.1.150 之后的版本还引入了 thinking 模式的协议变更,也可能触发另一个报错:

API Error: 400 "The content[].thinking in the thinking mode must be passed back to the API."

受影响的范围:不只是 DeepSeek,凡是走 Anthropic 兼容层的第三方模型(MiniMax、智谱等)理论上都可能中招。


三、解决办法:降级回退

目前最直接有效的方案就是——把 Claude Code 降级到 v2.1.153 或更早版本,并关闭自动更新

方案一:CLI 命令行降级(推荐)

# 1. 卸载当前版本
npm uninstall -g @anthropic-ai/claude-code

# 2. 安装兼容版本(v2.1.153 或 v2.1.152)
npm install -g @anthropic-ai/claude-code@2.1.153

# 如果下载慢,可以走国内镜像:
npm install -g @anthropic-ai/claude-code@2.1.153 --registry=https://registry.npmmirror.com

# 3. 验证版本
claude --version

方案二:VS Code 插件降级

  1. 打开扩展面板(Ctrl + Shift + X
  2. 找到 Claude Code 插件 → 点击右侧 ⚙️ 齿轮图标
  3. 选择 「安装另一个版本…」
  4. 选择 v2.1.153(或 v2.1.145)
  5. 重载窗口生效

关键一步:关闭自动更新!

降级之后如果不关自动更新,过一会儿它又自己升回去了,白折腾。

方法一:环境变量

export DISABLE_AUTOUPDATER=1

可以把这行加到 ~/.bashrc~/.zshrc 里持久化。

方法二:修改配置文件

~/.claude/settings.json 中添加:

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

VS Code 用户记得在插件管理里,手动关掉 Claude Code 插件的自动更新开关。


四、版本兼容性速查表

Claude Code 版本 DeepSeek 兼容性 说明
v2.1.145 ~ v2.1.153 ✅ 正常 可以用,建议锁定 v2.1.153
v2.1.150+ ⚠️ 部分报错 thinking 模式协议变更,可能报错
v2.1.154+ ❌ 直接报错 Lean System Prompt 导致 400
v2.1.156 ❌ 直接报错 同上,更多新特性引入

建议:现阶段固定使用 v2.1.153,等 DeepSeek 官方适配新协议后再升级。


五、其他替代方案(适合有技术能力的团队)

如果你的团队维护了自己的 API 代理/转发层,也可以在代理侧做兼容处理:在转发请求前,扫描 messages 数组,把 role: "system" 的消息提取出来放回顶层 system 字段,再从 messages 里删掉。

开源项目 deepclaude-mixed-setup(npm)已经内置了这类修复逻辑,可以直接参考。

但说实话,对大多数用户来说,降级是最省心的


六、最后说两句

这次的事情其实反映了一个现实:Anthropic 在自己的生态闭环里迭代很快,协议变更不会考虑第三方兼容层的感受。Claude Code 作为 Anthropic 的「亲儿子」,它的更新节奏只会跟着官方 API 走。

用 DeepSeek 等第三方模型跑 Claude Code,本质上是一种「嫁接」——能用,但每次 Claude Code 大版本更新都可能要折腾一番。所以建议:

  1. 锁定版本,别追最新
  2. 关注 DeepSeek 官方的兼容性公告
  3. 有条件的话,准备一个备用方案(比如另一台机器保留老版本)

毕竟,工具是拿来干活的,稳定比新功能重要。


Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐