本文へ移動
GetAPI
日本語
メニュー

GetAPI.ONE

GetAPI.ONE から Responses をストリーミング

サーバー送信イベントを受信し、テキスト差分だけを追加し、completed、failed、incomplete イベントを別々の終了結果として扱います。

互換性のある経路を選ぶ

  • Responses エンドポイントを明示した現在のカタログモデルを使用します。
  • API キーは信頼できるサーバーまたはローカルプロセスに保持します。
  • 呼び出し元で部分テキストをどう表示し、中断したストリームからどう復旧するか決めます。
text
POST https://www.getapi.one/v1/responses
Accept: text/event-stream
Authorization: Bearer $GETAPI_ONE_API_KEY

イベントのライフサイクルを理解

  1. 最初の管理されたリクエストでは自動再試行を無効にし、サーバー側 SDK または HTTP クライアントで stream=true を送信します。
  2. 表示テキストには response.output_text.delta のペイロードだけを追加します。
  3. response.completed で停止し、アプリケーションに必要な最終応答のメタデータを保持します。
  4. response.failed と response.incomplete は成功以外の結果として示し、部分テキストを完了と表示しないでください。
  5. エラーイベント、転送例外、完了前の EOF、ローカルでのキャンセルは成功以外として扱い、ストリームを閉じます。
python
import os
from openai import OpenAI

terminal_event = None
try:
    with OpenAI(
        api_key=os.environ["GETAPI_ONE_API_KEY"],
        base_url="https://www.getapi.one/v1",
        timeout=30.0,
        max_retries=0,
    ) as client:
        with client.responses.create(
            model="<RESPONSES_MODEL_ID_FROM_CURRENT_CATALOG>",
            input="Give three concise deployment checks.",
            stream=True,
        ) as stream:
            for event in stream:
                if event.type == "response.output_text.delta":
                    print(event.delta, end="", flush=True)
                elif event.type == "response.completed":
                    terminal_event = event.type
                    print("\ncompleted")
                    break
                elif event.type in {"response.failed", "response.incomplete", "error"}:
                    terminal_event = event.type
                    raise RuntimeError(f"stream ended with {event.type}: {event}")
except KeyboardInterrupt:
    raise SystemExit("cancelled locally; the stream and client were closed")

if terminal_event != "response.completed":
    raise RuntimeError("stream ended before response.completed")

イベントを画面状態に対応付ける

イベントアプリケーションの操作
response.output_text.deltaevent.delta を追加し、すでに表示したテキストを置き換えないでください。
response.completed成功を示して読み込み状態を終了します。
response.failed構造化されたエラーと、安全な再試行操作を表示します。
response.incomplete部分出力を未完了と分かる状態に保ち、未完了の詳細を確認します。

期待した結果を確認

  • 差分の重複なしにテキストが段階的に表示されること。
  • 終了イベントまたは転送エラーの後にのみ、読み込みが終了すること。
  • 接続が中断しても、誤った成功状態を表示しないこと。

転送とプロトコルのエラーに対処

  • イベントが届かない場合は、正確な /v1/responses ルート、stream=true、プロキシのバッファリング、モデルのエンドポイント明示を確認します。
  • 出力が重複する場合は各差分を 1 回だけ追加し、SDK の累積出力と生イベントを混ぜないでください。
  • 可視の副作用が発生する前、またはアプリケーションレベルの冪等性がある場合のみ再試行します。切断は上流リクエストが何も実行しなかった証拠ではありません。

ストリーミングをサーバー側に保つ

text
Browser → your authenticated backend → GetAPI.ONE
                 server-held key only

次の手順