このトピックでは、サーバーとクライアント間のリアルタイム マルチモーダル インタラクション フローについて説明します。
VAD モード
VAD モードを有効にするには、クライアント イベント の session.turn_detection パラメーターを "server_vad" に設定します。このモードでは、サーバーが受信したオーディオに対して音声アクティビティ検出 (VAD) を実行し、発話を検出すると応答します。このモードはデフォルトであり、クライアントがサーバーにオーディオを継続的に送信するシナリオ向けに設計されています。
- サーバーは、発話の開始を検出すると
input_audio_buffer.speech_startedイベントを送信します。 - クライアントは、
input_audio_buffer.appendイベントを送信して、いつでもバッファーにオーディオを追加できます。 - サーバーは、発話の終了を検出すると
input_audio_buffer.speech_stoppedイベントを送信します。 - サーバーは、
input_audio_buffer.committedイベントを送信して入力オーディオ バッファーをコミットします。 - サーバーは
conversation.item.createdイベントを送信します。このイベントには、オーディオ バッファーから作成されたユーザーメッセージ アイテムが含まれます。
ツール呼び出しフロー
VAD モードでは、サーバーが生成した応答にツール呼び出しが必要な場合、次のインタラクション フローとなります:
- サーバーは、発話の終了を検出して応答を生成した後、ツール呼び出しが必要であると判断します。
- サーバーは
response.function_call_arguments.deltaイベントを送信します。このイベントには、ツール呼び出しの引数に関する増分データが含まれます。 - サーバーは
response.function_call_arguments.doneイベントを送信して、ツール呼び出しの引数がすべて送信されたことを示します。 - クライアントはツール呼び出しを実行し、結果を取得します。
- クライアントは、ツール呼び出し結果を含む
conversation.item.createイベントを送信します。 - サーバーは、ツール呼び出し結果に基づいて自動的に応答を生成します。
手動モード
手動モードを有効にするには、クライアント イベント の session.turn_detection パラメーターを null に設定します。このモードでは、クライアントは input_audio_buffer.commit および response.create イベントを明示的に送信することで、サーバーの応答を要求します。このモードは、チャットアプリケーションで音声メッセージを送信するなど、プッシュツートークのシナリオに適しています。
- クライアントは、
input_audio_buffer.appendイベントを送信して、バッファーにオーディオを追加できます。 - クライアントは、
input_audio_buffer.commitイベントを送信して入力オーディオ バッファーをコミットします。このコミットにより、会話内に新しいユーザーメッセージ アイテムが作成されます。 - サーバーは応答として
input_audio_buffer.committedイベントを送信します。 - クライアントは
response.createイベントを送信して、モデルが最終的な応答を生成するようにトリガーします。 - サーバーは応答を生成し、
response.text.deltaまたはresponse.audio.deltaイベントでクライアントに送信します。
ツール呼び出しフロー
手動モードでは、サーバーが生成した応答にツール呼び出しが必要な場合、次のインタラクション フローとなります:
- クライアントが
response.createイベントを送信した後、サーバーは応答を生成し、ツール呼び出しが必要であることを検出します。 - サーバーは
response.function_call_arguments.deltaイベントを送信します。このイベントには、ツール呼び出しの引数に関する増分データが含まれます。 - サーバーは
response.function_call_arguments.doneイベントを送信して、ツール呼び出しの引数の転送が完了したことを示します。 - クライアントはツール呼び出しを実行し、結果を取得します。
- クライアントは
conversation.item.createイベントでツール呼び出し結果を送信します。 - クライアントは
response.createイベントを送信して、モデルが最終的な応答を生成するようにトリガーします。 - サーバーはツール呼び出し結果に基づいて応答を生成し、
response.audio.deltaまたはresponse.text.deltaイベントでクライアントに送信します。