[!Warning] 错误概要:
Claude cli v2.1.154 国产模型报400
API Error: 400 Failed to deserialize the JSON body into the target type: messages[1].role: unknown variantsystem, expecteduserorassistantat line 1 column 994`
明确 messages 数组要求的role 不包含 system 项
通过分析发现 是新 beta 请求头 mid_conversation_system 带来的变化
而三方厂商肯定没有跟进
所以现给出解决方法
以 DeepSeek 为例
~/.claude/settings.deepseek.json
{
"env": {
"CLAUDE_CODE_USE_FOUNDRY": "1",
"ANTHROPIC_FOUNDRY_BASE_URL": "https://api.deepseek.com/anthropic",
"ANTHROPIC_FOUNDRY_API_KEY": "sk-",
"ANTHROPIC_DEFAULT_OPUS_MODEL": "deepseek-v4-pro[1m]",
"ANTHROPIC_DEFAULT_OPUS_MODEL_SUPPORTED_CAPABILITIES": "thinking,adaptive_thinking,temperature,effort,max_effort",
"ANTHROPIC_DEFAULT_SONNET_MODEL": "deepseek-v4-flash[1m]",
"ANTHROPIC_DEFAULT_SONNET_MODEL_SUPPORTED_CAPABILITIES": "thinking,adaptive_thinking,temperature,effort,max_effort",
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "deepseek-v4-flash[1m]",
"ANTHROPIC_DEFAULT_HAIKU_MODEL_SUPPORTED_CAPABILITIES": "thinking,adaptive_thinking,temperature,effort,max_effort"
},
"model": "opus",
"effortLevel": "max"
}
claude --settings ~/.claude/settings.deepseek.json
至于 --settings 分配置启动的细节 回顾 Any牌路由器使用清障!
ps: 你可能会疑惑 怎么 一会 路由上写 [1m] 一会不写 用 “model”: “opus[1m]” 来代替的
聪明的你应该发现 [1m] 只能有一处有 至于为什么现在的这个 又改到 路由指定上写了呢
是因为 *_SUPPORTED_CAPABILITIES 需要去匹配模型id (opus[1m] 匹配不到) 所以不得已转了个弯 把 [1m] 写路由指代上去
我自己用哪还折腾这么多 直接Patch干掉! 写这个是为了 用 Claude Desktop 的佬~ 这样不用捣鼓他那破bun捆包了
问题 轻松秒杀~
28 个帖子 - 28 位参与者