ストリーミング出力

Streaming Output

ストリーミング出力とは

ストリーミング出力(Streaming Output)とは、LLMがテキストを生成する際に、全体の生成完了を待たずに、生成されたトークンを逐次的にリアルタイムで返却する方式です。ユーザーは応答がタイピングのように一文字ずつ表示されるのを確認でき、体感的な待ち時間が大幅に短縮されます。ChatGPTやClaudeなど主要なAIサービスで広く採用されています。

表:ストリーミング出力の要点まとめ
ひとことで言うと回答を最後まで待たず、生成された端から順に画面へ流す表示方式。
どこで使うチャットUI、長文生成、体感速度を上げたい画面。
注意点途中で止める処理やエラー時の扱いを、アプリ側で作り込む必要がある。

ストリーミングの技術的仕組み

ストリーミング出力は、Server-Sent Events(SSE)やWebSocketを使って実装されます。APIレベルでは、リクエスト時にstream=trueパラメータを指定すると、サーバーはトークンが生成されるたびにイベントを送信します。クライアント側はこれらのイベントを順次受信し、UIにリアルタイムで表示します。通常のHTTPレスポンスとは異なり、コネクションを維持したまま断続的にデータを送信する仕組みです。

図:文字が少しずつ表示されるしくみ
1リクエストstreamを有効にして送信
▶
21語を生成モデルが次の語を決める
▶
3すぐ送るできた分だけ画面へ
▶
4完了通知終端で接続を閉じる
↺ 2〜3をくり返すので、待たされている感じが減る

ストリーミングの利点と考慮点

ストリーミング出力の最大の利点はユーザー体験の向上です。長い応答でも最初のトークンが表示されるまでの時間(TTFT: Time To First Token)が短く、ユーザーは応答が生成されている過程をリアルタイムで確認できます。一方で、ストリーミングでは応答全体が確定する前にユーザーに表示されるため、途中で内容を修正できないこと、エラーハンドリングが複雑になること、Function Callingとの組み合わせに工夫が必要であることなどの注意点があります。