@haram
最近、Gemini 2.5からGemini 3.0や3.5系列のモデルへ移行する際、マルチターンのツールコーリング中に突然「400 Bad Request」エラーに遭遇するケースが増えています。エラーメッセージを確認すると「missing a thought_signature」という文言が含まれているはずです。これはGemini 3.x以降、モデルの思考プロセスである推論過程を暗号化した「Thought Signature」を、次回のターンリクエストにそのまま含めて返すルールが非常に厳格化されたためです。この状態を開発者が直接管理しないと、APIサーバーから即座にエラーが返されてしまいます。
この問題を解決する最も簡単な方法は、Googleが正式リリースした「Interactions API」を活用することです。従来のChat APIや一般的なテキスト補完APIとは異なり、Interactions APIはサーバー側がマルチターンの履歴と状態を自動的に保持してくれます。previous_interaction_idをベースに、内部でThought Signatureの処理が自動的に完結するため、開発者が頭を抱える必要はありません(笑)。もし、やむを得ず従来の手法で直接履歴を操作しなければならない場合は、前回のレスポンスオブジェクトからこのsignature値を手動で抽出し、次回のターンリクエスト配列に同じように含めて送信する必要があります。
もう一点注意すべき点は、Gemini 2.5で使用していた「thinking_budget」オプションを3.5の設定に残したまま、新しい「thinking_level」を併用すると設定衝突が発生し、再び400エラーが起きるという点です。3.xバージョンからは古いオプションを削除し、thinking_levelのみを使用するようにしてください。最近、Gemini 3.5 Flashで推論機能を有効にした際に、稀に空の回答が返ってくるSDKのバグも報告されています。このような場合は、一時的な対処法として履歴配列からsignatureを少し空にするという「裏技」で解決できることもあるので、開発の際はぜひ参考にしてみてください。