|

Nano Banana 2のthought_signature 400エラーの解決:マルチターン画像編集には思考シグネチャの返送が必須


title: "Nano Banana 2 报错:Image part is missing a thought_signature 解決策"
description: "Nano Banana 2 (gemini-3.1-flash-image-preview) で発生する「thought_signature」エラーの原因と解決策を解説。マルチモーダル対話における正しい画像処理方法を学びましょう。"

作者注:Nano Banana 2 で「Image part is missing a thought_signature」というエラーが発生していませんか?これは、マルチターン(多輪)対話の際に「思考の署名(thought_signature)」を返送しなかったことが原因で発生する 400 エラーです。本記事では、その原因、修正プラン、およびコード例を詳しく解説します。

Nano Banana 2(gemini-3.1-flash-image-preview)を使用して画像編集を行う際、以下のようなエラーが発生した場合:

{
  "status_code": 400,
  "error": {
    "message": "Image part is missing a thought_signature in content position 2, part position 1."
  }
}

慌てる必要はありません。これはコンテンツの安全性やプラットフォームの不具合ではなく、Gemini 3 シリーズモデルの マルチターン対話における仕様 です。簡単に言うと、**「2回目のリクエストで以前生成した画像を送信したにもかかわらず、その画像に付随する thought_signature(思考の署名)を添付し忘れている」**ことが原因です。

核心的価値: 本記事を読めば、thought_signature の仕組みを理解し、3つの修正プランを習得し、マルチターンの画像編集シナリオで正しく署名を処理できるようになります。

nano-banana-2-thought-signature-error-400-fix-guide-ja 图示


description: Nano Banana 2 (Gemini 3.1) で発生する「thought_signature」エラーの根本原因と、3つの解決策を解説。APIYIユーザー向けに、コード例を交えて詳しく説明します。

Nano Banana 2 thought_signature エラーの核心的な解説

このエラーメッセージが意味するもの

エラーメッセージを分解して見てみましょう:

フィールド 意味 説明
status_code: 400 リクエストパラメータエラー サーバー側ではなく、クライアント側の送信内容に問題があります
Image part リクエストに含まれる画像データ 2回目のリクエストで画像を送信しています
missing a thought_signature 思考署名(thought_signature)の欠落 この画像は前回のモデル生成物であり、署名の添付が必要です
content position 2, part position 1 メッセージ履歴の2番目、最初のパート 署名が欠落している箇所を正確に特定しています

一言でまとめると: Gemini API はステートレス(状態を持たない)であり、モデルは thought_signature(思考署名)を通じてマルチターン対話の推論コンテキストを維持します。2回目の画像編集リクエストを行う際は、前回のモデルが返した thought_signature をそのまま含める必要があり、これがないと 400 エラーが発生します。

なぜ Gemini 3 シリーズで thought_signature が必須なのか

比較項目 Gemini 2.x シリーズ Gemini 3 シリーズ (NB2 含む)
思考署名 一部で任意 すべてのパートで必須
検証の厳格さ 緩やか 厳格(欠落=400エラー)
適用範囲 主に関数呼び出し テキスト、画像、関数呼び出しすべて
自動処理 公式 SDK が自動処理 公式 SDK が自動処理

Gemini 3 シリーズ(Nano Banana 2 のベースである gemini-3.1-flash を含む)で思考署名が必須である理由は以下の通りです:

  1. 推論状態の復元: 思考署名はモデル内部の推論プロセスの暗号化された表現であり、次の対話でモデルが前回の「思考状態」を復元するために使用されます。
  2. 画像編集の連続性: マルチターンの画像編集において、モデルが「この画像は自分が生成したものだ」と理解するために必要です。
  3. 安全性と整合性: 署名メカニズムにより、対話履歴が改ざんされていないことを保証し、マルチターン対話の信頼性を向上させます。

🎯 重要なポイント: この 400 エラーは、コンテンツ安全ポリシー(IMAGE_SAFETY)とは無関係であり、APIYI プラットフォームの問題でもありません。これは Gemini 3 シリーズの正常な仕様であり、コードレベルでの対応が必要です。


Nano Banana 2 thought_signature エラーの 3 つの修正案

nano-banana-2-thought-signature-error-400-fix-guide-ja 图示

案 1: 公式 SDK の chat 機能を使用する(推奨)

Google 公式 SDK(Python / Node.js / Java)を使用している場合、最も簡単な方法は chat 機能を使うことです。SDK が自動的に thought_signature を管理してくれます。

from google import genai

client = genai.Client(api_key="YOUR_API_KEY")

# chat 機能を使用すると、SDK が自動的に thought_signature を処理します
chat = client.chats.create(model="gemini-3.1-flash-image-preview")

# 1回目: 画像生成
response1 = chat.send_message("窓辺に座っている茶トラ猫を描いて")

# 2回目: 画像編集 (署名が自動的に送信されます)
response2 = chat.send_message("猫にサンタの帽子をかぶせて")

案 2: thought_signature を手動で抽出・送信する

カスタム HTTP 呼び出しや OpenAI 互換インターフェースを使用している場合は、手動で署名を処理する必要があります。重要なロジックは、前回のレスポンスから thought_signature を抽出し、次のリクエストの対応するパートにそのまま含めることです。

import openai

client = openai.OpenAI(
    api_key="YOUR_API_KEY",
    base_url="https://vip.apiyi.com/v1"
)

# 1回目: 画像生成
response1 = client.chat.completions.create(
    model="gemini-3.1-flash-image-preview",
    messages=[{"role": "user", "content": "茶トラ猫を描いて"}]
)

# 重要: モデルのレスポンス全体を保存する
# 画像データと thought_signature を含みます
model_reply = response1.choices[0].message

# 2回目: 画像編集
# 前回のモデルレスポンス全体を対話履歴として渡す
response2 = client.chat.completions.create(
    model="gemini-3.1-flash-image-preview",
    messages=[
        {"role": "user", "content": "茶トラ猫を描いて"},
        model_reply,  # thought_signature を含むレスポンスをそのまま含める
        {"role": "user", "content": "猫に帽子をかぶせて"}
    ]
)

案 3: シングルターンリクエストに変更する

マルチターンでの編集が必要ない場合は、毎回独立したリクエストを送信することで thought_signature の問題を完全に回避できます。

# シングルターン画像編集: 元画像 + 編集指示を直接送信
response = client.chat.completions.create(
    model="gemini-3.1-flash-image-preview",
    messages=[{
        "role": "user",
        "content": [
            {"type": "image_url", "image_url": {"url": "data:image/png;base64,/9j/..."}},
            {"type": "text", "text": "この猫にサンタの帽子をかぶせて"}
        ]
    }]
)

🎯 推奨: 新規プロジェクトでは案 1(公式 SDK の chat 機能)の使用を推奨します。既存プロジェクトでは、改修コストに応じて案 2 または 3 を選択してください。APIYI (apiyi.com) を通じて Nano Banana 2 を呼び出す場合、案 2 と 3 のどちらでも正常に動作します。


Nano Banana 2 thought_signature に関するよくある誤解

誤解 事実
これはコンテンツセーフティの問題である 違います。400エラーはパラメータの検証失敗であり、IMAGE_SAFETYとは無関係です
これはAPIプラットフォームの問題である 違います。Gemini 3シリーズモデルの仕様上の要件です
自分で署名を構築できる できません。署名は暗号化されているため、モデルが返した値をそのまま回送する必要があります
関数呼び出し(Function Calling)のみ必要 Gemini 3シリーズのすべてのpartタイプで必要になる可能性があります
thinking: off に設定すれば回避できる できません。thinkingレベルをminimalに設定しても、署名は返され、回送が必須となります

Nano Banana 2 のレスポンスにおける thought_signature の位置

Nano Banana 2 のレスポンスデータには、2種類の特別なpartが存在します。

一時的な画像 (thought: true): モデルの推論過程で生成される中間画像で、thought: true とマークされます。これらは一時データであり、ユーザーに表示する必要はありません。

最終画像 (thought_signature を含む): 最終的に生成された画像には thought_signature フィールドが含まれます。これが、次のリクエストで回送すべき署名です。

{
  "candidates": [{
    "content": {
      "parts": [
        {
          "inlineData": {"mimeType": "image/png", "data": "..."},
          "thought_signature": "CkYKRAo..."
        }
      ]
    }
  }]
}

🎯 技術的な詳細: thought_signature は暗号化された文字列で、長さは通常200〜500文字です。解析や修正、自作は試みないでください。受け取ったものをそのまま回送します。APIYI (apiyi.com) を通じて呼び出す場合、レスポンス形式はGoogleのネイティブAPIと完全に一致します。


Nano Banana 2 thought_signature エラーのトラブルシューティングリスト

nano-banana-2-thought-signature-error-400-fix-guide-ja 图示

