Gemini 3.7 Flash 模型调用失败排查记录
起因
今天 Hermes 调用 Gemini 3.7 Flash 突然挂了,之前用得好好的,莫名其妙就报错。记录一下整个排查过程。
我的 AI 网关架构是这样的:Hermes → New-API(ai-gateway.nnnnzs.cn)→ cli-proxy-api(CPA)→ Google API。CPA 跑在 VPS 上,负责把 Antigravity 的 OAuth 订阅转成 OpenAI 兼容接口。
Hermes 配置的 provider 是 custom:new-api-codex,模型写的是 gemini-3.7-flash-high。之前一直正常,今天突然不行了。

第一反应:查 Hermes 配置
先看了眼 Hermes 的 config,发现一个可疑的地方:
yaml
reasoning_effort: medium
reasoning_effort: medium 和模型名后缀 -high 冲突了。心想这可能是问题?但改了之后还是一样报错。不是这个原因。
直接 curl 测试
绕过 Hermes,直接 curl 网关:
bash
curl -X POST https://ai-gateway.nnnnzs.cn/v1/chat/completions \
-H "Authorization: Bearer ***" \
-H "Content-Type: application/json" \
-d '{"model": "gemini-3.7-flash-high", "messages": [{"role": "user", "content": "hello"}]}'
返回:
json
{"error": {"message": "unknown provider for model gemini-3.7-flash", "code": 400}}
注意看,请求发的是 gemini-3.7-flash-high,但错误信息里是 gemini-3.7-flash。后缀被吃了。
检查 New-API 渠道
登录 New-API 后台看了下,cpa-gemini 渠道(ID 21)的模型列表里明确有 gemini-3.7-flash-high。
然后试了 /v1/models 接口,返回的列表里 gemini-3.7-flash-high 好好地在那儿。但这个接口只能说明模型在白名单里,不代表能用。
之前就踩过这个坑,/v1/models 只是 New-API 的渠道配置展示,不代表下游真的能处理这个模型。
上 VPS 看 CPA
SSH 到 VPS,一开始用了 root@192.168.80.100,连不上。对了,应该用 nnnnzs@vpc.nnnnzs.cn。
进去之后先看 CPA 容器状态,跑着呢,状态 healthy。再看认证文件,有两个:
gemini-n709934831@gmail.com-gen-lang-client-0528170259.json(gemini 类型)antigravity-n709934831@gmail.com.json(antigravity 类型)
都在,没问题。
看 CPA 日志找到关键线索
翻 CPA 日志,看到请求到达 CPA 了,但 request body 里的 model 是 gemini-3.7-flash——-high 后缀没了!
这就奇怪了,New-API 收到的是 gemini-3.7-flash-high,传到 CPA 怎么就变成 gemini-3.7-flash 了?
查 CPA 的模型注册表
去 GitHub 看了 CPA 用的模型注册表:
bash
curl https://raw.githubusercontent.com/router-for-me/models/refs/heads/main/models.json
里面有两个 provider 的模型映射:
json
{
"gemini": ["gemini-3.7-flash", ...],
"antigravity": ["gemini-3.7-flash-high", ...]
}
看到了吧。gemini-3.7-flash-high 只在 antigravity provider 下注册了,gemini provider 下的是 gemini-3.7-flash(不带后缀)。
根因
CPA 有个逻辑:收到请求时会把模型名的 -high/-medium/-low 后缀去掉,然后去匹配 provider。所以 gemini-3.7-flash-high 变成了 gemini-3.7-flash,匹配到了 gemini provider(用的是 CLI OAuth 的 gen-lang-client 项目)。但这个项目根本没有 gemini-3.7-flash 的访问权限,于是 400 了。
那 antigravity provider 呢?它注册的是 gemini-3.7-flash-high,但 CPA 的后缀剥离逻辑让它永远匹配不到 antigravity。
为什么之前能用
翻了下 CPA 的更新日志,v7.2.139 把 Gemini 3.7 Flash 加进了模型注册表。在那之前,gemini-3.7-flash-high 不在任何 provider 的注册表里,CPA 可能走了 fallback 路由到 antigravity。更新之后,模型被错误地注册到了 gemini provider 下。
另外 Google 这边也改了命名规则,3.7 Flash 的 -high/-medium/-low 后缀变成了独立的模型 ID,不是随便加的修饰词。
修复
在 CPA 配置里加了 oauth-model-alias,强制把去掉后缀的模型名指向 antigravity:
yaml
oauth-model-alias:
antigravity:
- name: gemini-3.7-flash-high
alias: gemini-3.7-flash
- name: gemini-3.6-flash-high
alias: gemini-3.6-flash
重启容器,再测,HTTP 200,两个模型都正常了。
复盘
这次排查走了不少弯路。一开始盯着 Hermes 配置的 reasoning_effort 冲突看,改了没用。然后看 /v1/models 接口以为模型没问题(其实只是白名单展示)。真正的问题藏在 CPA 的后缀剥离逻辑和模型注册表的错位里。
教训就是:/v1/models 列出模型 ≠ 模型能用。要确认能不能用,得直接 curl 发请求看返回。还有,CPA 更新版本后最好检查下模型注册表有没有变化,尤其是命名规则改了的时候。