<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Interactions API on KnightLiブログ</title>
        <link>https://knightli.com/ja/tags/interactions-api/</link>
        <description>Recent content in Interactions API on KnightLiブログ</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>ja</language>
        <lastBuildDate>Sun, 12 Jul 2026 10:33:00 +0800</lastBuildDate><atom:link href="https://knightli.com/ja/tags/interactions-api/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Gemini Interactions API 移行ガイド：outputs を steps に変更した後のトラブルシューティング</title>
        <link>https://knightli.com/ja/2026/07/12/gemini-interactions-api-outputs-steps-migration-troubleshooting/</link>
        <pubDate>Sun, 12 Jul 2026 10:33:00 +0800</pubDate>
        
        <guid>https://knightli.com/ja/2026/07/12/gemini-interactions-api-outputs-steps-migration-troubleshooting/</guid>
        <description>&lt;p&gt;Gemini Interactions API は、新しいプロジェクトに推奨される統合インターフェイスになりました。これは、生成、ツール呼び出し、思考プロセス、ツールの結果、最終応答を観察可能な実行ステップとして表し、中間状態を表示する必要があるエージェント、長いタスク、およびアプリケーションに適しています。&lt;/p&gt;
&lt;p&gt;これは、従来のコードが応答で &lt;code&gt;outputs&lt;/code&gt; を想定できなくなったことも意味します。 2026 年 5 月以降、新しいスキーマがデフォルトになります。古いスキーマは 6 月 8 日に削除されました。移行後に空の応答がある場合、ツール呼び出しが失われる場合、SSE イベントがトリガーされない場合、または履歴コンテキストが壊れている場合、通常はモデルの問題ではなく、データが依然として古い構造に従って読み取られているということです。&lt;/p&gt;
&lt;h2 id=&#34;まず移行先のレイヤーを確認します&#34;&gt;まず移行先のレイヤーを確認します
&lt;/h2&gt;&lt;p&gt;トラブルシューティングを行う前に、1 つのフィールドだけを変更しないように、まず問題を分類します。&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;階層&lt;/th&gt;
          &lt;th&gt;古いやり方&lt;/th&gt;
          &lt;th&gt;新しい方法&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;最終テキスト&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;outputs&lt;/code&gt; をトラバースしてテキスト&lt;/td&gt;
          &lt;td&gt;を検索します。簡易シーン読み込み &lt;code&gt;interaction.output_text&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;完全な返答&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;outputs&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;でコンテンツ、ツール、または検索結果を見つけます。 &lt;code&gt;interaction.steps&lt;/code&gt; をトラバースし、&lt;code&gt;type&lt;/code&gt; として処理します&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;ツール呼び出し&lt;/td&gt;
          &lt;td&gt;古いコンテンツ タイプから解析する&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;function_call&lt;/code&gt;、&lt;code&gt;function_result&lt;/code&gt; などのプロセス ステップ&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;ストリーミングイベント&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;content.start&lt;/code&gt;、&lt;code&gt;content.delta&lt;/code&gt;、&lt;code&gt;content.stop&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;step.start&lt;/code&gt;、&lt;code&gt;step.delta&lt;/code&gt;、&lt;code&gt;step.stop&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;マルチラウンドの歴史&lt;/td&gt;
          &lt;td&gt;古い &lt;code&gt;outputs&lt;/code&gt; を返す&lt;/td&gt;
          &lt;td&gt;サーバーで &lt;code&gt;previous_interaction_id&lt;/code&gt; を使用するか、クライアントで &lt;code&gt;steps&lt;/code&gt; を返します&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;SDK がまだ Python 1.x または JavaScript 1.x である場合は、最初にバージョンを確認してください。公式の移行手順では、新しいスキーマを自動的に採用するには、Python ≥2.0.0 または JavaScript ≥2.0.0 を使用する必要があります。ただし、SDK をアップグレードしても、自分で作成した &lt;code&gt;outputs&lt;/code&gt; パーサー、SSE プロセッサー、およびフロントエンド ステート マシンは自動的に修正されません。&lt;/p&gt;
