
Claude Code 接入 MiniMax API 报错:invalid message role: system (2013) 完整排查记录
结论
这是CC自动更新了,把版本降级回去就行了。
最近在折腾 Claude Code 接入 MiniMax 的 Anthropic 兼容接口时,踩了一个非常隐蔽的坑。
现象非常离谱:
-
命令行 CLI 能正常使用
-
VSCode 插件却直接报错
-
重装之后,CLI 也突然炸了
最终定位发现:
不是配置错了,而是 Claude Code 新版本修改了消息格式,而 MiniMax 的
/anthropic兼容接口对systemmessage 的位置有严格限制。
这篇文章完整记录一下整个排查过程。
一、问题现象
VSCode 中使用 Claude Code 插件时,持续报错:
API Error: 400 invalid params, chat content has invalid message role: system (2013)
但奇怪的是:
同样的 API Key、
同样的配置、
命令行里的 Claude Code CLI 却完全正常。
二、环境配置
我的 Claude Code 配置如下:
文件:
~/.claude/settings.json
内容:
{
"env": {
"ANTHROPIC_BASE_URL": "https://api.minimaxi.com/anthropic",
"ANTHROPIC_AUTH_TOKEN": "sk-cp-xxx...",
"ANTHROPIC_MODEL": "MiniMax-M2.7"
}
}
本质上就是:
让 Claude Code 不再请求 Anthropic 官方接口,
而是转发到:
https://api.minimaxi.com/anthropic
也就是 MiniMax 提供的 Anthropic 兼容 API。
三、初始状态
最开始时:
| 组件 | 版本 | 状态 |
|---|---|---|
| Claude Code CLI | 2.1.113 | ✅ 正常 |
| VSCode 插件 | 2.1.156 | ❌ 报错 |
这里已经埋下了关键线索:
CLI 和插件版本不一致。
四、开始怀疑:消息格式兼容性
因为错误信息里明确提到:
invalid message role: system
于是开始直接测试 MiniMax API 对 message 格式的兼容情况。
五、直接测试 MiniMax Anthropic 接口
经过多轮实验,发现了一个关键问题:
MiniMax 的 /anthropic 兼容接口:
对 system message 有严格限制
测试结果
1. system message 在第一位
[
{
"role": "system",
"content": "you are helpful"
},
{
"role": "user",
"content": "hello"
}
]
结果:
✅ 成功
2. system message 不在第一位
[
{
"role": "user",
"content": "hello"
},
{
"role": "system",
"content": "you are helpful"
}
]
结果:
❌ 失败
错误码:2013
3. 多个 system message
[
{
"role": "system",
"content": "a"
},
{
"role": "system",
"content": "b"
}
]
结果:
❌ 失败
4. system message 出现在对话中间
结果:
❌ 失败
六、根本原因终于出现了
问题本质:
MiniMax 的 Anthropic 兼容层并不完全兼容 Anthropic 官方协议
它要求:
-
systemmessage 必须在 messages 数组第一位 -
且只能有一个
而新版 Claude Code:
改变了内部消息组织方式
Claude Code 新版本(大约 2.1.154+):
在某些 Agent / Tool 调用场景下,
会动态插入新的 system message。
于是:
原本合法的:
[
system,
user
]
变成了:
[
user,
assistant,
system
]
或者:
[
system,
user,
system
]
这直接触发了 MiniMax 的 2013 错误。
七、更离谱的事情发生了
后来我卸载重装了 Claude Code。
结果:
CLI 也突然炸了。
原因是:
Claude Code CLI 自动升级了
原本:
| 组件 | 版本 |
|---|---|
| CLI | 2.1.113 |
升级后:
| 组件 | 版本 |
|---|---|
| CLI | 2.1.154 |
于是:
CLI 和 VSCode 插件都开始报同一个错。
八、最终解决方案:降级
目前最稳定的方案:
锁定 Claude Code 到旧版本
1. 卸载当前版本
winget uninstall "Claude Code" --silent
2. 安装旧版 CLI
winget install Anthropic.ClaudeCode --version 2.1.113
3. VSCode 插件降级
code --uninstall-extension anthropic.claude-code
code --install-extension anthropic.claude-code@2.1.112
九、最终可用版本
| 组件 | 版本 | 状态 |
|---|---|---|
| CLI | 2.1.113 | ✅ 正常 |
| VSCode 插件 | 2.1.112 | ✅ 正常 |
十、如何防止自动升级
否则下次还会炸。
可以直接 pin:
winget pin add Anthropic.ClaudeCode
十一、问题总结
这次问题的本质:
Claude Code 新版本 + MiniMax 不完整 Anthropic 兼容
两边共同导致的。
Claude Code 新版行为变化
新版会:
-
动态插入 system message
-
修改 message 顺序
-
Agent 模式下插入额外 system prompt
MiniMax 兼容层限制
MiniMax /anthropic 接口:
-
不允许多个 system
-
不允许 system 不在第一位
而 Anthropic 官方 API 实际上更宽松。
十二、临时方案与长期方案
临时方案
直接锁版本:
-
CLI:2.1.113
-
VSCode 插件:2.1.112
目前最稳。
长期方案
有两个方向:
方案一:MiniMax 更新兼容层
支持:
-
多 system message
-
任意位置 system message
真正兼容 Anthropic。
方案二:Claude Code 增加兼容模式
例如:
compatibility_mode=minimax
自动:
-
合并 system
-
规范化位置
不过目前还没有。
十三、结语
这个问题最坑的地方在于:
表面看像 API Key 配错
但实际上:
是消息协议层面的兼容性问题。
而且:
CLI 能用、
插件不能用、
非常容易把人带偏。
如果你也在:
-
Claude Code
-
MiniMax API
-
Anthropic 兼容接口
这一套组合里踩坑,
希望这篇文章能帮你少走一点弯路。