【要約】生成AIのストリーミングは、なぜ1回のAPIコールで複数回値が取れるのか [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
開発者がLLMを用いたアプリケーションを構築する際、レスポンスの遅延がUXを損なう課題がある。生成AIは全トークンの生成に時間を要するため、以下の問題が発生する。
- ・非ストリーミング方式では、全データの生成完了までレスポンスが返らない。
- ・クライアントは生成が終わるまで、画面に何も表示できず待機を強いられる。
- ・長い回答の場合、ユーザーはシステムが停止していると誤認するリスクがある。
// Approach
開発者は、通信プロトコルとイテレータの仕組みを利用して、逐次的なデータ取得を実現する。具体的な手法は以下の通りである。
- ・プロトコルの使い分け:OpenAIはSSE、BedrockはHTTP/2 + EventStreamを採用する。
- ・逐次取得の実装:Pythonのイテレータ構造を利用し、
forループでチャンクを回す。 - ・データの解釈:Bedrock SDKでは、バイナリ形式のEventStreamを逐次デコードする。
// Result
ストリーミングの導入により、ユーザーは生成プロセスをリアルタイムに視認できる。これにより以下の成果が得られる。
- ・体感速度の向上:最初のトークンが生成された直後から表示を開始できる。
- ・用途の最適化:チャットUIなど、リアルタイム性が求められる用途への適用が可能になる。
- ・実装の明確化:イテレータの概念を用いることで、コードの挙動を論理的に理解できる。
Senior Engineer Insight
> 実戦において、TTFT(Time To First Token)の短縮はUX設計の生命線である。ストリーミングは必須技術だが、長時間接続によるリソース消費や、タイムアウト設計に注意が必要だ。また、OpenAIのSSEとBedrockのEventStreamでは、扱うデータ形式が異なる。プロトコルの差異を正しく理解し、SDKの仕様に合わせた適切な実装を選択すべきである。