Gemini API 模型下线后会被路由到哪
12 月 1 日起 gemini-2.5-pro 自动路由到 gemini-3.8-flash 并按后者计费,2.5-flash 路由到 3.5-flash-lite。(核验 2026-11-05,F29、F30)
一、Gemini API 模型下线后会被路由到哪:问题不是报错,而是悄悄换了模型还照收钱
大多数人以为模型下线是这样的:某天请求突然失败,报错写着模型不存在,你改个名字就好了。
官方现在的做法不是这样。老模型不会报错,会被自动路由到接替模型,并按新模型的费率计费。具体两条:
| 请求的模型 | 路由到 | 生效日 | 计费 |
|---|---|---|---|
gemini-2.5-pro |
gemini-3.8-flash |
12 月 1 日 | 按 3.8 Flash 费率 |
gemini-2.5-flash |
gemini-3.5-flash-lite |
12 月 1 日 | 按新费率 |
两条都出自官方弃用页(F29、F30)。官方在变更日志里还专门提醒:在那天之前把模型字符串改掉(F60)。
这件事的杀伤力在于它没有任何报错。你的代码还写着 gemini-2.5-pro,日志里也没有异常,只是输出的口吻变了、延迟变了、账单变了。等你发现,可能已经跑了两周。
二、Gemini API 路由检测:最小可运行示例
唯一可靠的检测点是响应里的 model 字段:你请求的名字和它返回的名字不一致,就说明被路由了。
## EXPECT: 请求 gemini-2.5-pro | 响应 gemini-3.8-flash | 已被自动路由=True | 计费按 3.8 Flash:输入 $0.75/1M,输出 $3.75/1M
REQUESTED = "gemini-2.5-pro"
RESPONSE = {"model": "gemini-3.8-flash", "output_text": "……"}
FLASH_PRICE = {"input": "0.75", "output": "3.75"}
def routed(req, resp):
return req != resp["model"]
def billed_model(resp):
# 路由后按被路由到的模型计费,不是按你请求里写的名字
return resp["model"]
assert routed(REQUESTED, RESPONSE) is True
assert billed_model(RESPONSE) == "gemini-3.8-flash"
print(f"请求 {REQUESTED} | 响应 {RESPONSE['model']} | 已被自动路由={routed(REQUESTED, RESPONSE)} | "
f"计费按 3.8 Flash:输入 ${FLASH_PRICE['input']}/1M,输出 ${FLASH_PRICE['output']}/1M")
价格写在 FLASH_PRICE 里只是示意,真实值要按价格页填,而且它有生效期——3.8 Flash 的 $0.75/$3.75 只到 December 31, 2026,之后翻倍(F34)。所以这个常量也不能真的写死。
三、解释与边界:三个信号、一条禁令
信号一:响应 model 字段与请求不一致。 这是唯一能当场发现的信号,加一行日志就能留下证据。建议把「请求模型 / 响应模型」成对打日志,而不是只打一个。
信号二:账单里单价变了。 同样的调用量,某天开始贵了一个量级,而你并没有改模型——很可能就是路由到更贵的模型了。Argon 与 Flash 的差价见 3.3。
信号三:变更日志里出现 deprecation 条目。 路由不是突发的,官方会先在变更日志公布,再在弃用页登记关停日(F71)。订阅这两个页面比出事再查快得多。
一条禁令:不要用「请求成功」判断模型还在。 自动路由的设计目标恰恰是让你察觉不到。判断「还在不在」只有两个办法:查弃用页,或者比对响应的 model。
边界。 本教程不教怎么「锁死」某个模型不让你被路由——官方提供路径是改模型字符串或走企业版渠道,具体以官方说明为准,不在正文臆造参数。
四、预期输出与异常分支
真跑输出:
请求 gemini-2.5-pro | 响应 gemini-3.8-flash | 已被自动路由=True | 计费按 3.8 Flash:输入 $0.75/1M,输出 $3.75/1M
三种分支。响应里没有 model 字段:说明你用的 SDK 版本把响应包了一层,去原始响应里找,别直接判定「没被路由」。请求与响应名字一致但账单变了:这不是路由,是价格切换(3.8 Flash 与 Argon 都有明确的切换日,F33、F34),两种原因要分开查。名字一致、账单也没变,但输出风格变了:那是另一回事,可能是同一模型的服务端更新,去变更日志翻当天条目。
还有一种最坏的情况:你请求的是 gemini-2.5-pro,路由到 gemini-3.8-flash 之后,你以为自己还在用 Pro,于是向客户承诺了 Pro 的能力。这类问题不会在监控里出现,只会在复盘时出现。
五、判据卡:什么信号说明请求已被自动路由
| 该这么做 | 不该这么做 |
|---|---|
| 日志成对记录请求模型与响应模型 | 只记响应内容,不记模型名 |
| 路由命中时告警,而不是静默通过 | 认为「没报错就是没问题」 |
| 在官方给的日期前改模型字符串 | 等路由发生后再排查账单 |
| 价格常量带生效期,不写死 | 把 $0.75 当成长期单价 |
六、来源与核验
https://aistudio.google.com/docs/deprecations.md(核验 2026-11-05,F29、F30、F71)https://aistudio.google.com/docs/changelog.md(核验 2026-11-05,F60)https://aistudio.google.com/docs/pricing.md(核验 2026-11-05,F33、F34)
自动路由的生效日是 12 月 1 日,本节结论会随该日期变化,复核周期一个月,见 1.3。若那天之后官方调整了路由目标或费率,以弃用页与价格页原文为准。
七、动手试
- 把
RESPONSE["model"]改成"gemini-2.5-pro",重跑。预期已被自动路由=False;验收标准是你能说清「为什么名字一致时,账单仍可能变了」。 - 给
routed加一条规则:当请求与响应都含preview但名字不同时返回"preview 换版"。验收标准:输出能区分「下线路由」与「preview 换版」,并说明两者处理方式为什么不同。 - 查你自己的项目日志,看看有没有记录模型名。验收标准:能找到一行同时含请求模型与响应模型的日志;找不到,就在下一次发布里补上,这比事后对账便宜得多。

TRAE-AI编程


更多建议: