codecamp

Gemini thinking_level 怎么取舍

Gemini 的 thinking_level 分 low/medium/high(部分模型还有 minimal);max_output_tokens 包含思考 token,撞上限会 incomplete 且照常计费。(核验 2026-11-05,F107、F108)

一、Gemini thinking_level 怎么取舍:问题在输出上限吃掉了思考预算

「想得更久就更准」——这句话大体成立,但它掩盖了一个更实际的问题:思考也是要占输出预算的。

官方的机制是这样:max_output_tokens 是硬上限,而且包含思考 token(F108)。当模型想着想着撞到这个上限,它不会「少想一点再答」,而是直接停下来,状态变成 incomplete,输出被截断甚至为空——而已经生成的思考 token 照常计费(F108)。

换句话说,把 max_output_tokens 设小,并不能省钱。你付了思考的钱,却只拿到半截答案。官方对此的建议也很直接:想降成本或降延迟,去降 thinking_level,别去掐输出上限(F108)。

另一个容易忽略的点:档位不是所有模型都一样。gemini-4-argon 与 gemini-3.8-flash 默认 medium,可选范围是 low/medium/high 三档;gemini-3.5-flash-lite 默认 minimal,可选范围是四档(多出 minimal);gemini-3-pro-preview 更窄,只剩 low 与 high(F107)。所以「统一写死 medium」这种团队规范,跨模型时会失效。

二、thinking_level 与输出上限的取舍:最小可运行示例

把「任务复杂度 + 思考量 + 输出上限」三者放进一个判断函数,取舍就有据可依。

## EXPECT: 简单任务 → low | 一致性任务 → medium | 多步任务 → high | 思考占满上限 → 先降档(撞上限仍计费)
LIMIT = 65536
LEVEL_BY_TASK = {"simple": "low", "consistent": "medium", "multi_step": "high"}

def advise(complexity, thought_tokens, max_output=LIMIT):
    if thought_tokens >= max_output:
        return "先降档(撞上限仍计费)"
    return LEVEL_BY_TASK[complexity]

assert advise("simple", 10) == "low"
assert advise("consistent", 10) == "medium"
assert advise("multi_step", 10) == "high"
assert advise("multi_step", LIMIT) == "先降档(撞上限仍计费)"
print(f"简单任务 → {advise('simple', 10)} | 一致性任务 → {advise('consistent', 10)} | "
      f"多步任务 → {advise('multi_step', 10)} | 思考占满上限 → {advise('multi_step', LIMIT)}")

最后一条断言是这一节的重点:当思考量已经等于输出上限时,无论任务是难是易,正确动作都不是「再给点预算」,而是「把档位降下来」。

这里要把一个常见误解说清:加大 max_output_tokens 本身不花钱,也不改变模型怎么分配思考。官方说它是基础设施层强制的硬截断,截断归截断,思考预算仍由 thinking_level 决定(F108)。所以「撞了就加上限」的问题不在贵,而在没用——思考会把新预算再吃满一轮。什么时候加上限是对的?当你要的是更长的答案、也愿意为它付钱时,那是 long decode 的用法(见 9.3);而当截断的原因是思考吃掉了预算,该动的是档位。这两种情况看起来都是「输出不够长」,处理方式正好相反。

三、解释与边界:五个判断顺序

第一,先看模型支持哪些档。 写死 minimal 在 Gemini 4 上会落空——它只支持 low/medium/high(F107)。稳妥的做法是从模型配置里读可选档位,而不是在代码里硬编码字符串。

第二,默认值是 medium,但不同模型不同。 Gemini 4 与 3.8 Flash 默认开 medium,3.5 Flash-Lite 默认 minimal(F107)。这意味着「不设档位」不等于「用同一个档位」,跨模型对比延迟时会得出错误结论。

第三,max_output_tokens 要按「输出 + 思考」估。 它包含思考 token(F108)。如果你按「答案大概多长」来设这个值,遇到复杂任务就会撞上限。合理的做法是给一个宽松的上限,用档位去控成本,而不是用小上限去控。

第四,撞上限的代价是双份的。 状态变 incomplete、答案被截断,但思考 token 已经计费(F108)。这等于花钱买了一个不能用的结果。检测方式很直接:看到 incomplete 就先查 max_output_tokens 与思考量的比例,而不是去调提示词。

