5.29 Claude Code 无法调用 DeepSeek大模型

0 阅读2分钟

起因

今天准备Vibe Coding的时候,发现claude code居然罢工了,吓得我赶紧看一下是不是token烧完了, 看了一下,还有余粮,然后回去看了一下报错信息

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

原因

我估计应该是deepseek api返回的格式与claude code规定的json格式不一致

deepseek 风格
{
  "messages": [
    {"role": "system", "content": "You are a helpful assistant"},
    {"role": "user", "content": "Hello"}
  ]
}

Anthropic 风格
{
  "system": "You are a helpful assistant",
  "messages": [
    {"role": "user", "content": "Hello"}
  ]
}

但是我又纳闷了,怎么之前好好的,限制突然不能用,怀疑是claude code这边有问题

上网搜集

发现两篇文章,刚好提到了这个问题 是因为claude code的自动更新导致的这个问题,最新版本是v2.1.154 Claude Code 升级至 v2.1.154 版本后,会将系统提示词以 system 角色放入 messages 消息数组中发起请求。但 DeepSeek 的 Anthropic 兼容接口存在格式限制,仅支持 user、assistant 两种角色,无法识别、解析 system 角色参数,最终导致 JSON 反序列化失败,触发 400 错误。

原文链接 原文链接

解决方案

1. 版本回退(立即生效)

如果还是想用claude code,删除当前的claude code,安装上一个版本v2.1.153,不用怕,配置文件~/.claude.json都还在

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

添加配置,防止自动更新 编辑 ~/.claude/settings.json(linux|mac) 或者 C:/Users/用户文件夹/.claude/settings.json(windows) 在env里添加"DISABLE_AUTOUPDATER": "1"

"env": {
    ##保持不变
    "DISABLE_AUTOUPDATER": "1"
  },

Windows:怎么有一股熟悉的味道

然后claude code就可以正常使用了

2. 等待DeepSeek修复(长期方案)

目前还没修复,不过感觉应该很快,也就换个格式的事情