AIのストリーミングレスポンスの仕組み

AIの回答が「少しずつ表示」される理由

AIチャットを使っていると、
回答が一気に出るのではなく、文字が流れてくるように表示されます。

カタカタとタイプしているように見えるあの挙動。
単なる演出ではありません。

結論から言うと、
AIは最初から全文を持っていません。

文章が完成してから送っているのではなく、
作りながら送っています。

これが「ストリーミングレスポンス」です。

通常のAPIレスポンスとの違い

普通のWeb APIはこう動きます。

1. サーバーで処理
2. 結果を作成
3. レスポンス送信

つまり、完成してから返します。

Request → 処理 → 完成 → Response

一方、AI APIは違います。

Request → 生成 → 送信 → 生成 → 送信 → 生成 → 送信

完成を待たず、途中結果を送り続けます。

なぜこんな仕組みになるのか

理由はAIの生成方法にあります。

LLM(大規模言語モデル)は、
一度に文章を作りません。

1トークンずつ予測して追加

例えば20文字の回答なら、
20回の予測計算をしています。

つまりサーバーは、
最初の数文字をすぐに送ることができます。

待つ必要がありません。

実際に送られているデータ

ストリーミングでは、
文章全体ではなく断片が送られます。

例(イメージ):

{"delta":"A"}
{"delta":"I"}
{"delta":""}
{"delta":""}
{"delta":""}

クライアント側はこれを連結して表示しています。
「タイプしている」ように見えるのはそのためです。

ユーザー体験が改善する理由

もしストリーミングが無い場合、
長い回答では数十秒待たされます。

しかしストリーミングでは:

  • 1秒後に最初の文字
  • 徐々に全文が表示

になります。

人間は「反応がある」と安心します。
そのため体感速度が大きく向上します。

実際の計算時間は変わっていません。
待ち時間の見せ方が変わっただけです。

開発側のメリット

ストリーミングは見た目のためだけではありません。

  • 途中で中断できる
  • トークン数を節約できる
  • UIの応答性が上がる

特に重要なのは「中断」です。

不要な長文になりそうなとき、
途中で止められます。

AIは文章を逐次生成しているため、
送信停止=計算停止になります。

実装の仕組み(概念)

多くのAI APIでは、
HTTPのストリーム接続を利用します。

クライアント接続を閉じない
↓
データを小分けに送る
↓
クライアントが逐次受信

WebではEventSourceやWebSocketが使われることもあります。
通常のREST通信とは挙動が異なります。

なぜ一気に送らないのか

「全部作ってから送ればよいのでは?」
と思うかもしれません。

しかしAIでは非効率です。

理由は2つあります。

1. 長文ほど待ち時間が増える
2. ユーザーが途中で満足する

特に後者が重要です。
多くの質問は、途中で答えが分かります。

ストリーミングは無駄な生成を減らします。

注意点

ストリーミングには制約もあります。

  • レスポンス整形が難しい
  • JSONとして扱いにくい
  • 途中切断の処理が必要

通常のAPIのように
「1つの完成レスポンス」を前提にすると設計が破綻します。

結局、何が起きているのか

AIは文章を作り終えてから送っているのではありません。
考えながら話している状態に近い動作です。

ただし思考しているわけではなく、
1トークンずつ確率計算をしています。

ストリーミングレスポンスはUIの演出ではなく、
AIの生成方式そのものが表に出ている現象です。

私たちは「表示方法」を見ているのではなく、
AIが文章を組み立てている瞬間をそのまま見ているのかもしれません。