第五,旧字段是整数预算,不是枚举。 如果你从 generateContent 时代过来,配置里可能还写着 thinkingBudget——那是一个整数,表示「希望模型生成多少思考 token」;thinking_level 是枚举,表示「想多深」(F117)。两者不是同一个维度的开关,官方在 api-reference 里把它标为推荐 Gemini 3 及以后,对更早的模型使用会直接报错。所以迁移要按模型分叉:新模型用 level,老模型留 budget,别在一个配置里混写。这一点和旧键静默失效那类陷阱不同(见 5.2)——它会报出来,反而好查。

档位选择的三个经验值。 字段抽取、分类、格式转换这类「答案空间很小」的任务,low 通常够;代码生成、多段改写这类「需要保持一致性」的任务,medium 更稳;多步数学、跨文档比对这类「一步错步步错」的任务,才值得上 high。这三条不是官方口径,是从错误代价倒推的经验:越是错了就全盘皆输的任务,越值得多花思考 token。

思考 token 也按输出价计。 输出价包含思考 token(F35),所以档位直接乘在账单上:从 medium 调到 high,输出那部分可能明显上涨,而输入部分一分没变。做 A/B 测试时要把这两项分开看,否则很容易误判成「模型变贵了」。

别用「感觉更聪明」当调档依据。 同一个请求跑两次不同档位,输出长度与措辞都会变,人很容易把「更长」当成「更准」。可操作的做法是准备一组带标准答案的样本,固定评分规则再比;没有这个前提,调档只是在换风格。

边界。 本节只谈档位与输出上限的取舍。思考签名的连续性见 9.2;共享 1M 窗口与默认输出上限的预算算法见 9.3;采样参数(temperature 那套)为什么失效,见 4.3。

四、预期输出与异常分支

真跑输出:

简单任务 → low | 一致性任务 → medium | 多步任务 → high | 思考占满上限 → 先降档(撞上限仍计费)

六类分支。为了省钱把 max_output_tokens 设小:思考照常生成、照常计费,输出却更早截断,钱花了答案没了(F108)。全量用 high:延迟与成本一起涨,而多数请求并不需要。写死 minimal:在不支持该档的模型上不生效或报错(F107)。把 incomplete 当成失败重试:重试还是同样的上限、同样的截断,应该先降档。以为不设档位就等于「关掉思考」:多数模型默认开着,但 gemini-2.5-flash-lite 的默认值是 Off(F107)——「不设」不等于统一行为,得去查模型表。用 temperature 试图「更严谨」:新代际已经忽略这类参数,见 4.3。

五、判据卡:循环或截断时先调什么

该这么做 不该这么做
截断就降 thinking_level 加大 max_output_tokens 硬扛
按模型读可选档位 在代码里写死 minimal
上限按「答案 + 思考」估 只按答案长度设上限
看到 incomplete 先查上限比例 先去改提示词
新模型用 thinking_level、老模型留 thinkingBudget 一个配置里混写两套字段

六、来源与核验

  • https://aistudio.google.com/docs/thinking.md(核验 2026-11-05,F107、F108、F109、F110)
  • https://aistudio.google.com/docs/text-generation.md(核验 2026-11-05,F76)

档位与输出上限属于「模型/价格」档事实,复核周期一个月,见 1.3。各模型支持的档位会随新版本变化,正文里的模型名要跟着模型页一起复核。

七、动手试

  1. 把 advise 最后一个调用的思考量改成 LIMIT - 1,重跑。预期返回 high;验收标准是你能说清「差一个 token 时为什么还允许开 high,而正好占满时要降档」。
  2. 给 advise 加一个 supported_levels 参数,传入模型支持的档位列表;当建议的档位不在列表里时,降级到最近的可用档。验收标准:给 Gemini 4 传 ["low","medium","high"]、给 3.5 Flash-Lite 传含 minimal 的列表,两次结果都合法。
  3. 打开你项目里设置 max_output_tokens 的那一行,看它是按什么估的。验收标准:能说出「这个值里给思考留了多少」;说不出来,说明它大概率是按答案长度拍的。
Gemini 音视频 token 怎么控
Gemini 思考签名丢了怎么办
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }