For the complete documentation index, see llms.txt. Markdown versions of documentation pages are available by appending .md to the page URL.
メインナビゲーション
Theme

API レスポンスのストリーミング

サーバー送信イベントを使って、OpenAI API からモデルのレスポンスをストリーミングで受け取る方法を説明します。

デフォルトでは、OpenAI API にリクエストを送ると、モデルが出力をすべて生成してから、API が 1 件の HTTP レスポンスにまとめて返します。出力が長い場合は、レスポンスを受け取るまでに時間がかかります。ストリーミングを使うと、モデルがレスポンスの続きを生成している間に、すでに届いた部分から順に表示や処理を始められます。

このガイドでは、サーバー送信イベント(SSE)を使った HTTP ストリーミング(stream=true)を扱います。WebSocket 接続を維持しながら previous_response_id を使って入力を順次追加する方法については、Responses API の WebSocket モードを参照してください。

ストリーミングの有効化

レスポンスのストリーミングを開始するには、Responses エンドポイントへのリクエストで stream=True を設定します。

from openai import OpenAI

client = OpenAI()

stream = client.responses.create(
    model="gpt-6-astra",
    input=[
        {
            "role": "user",
            "content": "Say 'double bubble bath' ten times fast.",
        },
    ],
    stream=True,
)

for event in stream:
    print(event)

Responses API は、ストリーミングにセマンティックイベントを使います。各イベントの型はあらかじめスキーマで定義されているため、必要なイベントを選んで処理できます。

イベントの種類の一覧は、ストリーミングの API リファレンスを参照してください。以下にいくつか例を示します。

for await (const event of stream) {
  if (event.type === "response.output_text.delta") {
    process.stdout.write(event.delta);
  } else if (event.type === "response.completed") {
    console.log("\nResponse completed.");
  } else if (event.type === "error") {
    console.error(event.message);
  }
}

レスポンスの読み取り

OpenAI の SDK を使う場合、各イベントは対応する型のインスタンスとして受け取れます。イベントの type プロパティでも種類を識別できます。

ライフサイクルを示す主なイベントには、1 回だけ発生するものと、レスポンスの生成中に繰り返し発生するものがあります。テキストのストリーミングでよく使うイベントは次のとおりです。

- `response.created`
- `response.output_text.delta`
- `response.completed`
- `error`

受信できるイベントの一覧は、ストリーミングの API リファレンスを参照してください。

高度なユースケース

ツール呼び出しのストリーミングなど、高度なユースケースについては、以下のガイドを参照してください。

モデレーションに伴うリスク

本番環境のアプリケーションでモデルの出力をストリーミングする場合、生成途中の内容だけでは判断しにくいことがあるため、補完結果のモデレーションが難しくなります。この点は、承認された利用条件を満たせるかどうかに影響する可能性があります。

生成リクエストと同時にモデレーションスコアをリクエストする場合、スコアが届くのは、出力全体が生成されて利用可能になった後です。生成途中に届く出力の差分には、スコアは含まれません。