クイックトラブルシューティング 4ステップ:

  1. マルチターンリクエストか確認: messages 配列に以前のモデルの回答(特に画像データ)が含まれている場合、それはマルチターンリクエストです。
  2. 完全なレスポンスが保存されているか確認: 前回のモデルのレスポンスに thought_signature フィールドが含まれていますか? また、完全に保存されていますか?
  3. 署名が変更されていないか確認: JSONのシリアライズ/デシリアライズ過程で、署名文字列が切り詰められたり、エスケープされたりしていませんか?
  4. part位置の整合性を確認: エラーメッセージ内の content position X, part position Y を確認することで、どのpartで署名が欠落しているかを正確に特定できます。

よくある質問

Q1: 1回限りの画像生成でもこのエラーは発生しますか?

通常は発生しません。thought_signature エラーは、ほぼマルチターン(複数回)の対話でのみ発生します。以前のモデルが返した画像を対話履歴に含めて新しいリクエストを送信した際にトリガーされます。1回限りのテキストから画像生成や画像から画像生成(元の画像を直接入力する場合)では、対話履歴を扱わないため、署名の処理は不要です。

Q2: OpenAI互換インターフェース経由で呼び出す場合はどうすればよいですか?

APIYI (apiyi.com) の OpenAI 互換インターフェースを通じて Nano Banana 2 を呼び出す場合、前回のモデル応答のオブジェクト全体を保存し、次のリクエストで対話履歴として渡すことが重要です。画像データだけを保存して他のフィールドを破棄しないでください。Dify や Cherry Studio などのフレームワークを使用していて、自動的に対話履歴が管理されている場合は、thought_signature が完全に保持されているかを確認してください。

Q3: thought: true の一時的な画像は送り返す必要がありますか?

はい、必要です。Nano Banana 2 は推論プロセス中に thought: true とマークされた一時的な画像を返すことがありますが、これらはモデルの「思考プロセス」の一部です。対話履歴を構築する際は、モデルが返したすべてのパーツ(一時的な画像を含む)を完全な形で送り返す必要があります。最も安全な方法は、モデルの応答オブジェクト全体をそのまま送り返すことです。


まとめ

Nano Banana 2 の thought_signature 400 エラーに関する核心的なポイント:

  1. コンテンツの安全性に関する問題ではありません: これは Gemini 3 シリーズモデルのマルチターン対話メカニズムの要件であり、IMAGE_SAFETY とは無関係です。
  2. 原因は明確: マルチターンのリクエスト時に、前回のモデルが返した thought_signature をそのまま送り返していないことが原因です。
  3. 修正案: 公式 SDK のチャット機能を使用する(自動的に処理されます)、手動で署名を抽出して送り返す、または1回限りのリクエストに変更してください。

核心的な原則を覚えておいてください:モデルが返した thought_signature は、変更せず、破棄せず、自分で作成せず、受け取ったものをそのまま送り返すこと

サードパーティプラットフォーム経由で Nano Banana 2 を呼び出す場合は、APIYI (apiyi.com) を推奨します。レスポンス形式は Google のネイティブ API と完全に一致しており、1回あたり $0.05、同時接続数無制限で利用可能です。


📚 参考資料

  1. Google 公式 Thought Signatures ドキュメント: 思考シグネチャ(Thought Signatures)メカニズムの詳細解説

    • リンク: ai.google.dev/gemini-api/docs/thought-signatures
    • 説明: 動作原理、モデルの挙動、およびSDKでの処理方法を網羅した公式ドキュメントです。
  2. Google Gemini 3 開発者ガイド: Gemini 3 シリーズの新機能

    • リンク: ai.google.dev/gemini-api/docs/gemini-3
    • 説明: Gemini 3 シリーズにおけるシグネチャの必須要件と新機能についての説明です。
  3. Google 画像生成ドキュメント: Nano Banana 画像生成のベストプラクティス

    • リンク: ai.google.dev/gemini-api/docs/image-generation
    • 説明: マルチターン画像編集における thought_signature の使用に関する推奨事項です。
  4. Google Cloud Vertex AI ドキュメント: エンタープライズ向け思考シグネチャの説明

    • リンク: docs.google.com/vertex-ai/generative-ai/docs/thought-signatures
    • 説明: Vertex AI 環境におけるシグネチャの処理および設定方法について解説しています。

著者: APIYI 技術チーム
技術交流: Nano Banana 2 のマルチターン編集の実装に関する知見をぜひコメント欄で共有してください。その他の資料については、APIYI ドキュメントセンター(docs.apiyi.com)をご覧ください。

類似投稿