gemini-3-pro-image(Nano Banana Pro)的开发者,解释响应 JSON 的输出结构与 usageMetadata 各字段的实际含义,并说明几个看起来像异常、实际是模型固有行为的计数现象。全部结论来自对生产网关的实测(48 次文生图 + 18 次图片编辑),并与谷歌官方文档(ai.google.dev/gemini-api/docs/image-generation)交叉核对,非推测。
响应的整体结构
API易 的 nano banana 系列走 Google 原生格式,响应顶层固定四个字段:成功出图时
被安全策略拦截时
HTTP 状态码仍是 200,区别在 candidate 内部:finishReason取值实测有三种:IMAGE_SAFETY(输出图违规)、PROHIBITED_CONTENT(触发禁用政策,附带finishMessage说明)、NO_IMAGE(未生成图片,通常秒回)。- 拒绝说明放在
finishMessage字段里,不会以文本 part 形式出现在parts中。 - 解析代码务必兼容
parts为null的情况,否则拦截响应会导致报错。
usageMetadata 字段含义
成功出图时固定 6 个字段:
图片 tokens 由分辨率档决定,与宽高比无关:1K 与 2K 档均为 1120 tokens/张,4K 档为 2000 tokens/张;宽高比只改变像素尺寸,不改变 token 数。一次返回 N 张图则 details 精确等于 N × 单张值。
下表为谷歌官方给出的 Pro Image 宽高比与图片大小对照(来源:
ai.google.dev/gemini-api/docs/image-generation),与我们对 gemini-3-pro-image 的实测完全一致:
官方中文版文档把英文表头
1K tokens(即”1K 档的 token 数”)直译成了「1,000 个 token」,容易被误读成”每张 1000 tokens”——实际按张计的 token 数以单元格数值为准:1K/2K 档每张 1120,4K 档每张 2000。另外 512px 档(747 tokens/张)仅 Flash 系列图片模型支持,gemini-3-pro-image 只有 1K/2K/4K 三档;Nano Banana 2 Lite(gemini-3.1-flash-lite-image)比较特殊,本身只有 1K 一档,不含 512px。三个”看起来像异常”的现象及解释
现象一:candidatesTokenCount ≠ candidatesTokensDetails 之和 —— 正常,必然如此
实测 100%(49/49 成功出图样本)满足:candidatesTokenCount 比 details 之和大 88–630 tokens(提示词越复杂、返回图片越多,差值越大)。
原因:candidatesTokensDetails 只统计图片本体(固定 1120/2000 每张);而 candidatesTokenCount 还包含图像生成过程伴随的内部 tokens,这部分没有对应的 modality 条目。这是 Gemini 原生计数口径,API易 透传不做改写。
结论:请勿把 details 当作
candidatesTokenCount 的完整分解来校验;对账、计费一律以 candidatesTokenCount / totalTokenCount 为准,details 仅用于估算图片部分的占比。现象二:totalTokenCount ≠ prompt + candidates + thoughts —— 只发生在无图输出的响应上
- 正常出图时,等式严格成立(49/49):
total = promptTokenCount + candidatesTokenCount + thoughtsTokenCount。 - 被安全拦截(无图输出)时,等式必然不成立(6/6),且模式固定:
candidatesTokenCount 是 thoughtsTokenCount 的镜像值,三项相加会把思考多算一份。这同样是上游固有行为。totalTokenCount 本身是准的,直接用它即可;如果你的日志里有约 10% 的响应”等式不平”,请核对这些响应是否 parts 为空——大概率正是安全拦截样本。
现象三:输出 tokens 偶尔高达 6000+ —— 来自思考过程返回的多张图片 part
谷歌官方文档说明,Gemini 3 图片模型是思考型模型:默认启用”思考”且无法在 API 中关闭,模型会生成临时图片来测试构图和逻辑,且”思考中的最后一张图片也是最终渲染的图片”(来源:ai.google.dev/gemini-api/docs/image-generation 思考过程章节)。
实测中,这些思考中间稿在原生 generateContent 响应里以普通图片 part 的形式返回:每个 part 都带 thoughtSignature 字段、但没有 thought: true 标记,并且每张都按 1120 tokens 计入 candidatesTokensDetails。官方称思考最多生成两张临时图片,但复杂任务型提示词下实测单次返回最多见 10 张 part。usage 随图片数严格线性增长:
而
thoughtsTokenCount 字段只统计文本思考,实测从未超过 400——高输出 tokens 的来源是图片 part 的张数,不是这个字段。看到 6000+ 甚至上万的输出 tokens 时,请检查该响应的 parts 数量——几乎可以确定是多图响应,属于正常计费(对账仍以 totalTokenCount 为准)。
思考等级与两种 API 范式
thinkingLevel 对 tokens 的影响
思考等级控制仅 Gemini 3.1 Flash Image / Flash Lite Image 支持(generationConfig.thinkingConfig.thinkingLevel,默认 minimal,可选 high);gemini-3-pro-image 的思考恒开、无法调节。实测(同一提示词、1K 文生图,经 API易 网关):
- high 只增加思考 tokens 与延迟,不改变图片 tokens(仍为每张 1120)。
- 给
gemini-3-pro-image传thinkingLevel不会报错,但实测无效果,思考 tokens 仍在默认区间。 includeThoughts: true实测不改变返回结构与计费;官方明确:无论是否查看思考过程,思考 tokens 都默认计费。- 官方说明”最少思考并不意味着模型完全不进行思考”——minimal 下只是 usage 里不再单列
thoughtsTokenCount字段。
Nano Banana 2 Lite(
gemini-3.1-flash-lite-image)与 Nano Banana 2 同属 3.1 Flash 系列,同样支持 thinkingLevel 调节,机制与上表一致;但暂未单独实测收录进上表,具体价格明细见 Nano Banana 系列价格总览。图片模型与文本模型的思考 tokens 有何不同
- 文本思考模型:思考产物是文本,
thoughtsTokenCount可达数千,按输出 token 价计费;官方定价按模型内部生成的完整思考计,即使 API 只返回思考摘要(来源:ai.google.dev/gemini-api/docs/thinking价格章节)。 - 图片思考模型:思考产物有两类——少量文本思考计入
thoughtsTokenCount(实测 Pro 不超过 400、Flash high 档约 800),以及中间稿图片,后者以普通图片 part 返回、按每张 1120/2000 tokens 计入candidatesTokenCount。因此图片模型”思考的成本”主要体现在图片 part 的张数上,而不是thoughtsTokenCount字段(见上文现象三)。
两种 API 范式
谷歌的图片模型文档现有两个版本:经典的 generateContent API(无状态)与新推荐的 Interactions API(面向 Agent 与工具调用)。API易 网关走 Google 原生 generateContent 格式,本文全部结构与字段均以此为准。两者的思考相关差异:
两种范式的完整对比(端点、状态管理、数据保留、API易 网关兼容性实测)见 Interactions API 与 generateContent 对比。
解析与对账最佳实践
- 计费对账用
totalTokenCount(拒绝场景下它也是准的),不要自行用三项相加或 details 求和去校验。 - 遍历 parts,不假设单图;按张计数的业务以实际
inlineDatapart 数为准。 - 兼容
parts = null+ HTTP 200 的拦截响应,按finishReason分流。 - 简单编辑耗时 ~22–25s,复杂任务(多图响应)35–142s,张数越多越久;客户端超时建议设置 ≥ 5 分钟(含代理层)。
相关文档
Nano Banana 开发指南
接入方式、输入图片要求、计费基础、超时设置与偶现多图说明
错误处理指南
出图失败的三大判断指标、内容审核政策与友好提示方案
出图失败保障计划
非主观原因导致的失败,按条数核算后补发额度
Nano Banana 价格
各分辨率与各模型档位的出图价格