9月26日、AWSが「NarrateAI: production-ready LLM quality assurance on Amazon Bedrock」と題した記事を公開した。Amazon Bedrockを活用してLLMの本番品質保証を実現する5つの技術手法を、実際の社内ツール「NarrateAI」の実装事例をもとに解説している。
AWSの幹部向けビジネスインテリジェンスツール「NarrateAI」は、4,000人以上のAWSエグゼクティブリーダーの意思決定を支援するエージェント型AIアシスタントだ。経営レビュー中にリアルタイムでデータの質問に答える性質上、「数字の誤り」と「応答の遅さ」の両方が許容されない。
本記事がエンジニアにとって参考になるのは、あくまでAWS社内の本番環境で実証されたパターンという点にある。実際に4,000人規模のヘビーユーザーを抱えるシステムで稼働した設計であるため、スケール・コスト・信頼性のトレードオフが実運用レベルで検証済みだ。自社でLLMを本番導入する際のリファレンスアーキテクチャとして読める内容になっている。
※なお、Amazon BedrockはAWSが提供するマネージド型の基盤モデルAPIサービスで、Claude・Titan・Llama等の複数LLMをAPI経由で統一的に利用できる。NarrateAIはそのマルチモデル対応の仕組みを品質保証設計に積極的に活用している。
最も重要な数字:数値精度99%をストリーミングしながら達成
記事のキーポイントを一言で言えば、「生成しながら並行して評価することで、精度とリアルタイム性を両立した」という点だ。従来の逐次処理(全生成→全評価→出力)では、最初のコンテンツがユーザーに届くまでの時間(タイム・トゥ・ファースト・コンテンツ、以下TTFC)が1分を超えていた。それを段落単位の並行評価に切り替えることで、最初の段落が生成・評価されれば即座にユーザーへ届ける設計に変えた。
5つの手法の全体像
5手法は独立したモジュールではなく、依存チェーンとして機能する。
- 適応型パイプラインオーケストレーション — クエリのデータ量に応じてルーティング
- クロスアカウント マルチモデル フェイルオーバー — スロットリング回避
- リアルタイム ストリーミング評価 — 段落単位の並行品質チェック
- 複合評価フレームワーク — 複数の独立評価器を並列実行
- データ精度検証 — 数値ハルシネーションの2段階キャッチ
手法1:適応型パイプラインオーケストレーション
エンジニアとして最も実装参考になる手法のひとつだ。クエリによって必要なドキュメントセクション数が「数個」から「数百個」まで大きく異なるという問題を解決する。
解決策はシンプルな閾値ルーティングだ。取得したドキュメントセクションの合計量 |D| を閾値 θ と比較して処理パスを決定する。
| ファストパス(約90%のクエリ) | ノーマルパス(約10%のクエリ) | |
|---|---|---|
| トリガー | ` | D |
| フェーズ1 | 全セクションを1チャンクに連結 | セクションをN個のバッチに分割 |
| フェーズ2 | LLM呼び出し1回、直接ストリーム | N個のLLMを並列呼び出し |
| フェーズ3 | スキップ | N個の分析を統合・矛盾解決 |
ファストパスでは、最初のトークンがユーザーに届くまでの時間(タイム・トゥ・ファースト・トークン、以下TTFT)は数秒以内、総レイテンシは25秒未満。前述のTTFCはシステム全体の「最初のコンテンツ表示までの待ち時間」を指し、TTFTは個別のLLM呼び出しにおける最初トークン生成までのレイテンシを指す。ファストパスでは両者はほぼ一致するが、ノーマルパスでは複数回のLLM呼び出しと統合フェーズが入るためTTFCはTTFTより大きくなる。ノーマルパスは並列処理込みで50〜75秒。N=4バッチが典型的なノーマルパスとして、ブレンドしたクエリあたりの平均LLM呼び出し数は約1.4回。常にマルチパス処理した場合と比べて72%削減という数字だ。
θ はモデルのコンテキストウィンドウ上限(典型的には200Kトークン)以下に設定し、自社ワークロードのクエリ分布に合わせてキャリブレーションすることが推奨されている。
手法2:クロスアカウント マルチモデル フェイルオーバー
Amazon Bedrockのクォータはモデル軸とAWSアカウント軸の両方で独立している。これを利用して、3モデル×3アカウントの構成なら9つの独立したクォータ空間を確保できる。
スロットリング検出(ThrottlingException、ServiceQuotaExceededException、TooManyRequestsException)を捕捉したら、指数バックオフを使わずに即座に次のモデル-アカウントの組み合わせへ移行する。アカウントをまたぐ際のクレデンシャル取得にはAWS STS(Security Token Service)のAssumeRoleを用い、所要時間は100〜200msと、指数バックオフの数秒と比べて無視できるレベルだ。
アカウントへの分散はrandom.shuffle()によるロールARNリストのシャッフルで実現しており、中央集権的な調整なしに均一な分散を達成している。
Locustを使った負荷テストでは、100ユーザー以上の同時接続でリクエスト失敗ゼロを達成した。インフラをスケールさせるのではなく、クォータ空間を広げるというアプローチが肝だ。
手法3:リアルタイム ストリーミング評価
段落の評価は「段落N+1の生成完了を待つ必要がない」という独立性を活かした設計だ。プロデューサー・コンシューマーの並行処理パターンを使い、段落が生成されたその瞬間に評価を開始する。
ユーザーが最初のコンテンツを目にするのは「全段落の生成+全段落の評価」後ではなく、「最初の1段落の生成+評価」後になる。2段落目以降の評価レイテンシは生成時間に隠蔽されるため、検証オーバーヘッドはほぼゼロに抑えられる。冒頭で述べたTTFCが1分超から大幅に改善された主因は、この手法3にある。
手法4:複合評価フレームワーク
生成された各段落に対して、複数の独立した評価器を並列実行する。評価器はそれぞれ異なる観点(数値整合性、トーンの客観性など)を担当し、互いの結果に依存しない設計だ。並列実行であるため、評価器の数を増やしてもレイテンシはほぼ増加しない。
各評価器は独立したLLM呼び出しとして実装されており、手法2のフェイルオーバー機構と組み合わせることで、評価フェーズ自体のスロットリングリスクも低減できる。また、評価器ごとに異なるモデルを割り当てることで、生成モデルと評価モデルのバイアスが重なることを避けている。
手法5:データ精度検証
数値ハルシネーションの捕捉に特化した2段階のカスケード構造を採用している。まず完全一致マッチング(計算コストが低い)を試み、一致しない場合にのみセマンティック検証(計算コストが高い)にエスカレートする。
この設計で数値ハルシネーションを捕捉しながら、不必要な推論コストを避けている。なお、記事が示す**数値精度約99%**という数字は、この手法5の完全一致・セマンティック検証の2段階を通過した数値が元データと一致した割合として測定されたものだ。「一致」の判定基準は完全一致またはセマンティック同値と定義されており、丸め誤差等の許容範囲については元記事に詳細が記載されている。
5手法を組み合わせた結果、NarrateAIは**数値精度約99%**をリアルタイムストリーミングしながら達成している。LLMを本番ビジネス用途に耐えうるレベルに仕上げる際の設計パターンとして、実装の参考になる内容だ。
詳細はNarrateAI: production-ready LLM quality assurance on Amazon Bedrockを参照していただきたい。