Claude Code 升级到 v2.1.156 后,DeepSeek 报错?一个配置搞定
今天早上打开 Claude Code,发现自动升级到了 v2.1.156,结果 DeepSeek 直接崩了。报错信息挺长,核心就一句:messages[1].role: unknown variant `system`,expected `user` or `assistant`。我心想这昨天还好好的,今天怎么突然就炸了?

问题根源:system 角色进了 messages
查了半个多小时,终于搞明白了。这次升级之后,Claude Code 在请求里加了 system 角色的消息(也就是系统指令,相当于给 AI 的预设身份卡)。但 DeepSeek 的 Anthropic 兼容接口有个坑:它的 messages 数组里只认 user 和 assistant 两种角色,系统指令应该放在顶层的 system 字段,而不是混在 messages 里面。
所以一旦请求里出现了 role: “system”,DeepSeek 就会直接返回 400。说白了,就是 Claude Code 发的东西 DeepSeek 接不住了。
我的修复方法:换个协议格式
如果你跟我一样用 cc-switch(一个中转工具,相当于 AI 模型的路由器)接 DeepSeek,旧配植大概率是这样的:URL 填 https://api.deepseek.com/anthropic,格式选 anthropic 直通模式。这种模式下 cc-switch 不做任何转换,发什么传什么,以前没问题,现在多了 system 角色就彻底翻车。
解决办法其实很简单:在 cc-switch 里新建一个 DeepSeek provider,API 地址改成 https://api.deepseek.com(注意去掉 /anthropic 后缀),格式从 anthropic 换成 openai_chat。
openai_chat 模式下,cc-switch 会按 OpenAI 的 Chat Completions 格式来转发请求,自动把 system 消息处理到正确的位置,不再直接塞进 messages 数组。我改完之后重启 Claude Code,DeepSeek 恢复正常,跟之前一样流畅。第一次使朋新配植的时候可能会提示重新加载,点确定就行。
说实话,这种兼容性问题挺烦人的,本质是各家 API 格式不统一,中间转一手就容易出幺蛾子。如果你也遇到这个报错,按上面改一下 provider 配置就行,亲测有效。你平时用 Claude Code 搭 DeepSeek 的时候,还踩过哪些坑?