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

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

サーバー送信イベントを使って、OpenAI API からモデルのレスポンスをストリーミングする方法を学びます。

デフォルトでは、OpenAI API にリクエストを送信すると、モデルの出力全体が生成されてから、単一の HTTP レスポンスとして返されます。出力が長い場合、レスポンスを受け取るまでに時間がかかることがあります。レスポンスをストリーミングすると、モデルがレスポンス全体の生成を続けている間に、出力の先頭から表示や処理を開始できます。

このガイドでは、サーバー送信イベント(SSE)を使った HTTP ストリーミング(stream=true)を説明します。previous_response_id による増分入力に対応した、持続的な WebSocket 接続での通信については、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 プロパティを使って、個々のイベントを識別することもできます。

主要なライフサイクルイベントの中には一度だけ発行されるものもあれば、レスポンスの生成中に複数回発行されるものもあります。テキストのストリーミング時によく受信するイベントは次のとおりです。

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

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

高度なユースケース

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

モデレーションのリスク

本番環境のアプリケーションでモデルの出力をストリーミングすると、補完の内容をモデレーションしにくくなる点に注意してください。補完の一部分だけでは評価が難しい場合があるためです。これは、承認された利用方法に影響する可能性があります。

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