&lt;h2 id=&#34;最も簡単な修正-output_text-で最終テキストを読み取る&#34;&gt;最も簡単な修正: &lt;code&gt;output_text&lt;/code&gt; で最終テキストを読み取る
&lt;/h2&gt;&lt;p&gt;プレーン テキストの質問と回答のみを処理する場合、&lt;code&gt;steps&lt;/code&gt; から最後のテキストを手動で検索する必要はありません。新しいバージョンの SDK は、応答の末尾にある連続したテキスト ブロックを抽出して結合する &lt;code&gt;output_text&lt;/code&gt; を提供します。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;google&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;genai&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;client&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;genai&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Client&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;interaction&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;client&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;interactions&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;model&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;gemini-3.5-flash&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;用三句话解释什么是 prompt caching。&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;interaction&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;output_text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;移行後に &lt;code&gt;interaction.outputs[-1].text&lt;/code&gt; をそのままにしておくと、一般的な結果として、プロパティが存在しないか、インデックス付けが失敗するか、オブジェクトが誤って空の文字列にシリアル化されます。まずこれを &lt;code&gt;interaction.output_text&lt;/code&gt; に置き換えてから、複雑なシナリオのステップ分析を追加します。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;output_text&lt;/code&gt; は、すべての応答に適しているわけではありません。テキストが思考、画像、音声、またはツール呼び出しによって分離されている場合、インターリーブされたすべてのコンテンツは復元されません。完全な実行プロセスを表示する必要がある場合は、&lt;code&gt;steps&lt;/code&gt; をトラバースする必要があります。&lt;/p&gt;
&lt;h2 id=&#34;steps-を適切にトラバースする方法&#34;&gt;&lt;code&gt;steps&lt;/code&gt; を適切にトラバースする方法
&lt;/h2&gt;&lt;p&gt;新しいスキーマは、プロセスを型付きステップとして表します。少なくとも、&lt;code&gt;user_input&lt;/code&gt;、&lt;code&gt;model_output&lt;/code&gt;、&lt;code&gt;function_call&lt;/code&gt;、および &lt;code&gt;function_result&lt;/code&gt; は認識されます。サーバー側ツールを使用している場合は、&lt;code&gt;google_search_call&lt;/code&gt;、&lt;code&gt;google_search_result&lt;/code&gt;、またはその他のツール固有の手順も表示されます。&lt;/p&gt;
&lt;p&gt;次の例では、最終的なモデル出力からテキストのみを収集します。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;collect_model_text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;interaction&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;chunks&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;step&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;interaction&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;steps&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;step&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;type&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;model_output&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;continue&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;item&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;step&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;content&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;or&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[]:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;item&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;type&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;text&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;chunks&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;append&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;item&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;join&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;chunks&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;collect_model_text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;interaction&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;実際のプロジェクトでは、&lt;code&gt;content&lt;/code&gt; がすべてのステップに存在すると仮定したり、&lt;code&gt;thought&lt;/code&gt; を最終的な答えとして扱ったりしないでください。最初に &lt;code&gt;step.type&lt;/code&gt; に従って分岐し、次にこのタイプで許可されるフィールドを読み取ります。前方互換性を維持するために、未知のステップをタイプ、ID、およびステータスとして記録します。新しいツールステップが表示されたからといって、リクエスト全体が失敗しないようにしてください。&lt;/p&gt;
&lt;h2 id=&#34;ツール呼び出しが消えるのはなぜですか&#34;&gt;ツール呼び出しが「消える」のはなぜですか?
&lt;/h2&gt;&lt;p&gt;古いスキーマでは、サーバー側ツールの操作が &lt;code&gt;outputs&lt;/code&gt; という特定のコンテンツ タイプでラップされることがよくあります。新しいスキーマでは、これらを独立したステップに分割するため、&lt;code&gt;model_output&lt;/code&gt; のみをスキャンしても、検索、関数呼び出し、関数の結果は表示されません。&lt;/p&gt;
&lt;p&gt;たとえば、関数呼び出しは次のようになります。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;step&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;of&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;interaction&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;steps&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;step&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;type&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;===&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;function_call&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`Calling &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;step&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;step&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;arguments&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;サーバー側の Google 検索では、検索が実行されたかどうかを最終的なテキストから推測するのではなく、呼び出しと結果のステップを個別に処理する必要があります。クライアント機能ツールの場合、&lt;code&gt;requires_action&lt;/code&gt; を受信した後、対応する &lt;code&gt;function_result&lt;/code&gt; を送信し、インタラクションのステータスを使用し続けて後続のプロセスを完了します。&lt;/p&gt;
&lt;h2 id=&#34;ストリーミング-sse-イベントは一緒に移行されます&#34;&gt;ストリーミング SSE イベントは一緒に移行されます
&lt;/h2&gt;&lt;p&gt;REST 応答の解析のみを変更し、ストリーム プロセッサを変更しない場合、フロントエンドは通常、「リクエストは成功しましたが、ページは更新されません」として動作します。新しいイベント名は以下のとおりです。&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;昔の出来事&lt;/th&gt;
          &lt;th&gt;新しいイベント&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;interaction.start&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;interaction.created&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;interaction.complete&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;interaction.completed&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;content.start&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;step.start&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;content.delta&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;step.delta&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;content.stop&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;step.stop&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;interaction.status_update&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;interaction.in_progress&lt;/code&gt;、&lt;code&gt;interaction.requires_action&lt;/code&gt;、およびその他のステータス イベント&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;関数呼び出しのパラメータは、完全に一度に到着することが保証されなくなりました。ストリームでは、&lt;code&gt;step.start&lt;/code&gt; が最初に関数名を指定し、次に複数の &lt;code&gt;step.delta&lt;/code&gt; イベントがいくつかの JSON パラメーターを使用して部分的に配信されます。クライアントはパラメータを蓄積し、&lt;code&gt;step.stop&lt;/code&gt; またはアクションが必要な状態の後に完全な JSON を解析する必要があります。各デルタに対して直接 &lt;code&gt;JSON.parse()&lt;/code&gt; を実行しないでください。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;rawArguments&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;await&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;event&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;of&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;stream&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;event&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;event_type&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;===&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;step.delta&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;event&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;delta&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;?&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;type&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;===&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;arguments&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;rawArguments&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;event&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;delta&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;partial_arguments&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;event&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;event_type&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;===&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;step.stop&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// 只在对应 function_call 步骤完成后解析 rawArguments。
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;複数ラウンドの対話の後は返信しないでください-outputs&#34;&gt;複数ラウンドの対話の後は返信しないでください &lt;code&gt;outputs&lt;/code&gt;
&lt;/h2&gt;&lt;p&gt;古いステートレス実装では、多くの場合、前のラウンドの &lt;code&gt;outputs&lt;/code&gt; を収集し、それを次のラウンドの &lt;code&gt;input&lt;/code&gt; に戻します。移行後には、より明確なオプションが 2 つあります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;デフォルトのサーバー側状態を使用して、&lt;code&gt;previous_interaction_id&lt;/code&gt; 経由で同じセッションを継続します。&lt;/li&gt;
&lt;li&gt;履歴を自分で管理する必要がある場合は、前のラウンドの &lt;code&gt;steps&lt;/code&gt; を返し、新しい &lt;code&gt;user_input&lt;/code&gt; ステップを追加します。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;サーバー側のステータスは、通常の複数ラウンドの会話に適しています。クライアント側のステータスは、保存されたコンテンツ、システム間の移行、またはオフライン再生の厳密な制御が必要な場合に使用されます。どちらを選択する場合でも、古い &lt;code&gt;outputs&lt;/code&gt; と新しい &lt;code&gt;steps&lt;/code&gt; を同時に接続しないでください。接続しないと、コンテキストの重複、ツール結果の不一致、またはトークンの増殖が簡単に発生します。&lt;/p&gt;
&lt;h2 id=&#34;response_format-もエラーの原因である可能性があります&#34;&gt;&lt;code&gt;response_format&lt;/code&gt; もエラーの原因である可能性があります
&lt;/h2&gt;&lt;p&gt;この移行は出力配列を変更するだけではありません。構造化出力とマルチモーダル構成も、トップレベルの &lt;code&gt;response_format&lt;/code&gt; に統合されています。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;元の &lt;code&gt;response_mime_type&lt;/code&gt; は削除されました。 &lt;code&gt;response_format&lt;/code&gt; エントリに &lt;code&gt;mime_type&lt;/code&gt; を指定します。&lt;/li&gt;
&lt;li&gt;JSON スキーマは、&lt;code&gt;type: &amp;quot;text&amp;quot;&lt;/code&gt; を使用してフォーマット オブジェクトに入れる必要があります。&lt;/li&gt;
&lt;li&gt;画像構成が &lt;code&gt;generation_config&lt;/code&gt; から &lt;code&gt;type: &amp;quot;image&amp;quot;&lt;/code&gt; の &lt;code&gt;response_format&lt;/code&gt; エントリに移動されました。&lt;/li&gt;
&lt;li&gt;マルチモーダル出力には、フォーマット エントリの配列が必要です。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;インターフェイスが 400 を返した場合、&lt;code&gt;steps&lt;/code&gt; のチェックに加えて、コードでは &lt;code&gt;response_mime_type&lt;/code&gt;、&lt;code&gt;generation_config.image_config&lt;/code&gt;、および従来の単一オブジェクト &lt;code&gt;response_format&lt;/code&gt; も検索されます。これらの古いフィールドは、同じアップグレード後に &lt;code&gt;outputs&lt;/code&gt; 問題とともに表示されることがよくあります。&lt;/p&gt;
&lt;h2 id=&#34;実際のトラブルシューティング手順&#34;&gt;実際のトラブルシューティング手順
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;Google GenAI SDK をアップグレードし、実際のバージョンを文書化します。&lt;/li&gt;
&lt;li&gt;ツール不要の非ストリーミングの最小限のリクエストで &lt;code&gt;interaction.output_text&lt;/code&gt; を検証します。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;interaction.steps&lt;/code&gt; のタイプとステータスを出力して、プログラムが新しいスキーマを受け取ったことを確認します。&lt;/li&gt;
&lt;li&gt;関数呼び出し、サーバー側の検索、ツールの結果の解析ロジックをそれぞれ移行します。&lt;/li&gt;
&lt;li&gt;SSE イベント サブスクリプションとパラメータ蓄積ロジックを変更します。&lt;/li&gt;
&lt;li&gt;マルチラウンド履歴が &lt;code&gt;previous_interaction_id&lt;/code&gt; または &lt;code&gt;steps&lt;/code&gt; に変更されているかどうかを確認します。&lt;/li&gt;
&lt;li&gt;古い &lt;code&gt;response_format&lt;/code&gt; 関連フィールドを検索して置換します。&lt;/li&gt;
&lt;li&gt;テキスト、ツール呼び出し、ストリーミング出力、失敗の再試行を使用して回帰テストを 1 つずつ実行します。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;古いコードを一時的に復元するために古い &lt;code&gt;Api-Revision&lt;/code&gt; ヘッダーに依存しないでください。古いスキーマの移行期間は終了しました。移行は、一貫性のないパーサーを 2 セット継続するのではなく、公式の互換性修正プログラムとみなされるべきです。&lt;/p&gt;
&lt;h2 id=&#34;概要&#34;&gt;概要
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;outputs&lt;/code&gt; を &lt;code&gt;steps&lt;/code&gt; に変更する本質は、インタラクション API がすべてのプロセスを出力リストに詰め込むのではなく、入力、リフレクション、ツール、結果、および最終出力を明示的に公開することです。純粋なテキスト シーンでは、&lt;code&gt;interaction.output_text&lt;/code&gt; が優先的に使用されます。エージェント、ツール、ストリーミング、およびマルチモーダル シーンは、&lt;code&gt;step.type&lt;/code&gt; を使用して明示的な分岐を確立します。マルチラウンド セッションでは、代わりに &lt;code&gt;previous_interaction_id&lt;/code&gt; または &lt;code&gt;steps&lt;/code&gt; を使用します。これら 3 つの原則に従って移行すると、「出力がない」、「ツールが見つからない」、「SSE が更新されない」の問題のほとんどを見つけることができます。&lt;/p&gt;
&lt;p&gt;公式情報:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://ai.google.dev/gemini-api/docs/interactions-breaking-changes-may-2026&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://ai.google.dev/gemini-api/docs/interactions-breaking-changes-may-2026&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://ai.google.dev/gemini-api/docs/migrate-to-interactions&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://ai.google.dev/gemini-api/docs/migrate-to-interactions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://ai.google.dev/gemini-api/docs/changelog&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://ai.google.dev/gemini-api/docs/changelog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        
    </channel>
</rss>
