Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Bedrockのレスポンス表示高速化を試してみた

Avatar for enumura enumura
October 21, 2025
45

 Bedrockのレスポンス表示高速化を試してみた

▼概要
Amazon Bedrockのストリーム処理可能なAPIを使い、WebSocketとLambda関数URLでレスポンス表示を早くできないか試してみたという内容です。

▼AkarengaLT vol.38(2025-10-19)
- イベントリンク:https://engineercafe.connpass.com/event/370316/
youtube:https://www.youtube.com/live/DKhM_FJxZwU?si=QSPLfN37hkLauqef

Avatar for enumura

enumura

October 21, 2025
Tweet

Transcript

  1. なぜ「高速化」なのか? 7 • LLMからのレスポンス結果をまとめて返す構成(※1) ◦ Client → REST API →

    Lambda → Bedrock • 課題点 ◦ レスポンスが全文生成完了まで待ち時間が長い ▪ UXが低下・・😢 ※1: スライド1の動画だと右の方
  2. なぜ「高速化」なのか? 9 • LLMからのレスポンス結果をまとめて返す構成(※1) ◦ Client → REST API →

    Lambda → Bedrock • 課題点 ◦ レスポンスが全文生成完了まで待ち時間が長い ▪ UX体験が低下・・😢 • 改善策 ◦ ストリーム処理で Bedrockのレスポンスをより早く表示する ※1: スライド5の動画だと左の方
  3. 実装内容 12 ▼Bedrockで使用したモデル 参考: Supported Regions and models for inference

    profiles • Claude 4.5 sonnet • 日本国内に閉じた形でのクロス リージョン推論 ◦ 東京 or 大阪
  4. • invoke_model_with_response_stream ◦ Amazon Bedrock のストリーミング応答API • 2つのAPIの違い ◦ invoke_model:

    生成完了後に一括レスポンス ◦ invoke_model_with_response_stream: 生成中に逐次レスポンス 実装内容 17 1. Bedrockのストリーム処理
  5. 代替の構成 32 ▼レスポンスストリーミングを有効化 • 関数URL化したLambdaで設定できる機能の1つ • データを一度に返すのではなく、chunked transfer encoding により、

    HTTP クライアントに生データをストリームで返す機能 • Node.js しか現状サポートしてない(2025/10/13 時点) 参考:AWS Lambda レスポンスストリーミングの紹介
  6. 代替の構成 35 • WebSocket : ◦ HTTP リクエスト → WebSocketにアップグレード

    → メッセージの双方向通信 → 切断処理 → 終了 • 関数URL化したLambda(ストリーミング ver): ◦ HTTP リクエスト → メッセージchunk分割して逐次送信 → 終了 ▼処理フローの違い
  7. 結果の比較(最初の 1文字が画面に表示されるまでの時間) 39 No websocket(s) 関数URL化Lambda(s) REST API構成(s) 1 2.26

    2.26 6.18 2 2.15 1.97 6.16 3 2.09 2.13 7.15 4 2.08 2.13 11.61 5 1.87 2.03 5.93 6 1.68 1.65 6.53 7 2.25 2.03 7.33 8 2.03 1.88 6.25 9 1.81 2.01 6.40 10 2.11 1.73 5.81 10回の平均 約 2.03 (s) 約 1.98 (s) 約 6.94 (s)
  8. 結果の比較 41 • モデルを claude 4.5 haiku に変える • Bedrockのプロビションスループットの購入してモデル実行枠を確保

    • Lambdaのメモリを10GB(MAX)まで上げる • Bedrockのプロンプトキャッシュの使用 ▼さらにレイテンシを改善するには?(可能性として)
  9. まとめ • Bedrockのレスポンス待機時間を改善 ◦ ストリーミング応答できるAPI 使える ◦ WebSocket or 関数URL化したLambda

    ▪ 分割されたレスポンスを逐次返却できる ▪ REST API構成より待機時間が改善 ▪ レスポンスが長いほどストリーム処理の効果が顕著 • WebSocket or 関数URL化したLambda ◦ トレードオフがあるので、選ぶ場合はそれぞれ要件を考慮
  10. Appendix: Lambdaの設定値 • メモリ:128MB • タイムアウト:60秒 • ランタイム: ◦ 関数URL化ver:Node.js

    20.x ◦ それ以外:python3.12 • アーキテクチャ:arm64 ▼検証に使用した Lambdaの設定値
  11. Appendix : 検証環境 46 ▼環境周り • ブラウザ: chrome ◦ version:

    141.0.7390.76 ◦ シークレットモード • Lambdaはウォームスタート状態 • メモリ:128mb • プロンプト: ◦ 旅行で東京に行った際のおすすめ観光地を 200文字くらいで教えてください
  12. Appendix: 実装内容 49 画像は Serverless generative AI architectural patterns –

    Part 1 > Pattern 2: Asynchronous request response > WebSocket APIs より引用 ▼参考
  13. Appendix: 代替の構成 50 画像は Serverless generative AI architectural patterns –

    Part 1 > Pattern 3: Asynchronous streaming response > Fig 10 より引用 ▼参考