ストリーミング

ストリーミングでは、レスポンス全体の完了を待たずに生成結果を順次受信できます。GetRouter は、選択したモデルとチャネルが対応している場合、Chat Completions と Responses エンドポイントのストリーミング用リクエストフィールドをサポートします。

cURL で Chat Completions をストリーミングする

streamtrue に設定し、curl -N でクライアント側のバッファリングを無効にします。

curl -N https://getrouter.ai/v1/chat/completions \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "MODEL_ID",
    "stream": true,
    "messages": [
      {"role": "user", "content": "4 行の詩を書いてください。"}
    ]
  }'

Chat Completions は Server-Sent Events をストリーミングします。テキストチャンクは次の場所にあります。

choices[0].delta.content

通常、ストリームは [DONE] などの終端イベントで完了します。

Python で Chat Completions をストリーミングする

from openai import OpenAI

client = OpenAI(
    api_key="YOUR_API_KEY",
    base_url="https://getrouter.ai/v1",
)

stream = client.chat.completions.create(
    model="MODEL_ID",
    stream=True,
    messages=[{"role": "user", "content": "4 行の詩を書いてください。"}],
)

for chunk in stream:
    text = chunk.choices[0].delta.content
    if text:
        print(text, end="", flush=True)

Responses API のストリーミング

curl -N https://getrouter.ai/v1/responses \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "MODEL_ID",
    "stream": true,
    "input": "ストリーミング API の利点を 3 つ挙げてください。"
  }'

Responses のストリーミングでは、Chat Completions の choices[].delta チャンクではなく、Responses API のイベントオブジェクトを使用します。イベントの type に従って解析し、Chat Completions 専用のパーサーを流用しないでください。

stream_options

Chat Completions のスキーマは stream_options を受け付けますが、対応状況は選択したモデルのチャネルによって異なります。アップストリーム互換のオプションが拒否された場合は削除し、stream: true のみで再試行してください。

ストリーミング中のツール呼び出し

ツール呼び出しの引数は複数のチャンクに分かれて届く場合があります。引数全体を解析して実行する前に、インデックスまたはツール呼び出し ID ごとに差分を蓄積してください。

切断への対応

クライアントやプロキシのタイムアウト、ネットワーク切断、アップストリームエラーにより、終端イベントの前にストリーミング接続が終了することがあります。

クライアントでは次のように対応してください。

  • 終端イベントがない場合は未完了のレスポンスとして扱う
  • 必要に応じて受信済みのテキストを保持する
  • 非べき等なツール操作を無条件に再試行しない
  • 選択したモデルに十分な長さのタイムアウトを設定する
  • API キーは記録せず、リクエスト ID とエラーをログに残す
Warning

アプリケーションが副作用の重複を防げない場合、途中まで完了したエージェントやツールのワークフローを自動的に再実行しないでください。

トラブルシューティング

出力が一度に届く

クライアント、リバースプロキシ、ミドルウェアが SSE データをバッファリングしている可能性があります。UI をデバッグする前に、curl -N で直接テストしてください。

接続がすぐに閉じる

選択したエンドポイントでモデルがストリーミングに対応しているか確認してください。ネットワーク障害と判断する前に、エラーイベントまたは HTTP レスポンス本文も確認します。

チャンクに使用量が含まれない

ストリーミング中の使用量レポートは、プロトコル、リクエストオプション、モデルチャネルによって異なります。すべてのチャンクに使用量が含まれることを前提にしないでください。

次のステップ