ストリーミング
ストリーミング:生成中の応答をServer-Sent Eventsで順に受け取る方法です。
Chat Completions、Responses、Messagesで stream: true を指定できます。
HTTPで受け取る
curl では -N を付けると、受信したイベントをバッファーせず表示できます。
Shell
curl -N "$AI_GATEWAY_BASE_URL/v1/chat/completions" \
-H "Authorization: Bearer $AI_GATEWAY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "<GET /v1/modelsが返したモデルID>",
"stream": true,
"messages": [
{ "role": "user", "content": "短い物語を書いてください。" }
]
}'Chat Completionsでは、テキストの差分が choices[0].delta.content に入り、最後に data: [DONE] が送られます。
SDKで受け取る
公式SDKを使う場合はSDKがイベントを解釈するため、SSEの行を直接分割する必要はありません。
TypeScript
const stream = await client.chat.completions.create({
model,
stream: true,
messages: [
{ role: 'user', content: '短い物語を書いてください。' },
],
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content ?? '');
}APIごとの完了を判定する
| API | 完了を示す値 |
|---|---|
| Chat Completions | data: [DONE] |
| Responses | response.completed |
| Messages | message_stop |
HTTP接続が閉じたことだけで成功と判断せず、利用するAPIの完了イベントを確認してください。 完了イベントより前に接続が閉じた場合は、途中までの出力を破棄するか、アプリケーション側で再実行するかを決めてください。
途中で接続を切った場合も、そこまでの利用は記録されます。 イベントの形式、途中で接続が切れた場合の扱い、長いストリームでの利用額の精算は、APIリファレンスのストリーミングの形式にまとめています。