ストリーミングの形式
3つの推論エンドポイントはいずれも stream: true でServer-Sent Eventsを返します。
公式SDKを使う場合はSDKがイベントを解釈するため、この形式を直接扱う必要はありません。
共通のヘッダー
Content-Type: text/event-stream; charset=utf-8
Cache-Control: no-cache
Connection: keep-aliveX-AIGateway-Requested-Model、X-AIGateway-Served-Model、X-AIGateway-Fallback-Count も通常のレスポンスと同じように付きます。
Chat Completions
POST /v1/chat/completions は、OpenAI Chat Completionsと同じ chat.completion.chunk を順に返し、最後に終了を示す行を送ります。
data: {"id":"...","choices":[{"delta":{"content":"こん"}}]}
data: [DONE]Responses
POST /v1/responses のストリームは、Responses形式のイベントを返します。
各イベントは event: 行とJSONの data: 行の組です。
event: response.created
data: {"type":"response.created","response":{"id":"resp_..."}}送られるイベント名は次のとおりです。
| イベント | 意味 |
|---|---|
response.created | 応答の開始 |
response.output_item.added、response.content_part.added | 出力アイテムとコンテンツパートの追加 |
response.output_text.delta | テキストの差分 |
response.function_call_arguments.delta | tool callの引数の差分 |
response.output_text.done、response.content_part.done、response.function_call_arguments.done、response.output_item.done | 各単位の完了 |
response.completed | 応答の完了 |
compaction_trigger を含むリクエストのストリームでは、response.in_progress も送られます。
Chat Completionsと違い、終了を示す [DONE] は送られません。
response.completed が最後のイベントです。
Messages
POST /v1/messages と POST /anthropic/v1/messages のストリームは、Anthropic Messagesのイベントを組み立てて返します。
| イベント | 意味 |
|---|---|
message_start | メッセージの開始 |
content_block_start、content_block_delta、content_block_stop | コンテンツブロックの開始・差分・終了 |
message_delta | メッセージ単位の差分 |
message_stop | メッセージの完了 |
最後のイベントは message_stop です。
途中で失敗したとき
ストリームはヘッダーを送った時点で 200 が確定するため、途中の失敗はHTTPステータスでは表せません。
モデル提供元から正しい応答を受け取れない場合や、終了イベントの前に接続が切れた場合は、ストリームが中断されます。
受信側は、最後のイベントを受け取らずに接続が閉じる場合を扱えるようにしてください。
長いストリーム
利用額とレート制限の予約は、ストリームを読んでいる間も保持されます。 長時間のストリームでは一定の間隔で予約を延長し、ストリームの終了時、または接続が切れた時点で実際の利用量に基づいて精算します。 途中で接続を切った場合も、そこまでの利用は記録されます。