MiMo 接入 Claude Code 后遇到 API Error 400 的排查与解决
现在claude code更新之后已经不再存在这个问题了 不需要往下看
前言
最近我按照 MiMo 官方的 Claude Code 配置文档,把 Claude Code 接到了 MiMo 的 Anthropic 兼容接口上。基础安装过程本身不复杂:安装 Node.js、安装 Claude Code CLI、配置 MiMo 的 Base URL 和 API Key。
但是配置完成后,我第一次运行 Claude Code 就遇到了一个比较迷惑的报错:
API Error: 400 messages[1].role must be either 'user' or 'assistant', but got 'system'
后面修好之后,又在继续使用 Claude Code 的过程中遇到了类似错误:
API Error: 400 messages[13].role must be either 'user' or 'assistant', but got 'system'
这篇文章记录一下完整排查过程、最终解决方案,以及为什么解决之后能用。
我的环境
我的环境大致如下:
系统:Windows
终端:Git Bash / PowerShell
Node.js:v24.16.0
npm:11.13.0
Claude Code CLI:2.1.154
VS Code Claude Code 扩展:anthropic.claude-code@2.1.154
MiMo 模型:mimo-v2.5-pro
MiMo Base URL:https://api.xiaomimimo.com/anthropic
按官方文档配置 Claude Code
按照 MiMo 官方文档,用户目录下需要配置 Claude Code 的环境变量。
Windows 上配置文件一般在:
C:\Users\你的用户名\.claude\settings.json
基础配置类似这样:
{
"env": {
"ANTHROPIC_BASE_URL": "https://api.xiaomimimo.com/anthropic",
"ANTHROPIC_AUTH_TOKEN": "sk-你的MiMo API Key",
"ANTHROPIC_MODEL": "mimo-v2.5-pro",
"ANTHROPIC_DEFAULT_SONNET_MODEL": "mimo-v2.5-pro",
"ANTHROPIC_DEFAULT_OPUS_MODEL": "mimo-v2.5-pro",
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "mimo-v2.5-pro"
}
}
如果使用 VS Code 插件,也可以在 VS Code 用户设置里配置:
C:\Users\你的用户名\AppData\Roaming\Code\User\settings.json
对应配置大概是:
{
"claudeCode.selectedModel": "mimo-v2.5-pro",
"claudeCode.environmentVariables": [
{
"name": "ANTHROPIC_BASE_URL",
"value": "https://api.xiaomimimo.com/anthropic"
},
{
"name": "ANTHROPIC_AUTH_TOKEN",
"value": "sk-你的MiMo API Key"
},
{
"name": "ANTHROPIC_MODEL",
"value": "mimo-v2.5-pro"
},
{
"name": "ANTHROPIC_DEFAULT_SONNET_MODEL",
"value": "mimo-v2.5-pro"
},
{
"name": "ANTHROPIC_DEFAULT_OPUS_MODEL",
"value": "mimo-v2.5-pro"
},
{
"name": "ANTHROPIC_DEFAULT_HAIKU_MODEL",
"value": "mimo-v2.5-pro"
}
]
}
配置完成后,我运行:
claude
结果报错:
API Error: 400 messages[1].role must be either 'user' or 'assistant', but got 'system'
从错误语义判断:这是请求体结构问题
这个错误本身已经把方向说得很清楚了,它不是鉴权问题,也不是网络连通性问题。鉴权失败通常会表现为 401、403,或者直接提示 token/key 无效。而这里的报错非常明确:
messages[1].role must be either 'user' or 'assistant', but got 'system'
也就是说,请求已经到达 MiMo 接口,MiMo 在校验请求体时发现 messages 数组里的某一条消息角色不合法。
为了把问题边界收窄,我单独用一个最小 Anthropic Messages API 请求测试过 MiMo 接口:
{
"model": "mimo-v2.5-pro",
"max_tokens": 16,
"system": "You are a helpful assistant.",
"messages": [
{
"role": "user",
"content": "只回复 OK"
}
]
}
这个请求可以成功返回,说明基础链路是通的:
认证可以通过
Base URL 可以访问
模型 ID 可以被 MiMo 识别
标准 Anthropic Messages 请求可以正常返回
真正的问题在 Claude Code 默认模式发出的请求结构上。
为什么会出现 messages[1].role = system
Anthropic Messages API 的正常结构里,系统提示词应该放在顶层 system 字段,而不是放进 messages 数组里。
也就是说,比较标准的请求应该像这样:
{
"system": "这里是系统提示词",
"messages": [
{
"role": "user",
"content": "你好"
},
{
"role": "assistant",
"content": "你好,有什么可以帮你?"
}
]
}
messages 数组里的 role 一般只能是:
user
assistant
而我遇到的报错说明 Claude Code 在某些默认运行路径下,会让 MiMo 收到类似这样的结构:
{
"messages": [
{
"role": "user",
"content": "..."
},
{
"role": "system",
"content": "..."
}
]
}
MiMo 的 Anthropic 兼容层比较严格,看到 messages 里面出现 system,就直接返回 400。
这不是凭证类错误,而是第三方兼容接口和 Claude Code 当前默认请求结构之间的兼容问题。
解决方案:开启 CLAUDE_CODE_SIMPLE
最终我没有降级 Claude Code,也没有换模型,而是在 Claude Code 配置里加入了:
CLAUDE_CODE_SIMPLE=1
同时保留了:
CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1
最终我的 C:\Users\你的用户名\.claude\settings.json 配置如下:
{
"env": {
"ANTHROPIC_BASE_URL": "https://api.xiaomimimo.com/anthropic",
"ANTHROPIC_AUTH_TOKEN": "sk-你的MiMo API Key",
"ANTHROPIC_MODEL": "mimo-v2.5-pro",
"ANTHROPIC_DEFAULT_SONNET_MODEL": "mimo-v2.5-pro",
"ANTHROPIC_DEFAULT_OPUS_MODEL": "mimo-v2.5-pro",
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "mimo-v2.5-pro",
"CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS": "1",
"CLAUDE_CODE_SIMPLE": "1"
}
}
VS Code 用户配置里也同步加入:
{
"name": "CLAUDE_CODE_SIMPLE",
"value": "1"
}
以及:
{
"name": "CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS",
"value": "1"
}
CLAUDE_CODE_SIMPLE 为什么有用
Claude Code 的 --bare 模式会启用一个更简单的运行路径,而 --bare 内部会设置:
CLAUDE_CODE_SIMPLE=1
这个模式会减少 Claude Code 默认启动时的一些复杂能力,例如 hooks、skills、plugins、MCP 自动发现、自动 memory、CLAUDE.md 自动发现等。
简单理解就是:Claude Code 默认模式会带很多本地上下文、插件、自动发现和系统提示相关能力;这些能力在官方 Anthropic 服务里通常没问题,但通过 MiMo 这种 Anthropic 兼容接口时,请求结构可能会踩到兼容层的限制。
开启:
CLAUDE_CODE_SIMPLE=1
之后,Claude Code 发出的请求更简单,MiMo 不再收到 messages 数组里的异常 system 角色,所以就能正常返回了。
我修完之后测试:
claude -p "Reply with exactly OK." --max-turns 1
可以正常返回:
OK
说明 Claude Code CLI、MiMo 认证配置、Base URL 和模型配置都已经跑通。
后续又遇到 messages[13].role = system
本来以为问题到这里结束了,结果后面继续使用 Claude Code 时,又出现了类似错误:
API Error: 400 messages[13].role must be either 'user' or 'assistant', but got 'system'
这次和第一次不太一样。
第一次是:
messages[1].role
说明一开始请求就有问题。
第二次是:
messages[13].role
这说明前面已经有多轮上下文了,直到第 14 条历史消息附近,才出现了一个 system 角色。
继续排查后发现,我在这个会话里使用过 Claude Code 的一些本地斜杠命令,例如:
/effort
/agents
/btw
这些命令不是普通聊天内容,而是 Claude Code 本地的控制命令。Claude Code 会在本地会话历史里记录一些系统事件,例如:
type: system
subtype: local_command
或者:
type: system
subtype: turn_duration
当继续这个旧会话时,Claude Code 可能会把这些本地系统事件也带进历史上下文。MiMo 的兼容接口看到 messages 数组里又出现了 system,于是再次返回 400。
所以第二个错误的原因不是 CLAUDE_CODE_SIMPLE 没生效,而是当前会话历史已经被本地斜杠命令产生的 system 事件污染了。
解决第二个错误的方法
如果遇到:
API Error: 400 messages[13].role must be either 'user' or 'assistant', but got 'system'
我的处理建议是:
1. 不要继续 resume 这个旧会话
不要使用:
claude -c
也不要从 /resume 里继续选择这个已经报错的会话。
直接新开一个干净会话:
claude
2. 避免在 MiMo 接入下使用某些斜杠命令
在 MiMo 当前兼容层下,尽量不要在同一个会话里使用这些命令:
/effort
/agents
/btw
这些命令可能会写入本地 system 事件,后面继续对话时又触发 400。
3. 不要在 MiMo 接入下固定 xhigh / ultracode
我还遇到过另一个提示:
There's an issue with the selected model (mimo-V2.5-pro). It may not exist or you may not have access to it. Run /model to pick a different model.
这个提示容易让人误解成 MiMo 模型不可用,但结合 Claude Code 官方模型配置文档来看,更合理的解释是:/effort、/model 这类 Claude Code 内置模型能力选择,本来是围绕 Claude 自家模型设计的。
官方文档里写得很明确:effort level 是 Claude Code 的 adaptive reasoning 配置,支持范围取决于模型。当前列出的支持模型是 Opus 4.8、Opus 4.7、Opus 4.6 和 Sonnet 4.6;xhigh 只出现在 Opus 4.8 / Opus 4.7 这一档。MiMo 的 mimo-v2.5-pro 是通过 Anthropic 兼容协议接入的第三方模型,不属于 Claude Code 官方模型选择器里的 Claude 模型。
所以在 MiMo 接入场景下,我不建议把配置写成:
{
"effortLevel": "xhigh"
}
也不建议通过 /effort 切到 xhigh 或 ultracode。
另外还要注意模型 ID 的大小写。MiMo 官方 Claude Code 文档里的模型 ID 是:
mimo-v2.5-pro
而不是:
mimo-V2.5-pro
如果某次 /model 或其他操作让 Claude Code 里残留了大小写不一致的模型名,就可能触发 There's an issue with the selected model (...) 这类模型校验提示。遇到这种情况,可以检查并清理这些位置里的 stale model 值:
命令行启动时的 --model 参数
ANTHROPIC_MODEL 环境变量
项目级 .claude/settings.json
项目级 .claude/settings.local.json
用户级 ~/.claude/settings.json
VS Code 的 claudeCode.selectedModel
我最终的做法是:保持 MiMo 官方文档里的小写模型 ID,移除 effortLevel,不在 MiMo 会话里使用 /effort 调整 Claude 自家模型的 reasoning 档位。
最终推荐配置
CLI 推荐配置:
{
"env": {
"ANTHROPIC_BASE_URL": "https://api.xiaomimimo.com/anthropic",
"ANTHROPIC_AUTH_TOKEN": "sk-你的MiMo API Key",
"ANTHROPIC_MODEL": "mimo-v2.5-pro",
"ANTHROPIC_DEFAULT_SONNET_MODEL": "mimo-v2.5-pro",
"ANTHROPIC_DEFAULT_OPUS_MODEL": "mimo-v2.5-pro",
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "mimo-v2.5-pro",
"CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS": "1",
"CLAUDE_CODE_SIMPLE": "1"
}
}
VS Code 推荐同步配置:
{
"claudeCode.selectedModel": "mimo-v2.5-pro",
"claudeCode.environmentVariables": [
{
"name": "ANTHROPIC_BASE_URL",
"value": "https://api.xiaomimimo.com/anthropic"
},
{
"name": "ANTHROPIC_AUTH_TOKEN",
"value": "sk-你的MiMo API Key"
},
{
"name": "ANTHROPIC_MODEL",
"value": "mimo-v2.5-pro"
},
{
"name": "ANTHROPIC_DEFAULT_SONNET_MODEL",
"value": "mimo-v2.5-pro"
},
{
"name": "ANTHROPIC_DEFAULT_OPUS_MODEL",
"value": "mimo-v2.5-pro"
},
{
"name": "ANTHROPIC_DEFAULT_HAIKU_MODEL",
"value": "mimo-v2.5-pro"
},
{
"name": "CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS",
"value": "1"
},
{
"name": "CLAUDE_CODE_SIMPLE",
"value": "1"
}
]
}
排查命令
确认版本:
node -v
npm -v
claude --version
最小测试:
claude -p "Reply with exactly OK." --max-turns 1
如果返回类似:
OK
说明基本链路已经通了。
如果还是报:
messages[x].role must be either 'user' or 'assistant', but got 'system'
可以优先检查:
1. settings.json 里是否加了 CLAUDE_CODE_SIMPLE=1
2. 是否正在继续一个旧会话
3. 旧会话里是否使用过 /effort、/agents、/btw 等斜杠命令
4. 是否配置了 effortLevel: xhigh,或者在 MiMo 会话里使用过 /effort、ultracode
5. 模型 ID 是否严格使用 MiMo 官方文档里的小写 mimo-v2.5-pro
6. VS Code 是否完全重启过
总结
这次问题的核心是 Claude Code 当前默认请求结构和 MiMo Anthropic 兼容接口之间存在兼容差异。
第一个错误:
messages[1].role got system
主要通过开启:
CLAUDE_CODE_SIMPLE=1
解决。
第二个错误:
messages[13].role got system
一般是旧会话历史里混入了 Claude Code 本地斜杠命令产生的 system 事件。解决方式是新开干净会话,并尽量避免在 MiMo 接入下使用 /effort、/agents、/btw 这类会污染历史的命令。
最终,我没有降级 Claude Code,仍然使用:
Claude Code 2.1.154
MiMo mimo-v2.5-pro
通过 CLAUDE_CODE_SIMPLE=1 和干净会话,成功跑通了 MiMo 接入 Claude Code。
参考资料
- MiMo 官方 Claude Code 配置文档:
https://platform.xiaomimimo.com/docs/zh-CN/integration/claudecode - MiMo Anthropic API 文档:
https://platform.xiaomimimo.com/docs/api/chat/anthropic-api - Claude Code Model Configuration:
https://code.claude.com/docs/en/model-config - Claude Code Error Reference:
https://code.claude.com/docs/en/errors
更多推荐


所有评论(0)