gemini-3-pro-image(Nano Banana Pro)を呼び出す開発者向けです。レスポンス JSON の出力構造と、各 usageMetadata フィールドが実際に何を意味するのかを説明し、異常に見えるもののモデルに固有の いくつかのカウント挙動を明確にします。ここでの結論はすべて、本番ゲートウェイに対するテスト(テキストから画像への生成 48 件 + 画像編集 18 件)と Google の公式ドキュメント(ai.google.dev/gemini-api/docs/image-generation)との照合に基づいており、推測ではありません。
レスポンス全体の構造
APIYI の Nano Banana シリーズは Google ネイティブ形式を使用します。レスポンスには常に 4 つの最上位フィールドがあります。生成が成功した場合
parts にはテキストセグメントも含まれる場合があります
上の例では、単一の画像セグメントを保持するparts 配列を示していますが、その構造は保証されません。parts は異種配列であり、テストでは次の 3 つのレイアウトが確認されています。
responseModalities に TEXT を含める場合、またはモデルに自己説明を求める prompt を指定した場合、レスポンスにテキストセグメントが追加されます。また、それが画像の前後どちらに来るかも固定ではありません。つまり、画像が置かれるインデックスは一定ではありません。
安全ポリシーによりブロックされた場合
HTTP ステータスコードは引き続き 200 です。違いは candidate の中にあります。- テストでは 3 つの
finishReason値が確認されました:IMAGE_SAFETY(出力画像がポリシーに違反している)、PROHIBITED_CONTENT(禁止用途ポリシーがトリガーされ、説明用のfinishMessageが返される)、およびNO_IMAGE(画像は生成されず、通常は数秒以内に返される)。 - 拒否の説明は
finishMessageフィールドにあります —parts内のテキスト part としては表示されません。 - パース処理では、
partsがnullである場合に対応する必要があります。そうしないと、ブロックされたレスポンスでクラッシュします。
usageMetadata フィールドの意味
成功した生成には常に 6 つのフィールドがあります:
画像 token はアスペクト比ではなく解像度ティアで決まります: 1K と 2K の両ティアでは 1 画像あたり 1120 tokens、4K では 1 画像あたり 2000 tokens です。アスペクト比はピクセル寸法を変えるだけで、token 数は決して変わりません。1 回のレスポンスで N 枚の画像が返る場合、詳細はちょうど N × 1 画像あたりの値になります。
下の表は Google の公式 Pro Image のアスペクト比と画像サイズの参照表です(出典:
ai.google.dev/gemini-api/docs/image-generation)。gemini-3-pro-image の計測結果とも完全に一致します:
Google の公式表では、列見出し
1K tokens は「1K 解像度ティアの token 数」を意味します — 実際の 1 画像あたりの token 数はセルの値です: 1K/2K では 1 画像あたり 1120、4K では 2000 です。(そのページの中国語ローカライズでは見出しが「1,000 tokens」と表記されており、1 画像あたりの数と誤読しやすいです。)また、512px ティア(1 画像あたり 747 tokens)は Flash 画像モデルにのみ存在します — gemini-3-pro-image は 1K/2K/4K のみをサポートし、Nano Banana 2 Lite(gemini-3.1-flash-lite-image)は特殊ケースです — 512px はなく、1K ティアのみです。異常に見える 3 つの挙動
挙動 1: candidatesTokenCount ≠ candidatesTokensDetails の合計 — 正常かつ不可避
テストでは、サンプルの 100%(成功した生成 49/49)で、candidatesTokenCount が詳細の合計を 88–630 tokens 上回っていました(prompt が複雑で返却される画像が多いほど、差は大きくなります)。
理由: candidatesTokensDetails は image payload そのもの(1 画像あたり固定 1120/2000)だけを数えますが、candidatesTokenCount には image generation プロセスと同時に生成される内部 token も含まれます。これらには対応するモダリティエントリがありません。これは Gemini のネイティブなカウント規則であり、APIYI はそのまま通しています。
要するに: 検証のために、details を
candidatesTokenCount の完全な内訳として扱わないでください。照合と課金では、常に candidatesTokenCount / totalTokenCount を使用してください。details は image の割合を見積もるのにしか役立ちません。挙動 2: totalTokenCount ≠ prompt + candidates + thoughts — 画像出力のないレスポンスでのみ発生
- 成功した生成では、この式は 厳密に成り立ちます(49/49):
total = promptTokenCount + candidatesTokenCount + thoughtsTokenCount。 - 安全ブロックされたレスポンス(画像出力なし)では、この式は 決して成り立ちません(6/6)。固定パターンは次のとおりです:
candidatesTokenCount は thoughtsTokenCount と同じになり、そのため 3 つのフィールドを合計すると thinking token を二重計上してしまいます。これも upstream に固有の挙動です。totalTokenCount 自体は正確です — そのまま直接使ってください。 ログ内のレスポンスの約 10% が「釣り合わない」場合は、それらのレスポンスの parts が空かどうかを確認してください — ほぼ確実に安全ブロックされたサンプルです。
挙動 3: output token がときどき 6000+ に達する — thinking プロセスの複数 image part が原因
Google の公式 docs では、Gemini 3 の image model は thinking model であるとされています: 「Thinking」はデフォルトで有効で、API では無効化できません。model は構図とロジックを検証するために途中 image を生成し、「Thinking 内の最後の image が最終的にレンダリングされる image でもある」とされています(出典:ai.google.dev/gemini-api/docs/image-generation の Thinking Process セクション)。
私たちのテストでは、これらの途中 thinking draft はネイティブな generateContent レスポンス内で 通常の image part として返ってきます。各 part には thoughtSignature フィールドがありますが thought: true フラグはなく、それぞれが candidatesTokensDetails では 1120 tokens としてカウントされます。Google の docs では Thinking が生成する途中 image は最大 2 枚とされていますが、複雑な task-style prompt では 1 回のレスポンスで最大 10 image parts を確認しました。使用量は image 数に対して厳密に線形に増加します:
thoughtsTokenCount フィールドは text thinking だけをカウントし、テストでは 400 を超えることはありませんでした — 高い output token の原因は、このフィールドではなく image part の数です。6000+ あるいは 5 桁の output token を見たら、そのレスポンス内の part 数を確認してください — それはほぼ確実に multi-image レスポンスであり、正常な課金です(それでも totalTokenCount とは照合してください)。
Thinking Levels と 2つの API パラダイム
thinkingLevel が token に与える影響
thinking レベル制御は Gemini 3.1 Flash 画像 / Flash Lite 画像(generationConfig.thinkingConfig.thinkingLevel、デフォルト minimal、または high)でのみサポートされています。gemini-3-pro-image では thinking は常に有効で、調整できません。計測結果は次のとおりです(同一 prompt、1K text-to-image、APIYI ゲートウェイ経由):
highは thinking token と Latency だけを増やし、image token は変わりません(image 1枚あたり引き続き 1120 です)。thinkingLevelをgemini-3-pro-imageに渡してもエラーにはなりませんが、測定可能な効果はありません。thinking token はデフォルト範囲のままです。includeThoughts: trueはテストでは response 構造も billing も変えませんでした。Google は、thinking process を表示するかどうかに関係なく、thinking token はデフォルトで課金対象になると明示しています。- Google はまた、「minimal thinking は model がまったく thinking しないことを意味するわけではない」と述べています。
minimalでは、usage から separate なthoughtsTokenCountfield が表示されなくなるだけです。
Nano Banana 2 Lite(
gemini-3.1-flash-lite-image)は Nano Banana 2 と同じ 3.1 Flash ファミリーに属し、thinkingLevel 制御もサポートしています。動作の仕組みは上の表と同じですが、まだ個別には計測されておらず、表にも含まれていません。料金の詳細は、Nano Banana Series Pricing をご覧ください。画像モデルの thinking token とテキストモデルの違い
- テキスト thinking モデル: thinking output は text で、
thoughtsTokenCountは数千に達することがあり、output-token 価格で課金されます。公式には、pricing は model が生成する full internal thoughts に基づいており、API が返すのは thought の要約だけです(出典:ai.google.dev/gemini-api/docs/thinkingの pricing セクション)。 - 画像 thinking モデル: thinking は 2 種類の output を生成します。1つは
thoughtsTokenCountにカウントされる少量の text thinking(計測結果: Pro では最大 400、Flash ではhighで約 800)で、もう1つは interim draft images です。これらは通常の image part として返され、candidatesTokenCountに 1枚あたり 1120/2000 token で課金されます。したがって image model では、「thinking のコスト」は主に image part の数として現れ、thoughtsTokenCountfield にはあまり現れません(上の Behavior 3 を参照)。
2つの API パラダイム
Google の image-model ドキュメントは現在、従来の generateContent API(stateless)と、新しく推奨される Interactions API(agent と tools 向け)という 2 つの形式があります。APIYI ゲートウェイは Google ネイティブの generateContent 形式を使用しており、このページの内容はすべてそれに基づいています。thinking に関する違いは次のとおりです。
2つのパラダイムの完全な比較(endpoint、state management、data retention、および APIYI ゲートウェイ互換性テスト)については、Interactions API vs generateContent をご覧ください。
パースと照合のベストプラクティス
- 課金を
totalTokenCountと照合してください(拒否の場合でも正確です);3つのフィールドを自分で合計したり、詳細を合計したりして検証しないでください。 - パーツを反復処理してください — 単一の画像だと決めつけないでください。画像ごとのビジネスロジックは、実際の
inlineDataパーツ数に基づいて行ってください。 parts = null+ HTTP 200 でブロックされたレスポンスを処理し、finishReasonに応じて分岐してください。- 簡単な編集には約22〜25秒かかります。複雑なタスク(複数画像のレスポンス)には35〜142秒かかり、画像が増えるほどさらに長くなります。クライアントのタイムアウトは、プロキシ層を含めて5分以上に設定してください。
関連ドキュメント
Nano Banana 開発ガイド
統合方法、入力画像要件、課金の基本、タイムアウト設定、そして複数画像の解説
エラーハンドリングガイド
生成失敗を診断するための3つの重要な指標、コンテンツモデレーションポリシー、そして親しみやすい prompt 戦略
生成失敗保証プラン
入力に起因しない失敗については、失敗したリクエスト数に応じてクレジットが返還されます
Nano Banana 料金
解像度とモデル階層ごとの1画像あたりの料金