背景
複数のAIモデルを並列実行する際、Promise.allを用いた実装では「全ての処理完了を待つ」構造になります。
この設計には以下の課題があります。
- 1つのモデルが遅延すると全体のレスポンスが遅延する
- 速いモデルの結果を先に返却できない
- UXが最も遅い処理に依存する
例:
- 4モデル中3つが高速に応答
- 1モデルのみ遅延
→ 全体のレスポンスは遅延モデルに引きずられる
AIのように処理時間が不定なワークロードでは、この「最遅依存」の構造がボトルネックになります。
この課題に対して、SSE(Server-Sent Events)によるStreamingが有効です。
Streamingでは、
- 各モデルの処理完了を待たず
- 完了した順にレスポンスを逐次返却
することが可能になります。
これにより、全体完了を待つことなくユーザーに結果を提示できます。
まとめ
Promise.allはシンプルで扱いやすい一方、並列処理において「最も遅い処理に全体が依存する」という構造的な制約があります。
AIのような非同期・可変時間処理では、
- 全て揃ってから返す設計
ではなく - 取得できたものから順に返す設計
へシフトすることが重要です。
SSE / Streamingを採用することで、
- レスポンスの段階的返却
- UXの体感速度向上
- ボトルネックの分離
が実現できます。
複数モデルを扱うAIアプリケーションでは、Streamingは実用的かつ効果の高いアプローチです。