30 秒解决
在 ~/.claude/settings.json 里加一段:
json
{
"modelOverrides": {
"claude-opus-5-5": "deepseek-v4-pro",
"claude-sonnet-5-5": "deepseek-flash",
"claude-haiku-5-5": "deepseek-flash"
}
}
重新跑一次 claude -p "回复ok",那行告警就没了。
下面解释为什么,以及我踩过的坑。
现象:一行看起来像报错的"告警"
用 Claude Code 通过 ANTHROPIC_BASE_URL 接 DeepSeek 跑非交互模式时,stderr 会多出一行:
csharp
[claude-code:unrecognized_model] {"model":"deepseek-v4-pro[1m]","query_source":"sdk"}
ok
注意下面的 ok------请求是成功的。这行不是错误,是"诊断信息":Claude Code 不认识这个模型 ID,所以每次请求都记一笔。
几个特征:
- 每个进程只写一次(子代理的模型会各写一行)
- 交互模式下不显示,写进
~/.claude/debug/日志 query_source是sdk(-p模式)或以agent:开头(子代理)
我的实验:4 组配置对照
为了确定"到底哪个配置项能消掉它",我在同一台机器上做了对照实验(Claude Code 2.1.308 + DeepSeek 官方 Anthropic 端点):
| 配置 | 结果 |
|---|---|
空配置 {} |
❌ 告警出现 |
只有 modelSettings |
❌ 告警仍在 |
只有 modelOverrides |
✅ 告警消失 |
有 modelOverrides,同时直接设第三方模型 ID |
✅ 告警消失 |
结论:只有 modelOverrides 有效。 modelSettings、[1m] 后缀都消不掉它。
顺便验证:[1m] 后缀确实没用
[1m] 只告诉 Claude Code"这个模型是 1M 上下文",用来校正上下文窗口。即使模型 ID 写成 deepseek-v4-pro[1m],unrecognized_model 照刷不误------因为"上下文多大"和"模型认不认识"是两件事。
为什么
Claude Code 内部维护一份"已知模型注册表"(Anthropic 的模型 ID)。你把 ANTHROPIC_MODEL 或 ANTHROPIC_DEFAULT_*_MODEL 设成第三方 ID(deepseek-v4-pro、glm-5.3 这类)时:
- Claude Code 不认识这个 ID
- 也找不到映射把它"翻译"成已知模型
- 于是每次请求写一行诊断
modelOverrides 的作用就是做"别名登记":告诉 Claude Code"把 deepseek-v4-pro 当作 claude-opus-5-5 处理"。这样它既认识了这个模型,上下文窗口、价格口径也一并继承。
修法的三个细节
① key 必须是 Anthropic 模型 ID,不能写家族别名
json
// ✅ 对
"claude-opus-5-5": "deepseek-v4-pro"
// ❌ 错(claude 不认这种写法)
"opus": "deepseek-v4-pro"
② key 必须是你的 Claude Code 版本认识的 ID
claude-opus-5-5 需要较新版本。老版本要换成它认识的老 ID(比如 claude-opus-4-8、claude-opus-4-6),否则映射不生效。
③ 按模型档位选 key,上下文窗口自动对上
| 第三方模型 | 档位 | 建议 key |
|---|---|---|
deepseek-v4-pro |
Opus 档(复杂推理) | claude-opus-5-5 |
deepseek-flash |
Sonnet/Haiku 档(轻量、视觉) | claude-sonnet-5-5 / claude-haiku-5-5 |
别搞混:两个长得很像的告警
| 告警 | 含义 | 处置 |
|---|---|---|
[claude-code:unrecognized_model] {...,"query_source":...} |
模型 ID 未被识别(不影响请求) | modelOverrides;或升级版本;或检查拼写 |
Model "xxx" isn't recognized · context assumed to be 200k tokens |
识别不了 → 上下文窗口被假定 200K | modelOverrides;或给 ID 加 [1m](只修窗口) |
第一个是"诊断行",第二个是"上下文窗口提示"------不是同一件事,处置方式也不同。
完整操作步骤
第 0 步:复现确认
bash
claude -p "回复ok" 2>&1 | head
# 看到 [claude-code:unrecognized_model] ... 即为复现
第 1 步:备份(改前必须)
bash
mkdir -p ~/.claude/backups
cp ~/.claude/settings.json ~/.claude/backups/settings.json.pre-fix
cp ~/.claude.json ~/.claude/backups/.claude.json.pre-fix
第 2 步:加 modelOverrides
编辑 ~/.claude/settings.json,注意 JSON 逗号。
第 3 步:冒烟验证
bash
claude -p "回复ok" 2>&1
# 期望:只输出 ok,不再有 unrecognized_model
第 4 步:失败回滚
bash
cp ~/.claude/backups/settings.json.pre-fix ~/.claude/settings.json
cp ~/.claude/backups/.claude.json.pre-fix ~/.claude.json
附:DeepSeek 官方推荐的 env 配置
bash
export ANTHROPIC_BASE_URL=https://api.deepseek.com/anthropic
export ANTHROPIC_AUTH_TOKEN=<你的 DeepSeek API Key>
export ANTHROPIC_MODEL=deepseek-flash[1m]
export ANTHROPIC_DEFAULT_OPUS_MODEL=deepseek-flash[1m]
export ANTHROPIC_DEFAULT_SONNET_MODEL=deepseek-flash[1m]
export ANTHROPIC_DEFAULT_HAIKU_MODEL=deepseek-flash
export CLAUDE_CODE_SUBAGENT_MODEL=deepseek-flash
export CLAUDE_CODE_AUTO_COMPACT_WINDOW=786432
提醒:这份官方配置的 [1m] 是为了 1M 上下文,它本身不消除 unrecognized_model ,要彻底消掉还是要加 modelOverrides。