ストリーミング
ストリーミングでは、レスポンス全体の完了を待たずに生成結果を順次受信できます。GetRouter は、選択したモデルとチャネルが対応している場合、Chat Completions と Responses エンドポイントのストリーミング用リクエストフィールドをサポートします。
cURL で Chat Completions をストリーミングする
stream を true に設定し、curl -N でクライアント側のバッファリングを無効にします。
Chat Completions は Server-Sent Events をストリーミングします。テキストチャンクは次の場所にあります。
通常、ストリームは [DONE] などの終端イベントで完了します。
Python で Chat Completions をストリーミングする
Responses API のストリーミング
Responses のストリーミングでは、Chat Completions の choices[].delta チャンクではなく、Responses API のイベントオブジェクトを使用します。イベントの type に従って解析し、Chat Completions 専用のパーサーを流用しないでください。
stream_options
Chat Completions のスキーマは stream_options を受け付けますが、対応状況は選択したモデルのチャネルによって異なります。アップストリーム互換のオプションが拒否された場合は削除し、stream: true のみで再試行してください。
ストリーミング中のツール呼び出し
ツール呼び出しの引数は複数のチャンクに分かれて届く場合があります。引数全体を解析して実行する前に、インデックスまたはツール呼び出し ID ごとに差分を蓄積してください。
切断への対応
クライアントやプロキシのタイムアウト、ネットワーク切断、アップストリームエラーにより、終端イベントの前にストリーミング接続が終了することがあります。
クライアントでは次のように対応してください。
- 終端イベントがない場合は未完了のレスポンスとして扱う
- 必要に応じて受信済みのテキストを保持する
- 非べき等なツール操作を無条件に再試行しない
- 選択したモデルに十分な長さのタイムアウトを設定する
- API キーは記録せず、リクエスト ID とエラーをログに残す
アプリケーションが副作用の重複を防げない場合、途中まで完了したエージェントやツールのワークフローを自動的に再実行しないでください。
トラブルシューティング
出力が一度に届く
クライアント、リバースプロキシ、ミドルウェアが SSE データをバッファリングしている可能性があります。UI をデバッグする前に、curl -N で直接テストしてください。
接続がすぐに閉じる
選択したエンドポイントでモデルがストリーミングに対応しているか確認してください。ネットワーク障害と判断する前に、エラーイベントまたは HTTP レスポンス本文も確認します。
チャンクに使用量が含まれない
ストリーミング中の使用量レポートは、プロトコル、リクエストオプション、モデルチャネルによって異なります。すべてのチャンクに使用量が含まれることを前提にしないでください。
