
Gemini 3.6 Flash 迁移指南:5 处 API 变化与 1 个静默失效
一句话结论 切到gemini-3.6-flash或gemini-3.5-flash-lite,请求格式有五处变化。其中四处会返回 HTTP 400,你立刻就知道。剩下一处不会:temperature、top_p、top_k现在传了会被收下,然后被忽略。如果你靠temperature=0来保证输出稳定,切过去之后接口照样返回 200,而你原本指望的那个保证已经没了。先修这一处,再修那四处。Last verified: 2026-07-21
如果你打算只改配置文件里的一个模型名、指望别的都照旧,请先读完第一节再上线。
五处变化,按"你多久会发现"排序
| 变化 | 在新模型上会发生什么 | 你怎么发现 |
|---|---|---|
temperature、top_p、top_k | 收下,然后忽略 | 不会发现。不报错,也没有警告。 |
thinking_budget 与 thinking_level 同时传 | 请求被拒 | HTTP 400 |
请求最后一条消息的角色是 model | 请求被拒 | HTTP 400 |
FunctionResponse 缺 call_id 或 name | 请求被拒 | HTTP 400 |
candidate_count | Gemini 3.x 不支持 | 请求失败,或该字段被丢弃 |
五处里有四处会自己喊出来:集成测试能拦住,报错监控会叫你,一个下午就能修完。真正会带着问题进生产环境的,是第一处。
危险的那一处:temperature、top_p、top_k 现在会被静默忽略

哪些流水线会不报错地坏掉
静默的空操作只有在你原本依赖它的时候才危险。常见的依赖有四类:
- 靠确定性吃饭的流水线。 凡是设了
temperature=0好让重复调用结果一致的:用模型输出做缓存键的、做去重的、把分类结果喂给下游状态机的。这个设置现在是惰性的,它原本给你买来的那点输出稳定性,现在买不到了。 - golden file / 快照测试。 那些钉死
temperature=0、把模型输出和存好的期望字符串做 diff 的测试套件。换模型之后它们开始飘,而且飘起来的样子像模型能力退步,不像配置问题,于是你会往错误的方向查。 - 靠低温度维持的结构化输出。 有些团队一直没上结构化输出,而是把
temperature压到接近 0、top_p收紧,让模型稳定吐出能解析的 JSON。现在这两个旋钮同时失效。 - 按路由分别调过的配置。 产品里有"创意程度"滑块的,或者"摘要"用一个温度、"头脑风暴"用另一个温度的。滑块在你的界面上还能拖,但它拖不动模型了。
这四类都不会产生任何堆栈报错。它们产生的是"和你验证过的略有不同"的输出,而系统自报健康。
网关也不会提醒你
这一点连谨慎的团队都会踩。模型网关会发布一份机器可读的元数据,说明每个模型支持哪些参数,上层工具链靠读这份元数据决定该往下传什么。
google/gemini-3.6-flash 和 google/gemini-3.5-flash-lite 的 supported_parameters 仍然列着 temperature、top_p、seed。网关照收照转,模型那头照样忽略。这条链路上没有任何一环会报错,元数据也不会告诉你这个字段已经是死的。拿什么替代 temperature
官方给的替代不是另一个参数,而是 system instruction(系统指令,也就是写在对话最前面、约束模型全局行为的那段话):把你想要的行为写成模型能读到的规则,而不是写成一个采样常数。
这是表达方式的真正改变,所以要做的是"翻译",不是"删除":
| 你原来用数字表达的意图 | 现在写在哪里 |
|---|---|
temperature=0,要简短、可复现的回答 | 写进 system instruction:规定格式、长度、语气,并明确要求不要开场白 |
| 低温度用来保证 JSON 能解析 | 用结构化输出,gemini-3.6-flash 和 gemini-3.5-flash-lite 都支持 |
| 高温度用来要多样性 | 在指令里要求"在一次回复里给出 N 个不同方案",因为 candidate_count 也一并没了 |
temperature 和 candidate_count,也就是把团队做输出多样性的两条路一次性拿掉了。如果你有功能依赖多样性,那需要一次真正的重新设计,不是改个配置。上线前怎么把所有调用点找出来
直接搜参数名,别只信配置层,因为这些值通常散在好几个地方、由不同的人在不同时候设下:
# Gemini 原生写法与 OpenAI 兼容写法,以及承载它们的配置对象
grep -rn "temperature\|top_p\|topP\|top_k\|topK\|candidate_count\|candidateCount" \
--include="*.py" --include="*.ts" --include="*.js" --include="*.go" --include="*.java" .
# 把它们包起来的那层
grep -rn "generation_config\|generationConfig\|GenerateContentConfig\|thinking_budget\|thinkingBudget" .会直接报错的那四处
这四处简单,因为接口会告诉你。按测试套件暴露出来的顺序修就行。
thinking_budget 和 thinking_level 不能同时出现
thinking_level 取代了数字型的 thinking_budget,取值是 minimal、low、medium、high。两个同时传,返回 400。官方的迁移说明是把 thinking_budget 换成 thinking_level,不是为了兼容而两个都留着。选值之前有两个默认档要知道,因为两个模型不一样:
gemini-3.6-flash默认medium。gemini-3.5-flash-lite默认minimal,这是为吞吐量优化的。
minimal 默认档不适合当自主子智能体用,在多步任务上会过早终止工具调用。如果你要让 Flash-Lite 写代码、跑终端命令、调外部 API,就得主动提到 medium 或 high。这是整个迁移里唯一一处"接受默认值"其实是一个产品决策、而不是走过场的地方。minimal 默认档上,在一道三步通知链的题目上三次全挂。三次的形态完全一样:前两个工具都调对了,然后它停下来,报告任务完成,但那封通知根本没发出去。 没有报错、没有异常,返回的是一个格式完整、下游服务会照单全收的响应。同一个模型提到 high 档,三次全过。thinking_level,请求不会失败,它会就一件没做完的事给你一个自信的答复。 所以要显式设档位,并且去断言这个流程本该产生的副作用,而不是断言你拿回来的那个响应。不能再预填模型回合
model,接口返回 400。预填以前是常用技巧:在结尾追加一条半截的助手消息,比如 {"role": "model", "parts": [{"text": "{"}]},逼模型以 JSON 左花括号开头,或者压掉它啰嗦的开场白。每个 FunctionResponse 都要带 call_id 和 name
generateContent 接口时,每个 FunctionResponse 都必须带上对应的 call_id 和函数的 name。最容易中招的是手写的工具调用循环,因为不少是在"回一个结果就够了"的年代写的,它们从零重建响应对象,而不是把模型发过来的东西原样带回去。call_id 留住,回填到你返回的响应上。如果工具循环是基于某个框架搭的,升级框架,别在外面打补丁绕过去。candidate_count 没有了
candidate_count 在 Gemini 3.x 不支持,删掉。如果你原来用它一次采样多个答案再挑最好的,这个逻辑现在得显式写出来:要么在一次回复里要多个方案,要么发多次请求、分别付费。改之前 / 改之后:一个能干净迁移的请求
下面是一个把所有废弃字段都带齐的 Gemini 原生调用,以及能活下来的那一版。
# 改之前:在 2.5 时代的模型上正常,在 3.6 Flash 上要么报错、要么静默走样
config = {
"temperature": 0, # 现在被忽略,不报错
"top_p": 0.95, # 现在被忽略,不报错
"top_k": 40, # 现在被忽略,不报错
"candidate_count": 1, # Gemini 3.x 不支持
"thinking_budget": 8192, # 与 thinking_level 同传则 400
}
# 改之后:意图从采样常数搬进了指令
config = {
"system_instruction": (
"回答不超过三句话。用陈述句。"
"不要写开场白,不要复述问题,不要追问。"
"如果答案不确定,用一句话说明不确定。"
),
"thinking_level": "medium",
}temperature=0,从来不解释自己。import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["EVOLINK_API_KEY"],
base_url="https://api.evolink.ai/v1"
)
response = client.chat.completions.create(
model="gemini-3.6-flash",
messages=[
{"role": "system", "content": "回答不超过三句话,不要开场白。"},
{"role": "user", "content": "总结这份事故报告。"}
]
# 不传 temperature、top_p:传了会被收下,然后在下游被忽略
)
print(response.choices[0].message.content)import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env["EVOLINK_API_KEY"],
baseURL: "https://api.evolink.ai/v1",
});
const response = await client.chat.completions.create({
model: "gemini-3.6-flash",
messages: [
{ role: "system", content: "回答不超过三句话,不要开场白。" },
{ role: "user", content: "总结这份事故报告。" },
],
// 不传 temperature、top_p
});
console.log(response.choices[0].message.content);gemini-3.6-flash,没有 preview 后缀,也没有日期戳,所以没有带日期的别名可以钉。如果你的部署流程假设存在 -preview 或 -001 变体,那个假设会在发请求的那一刻失败。一个能抓住静默失效的迁移顺序
顺序是有讲究的,因为会报错的那几处很容易,不报错的那一处不容易。按这个顺序走:

- 先盘点。 跑上面那两条 grep,把每一个设了采样参数的地方列出来,包括配置中心和后台面板。同时写下每一个当初是在保护什么行为。
- 翻译意图,不要只是删。 每找到一个
temperature,先想清楚它是干什么用的,再写出等价的 system instruction。只删不译,就是在发一次质量退步上线。 - 修那些 400。 把
thinking_budget换成thinking_level,删掉candidate_count,去掉预填的模型回合,给每个FunctionResponse补上call_id和name。 - 主动选一个思考档位,Flash-Lite 上尤其重要,它的
minimal默认档不适合自主多步任务。这也是整个迁移里最大的一个省钱开关:在我们那套任务上,3.6 Flash 跑minimal档比同一个模型跑默认的medium档单次便宜 73.6%,而medium档下思考 token 占了计费输出的 85%。要测的是你的负载能不能扛住降档,不是这笔省钱是不是真的。 - 先用新模型重新生成快照基线,再谈对比。 老的 golden file 是在一个如今已经不起作用的参数下产生的,它不是一个有效的参照物。
- 在同一套任务集上跑新旧两个模型的评测,对比的是输出分布,不只是通过率。静默的行为变化,先体现在格式、长度、啰嗦程度的漂移上,之后才体现为答错。
- 灰度真实流量时盯着下游的解析器,而不是只盯接口错误率。如果有东西要悄悄坏掉,它会坏在消费模型输出的那段代码里,不会坏在调用本身。
temperature=0 还起作用时"生成的 golden file,每一处 diff 看起来都像模型问题,而它们一个都不是。让官方的迁移 skill 先跑一遍
npx skills add google-gemini/gemini-skills --skill gemini-interactions-api --global装好之后,在编码 agent 里指向你的项目:
/gemini-interactions-api migrate my app to Gemini 3.6 Flash
值得跑。它处理的是机械活:找出废弃字段、改写请求构造、更新调用点,上面第 3 步的大部分它都能包。
temperature=0 该删,但它不知道这个值当初是因为某个下游服务假设"同样输入必须得到同样输出"才加上的,它也写不出那条能保住这个意图的 system instruction。 把这个 skill 当成一次代码扫荡,然后意图翻译自己来。关停时间表:什么时候由不得你
| 模型 | 关停日期 | 官方推荐的替代品 |
|---|---|---|
gemini-2.5-flash | 2026-10-16 | gemini-3.6-flash |
gemini-2.5-flash-lite | 2026-10-16 | gemini-3.1-flash-lite |
gemini-3.1-flash-lite | 2027-05-07 | gemini-3.5-flash-lite |
gemini-3-flash-preview | 尚未宣布关停日期 | gemini-3.6-flash |
gemini-3.6-flash、gemini-3.5-flash-lite | 尚未宣布关停日期 | 不适用 |
gemini-2.5-flash-lite 指定的替代品是 gemini-3.1-flash-lite,不是刚发布的 gemini-3.5-flash-lite。你当然可以直接跳到最新的 Lite,但那是你自己的选择、不是官方写明的升级路径,而且那是跨两代而不是一代。要按跨两代的规格去规划和测试。gemini-3-flash-preview,官方没给结束日期,但预览版模型本来就不是能拿来排路线图的东西。Computer Use:四份官方材料,两个答案
有一个能力问题,现在无法从文档里得出结论。这两个模型到底支不支持 Computer Use,Google 自己的材料说法不一致:
- Gemini API 的模型文档标注 3.6 Flash 支持 Computer Use(预览),而同一个模型的企业平台页列的是不支持。
- 3.5 Flash-Lite 这边,模型页说不支持,而发布公告和 Gemini 3 开发者指南说支持。
如果你这周正好在重新选供应商
有两件事值得顺手检查:
- 切换期间你能不能把新旧两个模型并排跑? 上面第 6 步要求你能。如果你现在的接法让
gemini-3.5-flash和gemini-3.6-flash跑同一套任务集这件事很别扭,那这份别扭下次迁移还在,而下次一定会有:官方已经说了,这套规则适用于此后发布的所有模型。 - 一个新模型从发布到你能调用,要多久?
gemini-3.6-flash是第一天就以正式版身份上线的,没有 preview 后缀。模型上线和你的代码能调到它之间的那段时间差,是你每次打新都要付的成本。
model 字符串,而不是接第二套 SDK、配第二份凭证;新模型也从你已经在用的同一个端点接进来。如果你想先看这个模型本身的状态,我们的 Gemini 3.6 Flash 发布追踪有可用渠道和模型 ID 的细节;3.6 Flash 与 3.5 Flash 的对比讲的是这次升级到底该不该做。那是另一个问题:本文讲的是决定要做之后,怎么做才不出事。gemini-3.6-flash 上它们已经不可用了。常见问题
temperature、top_p、top_k 是被收下然后忽略,不报错也没有警告。官方说未来的模型代次会对这些参数返回 HTTP 400,所以这份安静是暂时的;但就现在而言,一个带着这些参数的请求看起来完全健康。thinking_level,取值 minimal、low、medium、high。同一个请求里同时传 thinking_budget 和 thinking_level 会返回 HTTP 400。默认档位 3.6 Flash 是 medium,3.5 Flash-Lite 是 minimal。gemini-3.1-flash-lite,不是 gemini-3.5-flash-lite,关停日期 2026 年 10 月 16 日。你也可以直接换成 3.5 Flash-Lite,但那是跨两代、属于你自己的决定,不是文档给出的升级路径。thinking_level、禁止预填模型回合、FunctionResponse 的新要求、删掉 candidate_count,这些在 gemini-3.5-flash-lite 上全都一样;并且官方说了,此后发布的所有模型都适用。所以代码改法两边相同,你不必先定下切到哪一个才能动手改。 至于选哪一个,那是另一个问题,见我们的 Gemini 3.6 Flash 与 3.5 Flash-Lite 选型对比。gemini-3.6-flash,没有 preview 后缀也没有日期戳。如果你的部署工具链预期存在一个带日期的别名,它会在发请求时失败。参考资料
- Using the latest Gemini models(Google AI for Developers):废弃的采样参数、
thinking_level、candidate_count、预填限制、FunctionResponse要求、迁移 skill 命令 - Gemini deprecations(Google AI for Developers):关停日期与推荐替代品
- Gemini API models(Google AI for Developers):模型 ID 与能力支持矩阵
- Gemini 3 开发者指南(Google AI for Developers):Gemini 3 的请求行为与能力
- Gemini 3.6 Flash(Gemini Enterprise Agent Platform)(Google Cloud):企业侧能力列表与页面上展示的参数默认值
- Introducing Gemini 3.6 Flash, 3.5 Flash-Lite, and 3.5 Flash Cyber(Google):发布公告与发布日期
- google-gemini/gemini-skills(GitHub):官方迁移 skill
- OpenRouter models 接口(OpenRouter):网关元数据仍将
temperature、top_p、seed列为两个模型的支持参数,2026-07-21 观测 - EvoLink 模型目录、Gemini 3.6 Flash 发布追踪、3.6 Flash 与 3.5 Flash 对比、Gemini 3.5 Flash 与 Gemini 3 Flash Preview 迁移指南、Gemini 3 Pro 废弃迁移指南、EvoLink 接口地址


