
system, expected user or assistant at line 1 column 492”SEO关键词:DeepSeek Claude Code 报错、400 Failed to deserialize JSON、messages role system 错误、Claude Code 降级版本、DeepSeek API 兼容问题
在实际接入大模型 API 的过程中,经常会遇到“看似配置正确,但就是跑不通”的问题。这类问题通常不是业务逻辑,而是SDK / CLI 版本与 API 协议不兼容导致的。
本文复现并整理一个典型问题:
👉 DeepSeek 在 Claude Code 中报错 400 Failed to deserialize JSON body

"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 492"在使用 DeepSeek 模型通过 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 当前版本的消息协议,不支持
systemrole
正常情况下消息结构类似:
{
"messages": [
{ "role": "system", "content": "xxx" },
{ "role": "user", "content": "xxx" }
]
}但在某些 Claude Code 版本中:
userassistantsystem于是 DeepSeek 按标准 API 发出的请求直接被拒绝,导致 400 JSON 解析失败。
社区验证最有效的方式是:
🔥 降级 Claude Code 到兼容版本
@anthropic-ai/claude-code@2.1.148npm install -g @anthropic-ai/claude-code@2.1.148npm uninstall -g @anthropic-ai/claude-code然后重新安装指定版本。
如果不是 npm 安装(例如 winget / native 安装),需要手动处理:
rm -f ~/.local/bin/claude
rm -rf ~/.local/share/claude或 Windows PowerShell:
Remove-Item -Recurse -Force $env:USERPROFILE\.local\share\claude
Remove-Item -Force $env:USERPROFILE\.local\bin\claude统一安装路径,避免多版本冲突。
部分环境会自动升级 Claude Code,导致问题复现。
可以通过环境变量关闭自动更新:
{
"env": {
"DISABLE_AUTOUPDATER": "1"
}
}或在 shell 中设置:
export DISABLE_AUTOUPDATER=1根据社区反馈:
版本 | 状态 |
|---|---|
2.1.148 | 稳定可用 |
2.1.152 | 可用 |
2.1.153 | 可用 |
>=2.1.154 | 部分功能更新,但存在兼容变化 |
从工程角度看,这个问题本质是:
API schema evolution 与 CLI 消息协议不一致
具体表现为:
system
如果不想锁版本,可以考虑:
这种方式对 OpenAI schema 兼容更完整。
一些社区项目已经做了协议适配层。
这个问题不是 DeepSeek 或 Claude 单方 bug,而是:
CLI 工具版本与 API message schema 不一致导致的协议错误
短期最稳定的解决方案:
npm install -g @anthropic-ai/claude-code@2.1.148并关闭自动更新。
如果后续 Claude Code 更新协议支持 system role,这个问题会自然消失。