【要約】LLMストリーミング入門:ChatGPTはなぜ一文字ずつ表示される? [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
LLMを用いたアプリケーション開発において、生成完了までユーザーを待たせる問題がある。開発者が従来の「全生成後に一括返信」する方式を採用すると、以下の課題に直面する。
- ・生成完了までの長いローディング時間による離脱リスク。
- ・ユーザーが「動作中であるか」を判断できない不安。
- ・バケツに水が溜まるのを待つような、非効率な体感待ち時間。
// Approach
開発者は、HTTPストリーミングを用いてデータを逐次転送する仕組みを構築する。バックエンドからフロントエンドまで、一貫した非同期パイプラインを以下の手順で実装する。
- ・FastAPIの
StreamingResponseとyieldを用いた非同期ストリーミングの実装。 - ・LangGraphにおいて、トークン生成ごとにデータを送る
messagesモードの採用。 - ・Unityで
DownloadHandlerScriptを自作し、受信データを逐次処理する仕組みの構築。
// Result
ストリーミングの導入により、ユーザー体験が劇的に向上する。生成プロセスを可視化することで、以下の成果が得られる。
- ・「バケツ方式」から「ホース方式」への転換による、体感待ち時間の解消。
- ・最初の文字が生成された瞬間に表示を開始できる、TTFTの短縮。
- ・バックエンドからUnity UIへの、シームレスなデータ転送フローの確立。
Senior Engineer Insight
> UX向上には不可欠だが、実戦投入にはインフラ設計の視点が欠かせない。コネクションの長時間維持は、サーバーのリソース消費を増大させる。また、ロードバランサーやプロキシがバッファリングを行うと、ストリーミングが機能しない。
curl -Nでの検証は必須だ。フロントエンドでは、文字列の追記(+=)による描画負荷とメモリ管理にも留意せよ。スケーラビリティと低レイテンシを両立させるには、ネットワーク層の深い理解が求められる。