本連載のスコープ
AIエージェントを本番運用する際には、開発・
一方、本連載が焦点を当てるのは本番運用フェーズです。公開以降、Amazon Bedrock AgentCoreのRuntimeやGatewayを用いて、複数のAIエージェントが複数の検索データストアをツールとして適宜利用する構成が主流となりつつあります。
こうした構成の本番環境では、ワークロードを通してAIエージェントの回答品質と検索データストアの検索品質を統合的に監視し、低品質な回答・
こういったLLMOps、DataOpsに関する基盤を構築する際、OSSを用いたセルフホスト形態は柔軟性が高い一方、インフラの設計・
本連載では、原則としてセルフホストの追加基盤を持たない
第一回である本稿ではDataOpsとLLMOpsの統合に焦点を当てます。第二回ではAIエージェントのObservabilityへ焦点を当てます。第三回ではAIエージェントのセキュリティ・
本記事のスコープ
本記事は、複数のAIエージェントと複数の検索データストアが本番稼働する環境を対象とし、LLMOps(AIエージェントの品質管理)とDataOps(検索データストアの品質管理)の統合運用に焦点を当てます。本番運用を支える一連のしくみを除き、開発・
1.対象アーキテクチャの概要
1.1 マルチAIエージェント × マルチ検索データストアの構成
本記事で念頭に置くアーキテクチャは、AgentCore Runtime上で動作する複数のAIエージェントが単一のAgentCore Gatewayエンドポイントを共有しており、AgentCore Gatewayを介して複数の検索データストアへアクセスする構成です。以下はこの構成の概略図です。
リクエストがAgentCore Runtimeへ到達した際、各宛先AIエージェントが推論を開始します。AIエージェントは推論の過程で各々AgentCore Gatewayを呼び出し、GatewayにMCPサーバーやLambdaを介して登録された検索データストア群からコンテキストに合ったものを自律的に選択して情報を取得し、回答作成へ利用します。
1.2 本記事で扱う課題
複数のAIエージェントと、AIエージェントからツールとして呼び出される複数の検索データストアが運用されている状況において、AIエージェントの回答品質が低下する場合があります。その際、原因がAIエージェントの推論にあるのか、ツールとして呼び出された検索データストアの検索精度にあるのかなどを迅速に調査し、改善施策へ繋げることが重要です。
一般に、検索データストアは各々異なるバージョンと評価データ、評価指標を持ち、AIエージェント側とは独立にバージョン管理されます。AIエージェントの品質管理と検索データストアの品質管理が分断されている場合、原因調査に時間がかかり、改善サイクルが遅延する傾向があります。
本記事では、この課題に対してLLMOpsとDataOpsを統合しTrace単位で品質を管理するAWSネイティブサービス中心のアーキテクチャを、一例として紹介します。
2. DataOps: 検索データストアのバージョン管理と検索品質管理
1.で示したアーキテクチャでは、AIエージェントがAgentCore Gatewayを介して複数の検索データストアをツールとして呼び出します。ここでは、検索データストアに焦点を当て、バージョン管理や品質ゲート、本番監視といった、検索データストア側の品質管理をDataOpsの観点から整理します。
2.1 バージョン管理
検索データストアの品質管理は、構成パラメータとデータ内容のバージョン管理に大きく分けられます。検索データストアを含め、本番環境のインフラストラクチャは一般にAWSCDKやTerraform等のIaCツールで管理します。IaCコードをGitリポジトリで管理することで、構成変更をコードレビューやプルリクエストの対象にでき、変更履歴の追跡と差し戻しが可能になります。
たとえばBedrock KBを検索データストアとして使用する場合、IaCで管理する構成パラメータには以下のようなものがあります。これらの変更はいずれも、検索品質に影響を与えるものです。
- チャンキング設定: チャンキング戦略
(semantic/ fixed size等)、チャンクサイズ、オーバーラップ率 - 埋め込みモデル: 使用するembedding modelのARN
- ベクトルストア: OpenSearch Serverless等のエンジン種別と設定
また、S3上などに配置したデータソースの追加・
2.2 品質ゲート: Bedrock KB Evaluation (Retrieve-Only)
検索データストアの新バージョンは、評価用データセットに対する検索品質が基準を上回った場合のみ採用します。検索データストアとしてBedrock KBを用いる場合、RAG評価ジョブのRetrieve onlyタイプを使用することで、LLM-as-a-judgeによる検索品質の評価を行うことが可能です。Context relevance [1] とContext Coverage [2] の二つの評価指標がデフォルトで提供されており、カスタム指標を設定することも可能です。RAG評価ジョブの詳細に関しては、多くの技術記事が世の中にあるので、詳細を確認される際はそれらをご参照下さい。
| 評価指標 | 説明 | Ground Truth |
|---|---|---|
| ContextRelevance [1] | 検索された文書の内、質問に関連するものの割合 (Precision) | 不要 |
| ContextCoverage [2] | 評価用データセット(Ground Truth)に含まれる情報の内、検索でカバーできた割合 (Recall) | 必要 |
以下は、検索データストアとしてBedrock KBを用いている場合に、RAG評価ジョブのRetrieve onlyタイプを使用する品質ゲートの論理フロー例です。Step Functions内で利用するコンピューティングリソースは省略しています。
Git管理された構成パラメータやS3上などに配置したデータソースが変更されると、Step Functionsワークフローが実行されます。ワークフローではまず、Green版
評価結果が閾値を上回った場合は、AgentCore Gatewayへ登録しているMCPサーバーやLambdaに対し、参照KBをGreen版へ切り替える処理を行います。閾値を下回った場合はBlue版
2.3 本番ワークロード監視
検索データストアの本番ワークロードは、運用メトリクスによるツール呼び出し状況の監視と検索品質の継続的評価の2層で監視します。
① ツール別メトリクスによる運用監視
ADOTstrands.モジュールでツール呼出の回数・bedrock-agentcorenamespaceへEMF(Embedded Metric Format)で出力されます。AIエージェントのコードにメトリクス送信のコードを追加する必要はありません。
| メトリクス名 | 説明 | Dimension例 |
|---|---|---|
strands. |
ツール呼出回数 | tool_ |
strands. |
ツール実行時間 | 同上 |
strands. |
成功回数 | 同上 |
この層の目的は、検索データストアへの呼出頻度・strands.メトリクスはCloudWatchの数値メトリクスとして出力されるため、CloudWatch Alarmを設定することで、レイテンシの悪化やエラー率の上昇を自動的に検知・
② AgentCore EvaluationsのOnline Evaluationによる検索品質の継続的評価
①のメトリクスはツール呼出の状況を示しますが、検索品質の問題は検知できません。これに対し、AgentCore EvaluationsのOnline Evaluationを使用します。なお、AgentCore Evaluationsは執筆時点でプレビュー段階で利用可能なリージョンが限定されいます。たとえばap-northeast-1リージョンでは現状利用できません。概念検証us-east-1で実施しています。
Online Evaluationは、本番のTraceを自動的にサンプリングし、指定したEvaluatorでLLM-as-a-Judge方式の品質判定を実行するしくみです。前節の品質ゲート
なお、Online Evaluationを利用する際は、IAM信頼ポリシーに注意が必要です。Online Evaluation ConfigのevaluationExecutionRoleArnに指定するIAMロールの信頼ポリシーには、bedrock.に加えて bedrock-agentcore. を含める必要があります。これが不足するとcreate_がValidationExceptionで失敗します。
PoCではSearchQualityというCustom EvaluatorをTOOL_execute_)のクエリと検索結果をLLMが判定する構成です。スコア体系は簡易的に、5.Bedrock AgentCore/namespaceにEvaluationScoreメトリクスとして、5点満点を0~1に正規化された値で出力されます。
以下はPoCで取得したCloudWatch Metricsの画面です。Bedrock AgentCore/namespace配下に、EvaluationScoreメトリクスがEvaluatorごとのDimensionで出力されています。このうちCustom.が当該メトリクスです。Builtin.とBuiltin.はエージェントの回答品質を評価するBuiltin Evaluatorであり、同じnamespaceに出力されるため表示されています。
本番ワークロード監視においては、この①と②のメトリクスに対して以下の様なCloudWatch Alarmを設定し、閾値を下回った場合にSNSを用いてEmailなどで通知する構成を取ることが可能です。
| アラーム | メトリクス | 閾値 |
|---|---|---|
| ツール実行エラー率上昇 | strands.の低下 |
成功率 < 95% |
| ツールレイテンシ悪化 | strands.の上昇 |
p99 > 5s |
| 検索品質低下 | Custom. |
< 0. |
CloudWatch AlarmによりCustom.のスコア低下が検知された場合は、以下の手順で原因を特定することが可能です。
- CloudWatch Alarmから通知を受け取り、
Custom.のスコア低下を確認SearchQuality - GenAIObservability → Tracesで該当時間帯のTrace一覧を確認し、対象のTraceを特定
- Trace View(Trajectory)でTree/
Timeline表示を開き、Tool Span ( execute_など)tool retrieve_ from_ kb を選択 - Span MetadataパネルでInput
(ユーザクエリ) とOutput (KBが返した検索結果チャンク) を確認し、クエリに対して不適切な検索結果が返されていないかを判断5.必要に応じてCloudWatch Logs Insightsで aws/ロググループを横断検索し、同様のパターンspans (特定のクエリ種別で検索品質が低い等) を調査
3. LLMOps:AIエージェントのバージョン管理と回答品質管理
1.で示したアーキテクチャでは、AIエージェントが検索データストアをツールとして呼び出し、ユーザへ回答を生成します。ここではAIエージェント自体に焦点を当て、コードと設定のバージョン管理、品質ゲート、本番監視といった、AIエージェント側の品質管理をLLMOpsの観点から整理します。
3.1 コードバージョン管理
AIエージェントの品質管理では、コードと設定
AgentCore RuntimeをAIエージェントのデプロイ基盤として使用する場合、コードや設定の変更に伴ってRuntimeを更新する度に新規の変更不能なDEFAULTエンドポイントは最新バージョンへ自動的にトラフィックを向けますが、dev/stg/prod等のエンドポイントを別途作成し、各々が異なるバージョンを参照するよう構成することで環境分離が実現できます。既存のセッションは開始時のバージョンで継続されるため、バージョン更新時にセッションが中断されることなく、エンドポイントの参照先を旧バージョンに戻すだけで即時ロールバックすることも可能です。
3.2 品質ゲート: AgentCore On-demand Evaluation
AIエージェントの新バージョンは、評価用データセットに対する回答品質が基準を上回った場合のみ、本番環境のエンドポイントへ昇格させます。以下は、この品質ゲートのフローの一例です。
Git管理されたリソース定義やエージェントコードが変更されると、CodePipeline上でCI/
3.3 本番ワークロード監視
2.SearchQuality)を用いて監視しました。ここでは、AIエージェントの回答品質をBuiltin Evaluatorで監視する構成を説明します。いずれもAgentCore EvaluationsのOnline Evaluationを利用しますが、評価対象と評価レベルが異なります。
AgentCore Evaluationsは、OpenTelemetryで収集されたTrace(Trajectory)に対し、LLM-as-a-Judge方式で品質を判定するしくみです。執筆時点では14のBuiltin Evaluatorが以下の3レベルで利用可能であり、加えてCustom Evaluatorを独自のプロンプトとモデルで作成することもできます。
| レベル | Evaluator名 |
|---|---|
| TRACE | Coherence, Conciseness, ContextRelevance, Correctness, Faithfulness, Harmfulness, Helpfulness, InstructionFollowing, Refusal, ResponseRelevance, Stereotyping |
| SESSION | GoalSuccessRate |
| TOOL_ |
ToolSelectionAccuracy, ToolParameterAccuracy |
Online Evaluation Configを作成し、上記のEvaluatorを指定すると、本番トラフィックのサンプリング評価が自動的に実行されます。PoCではBuiltin.Builtin.Custom.
2.
| アラーム | メトリクス | 閾値 | 検知対象 |
|---|---|---|---|
| 回答の正確性の劣化 | Builtin. |
< 0. |
回答の正確性の劣化 |
| 回答の有用性の劣化 | Builtin. |
< 0. |
回答の有用性の劣化 |
CloudWatch AlarmによりBuiltin.やBuiltin.のスコア低下が検知された場合は、以下の手順で原因を特定することが可能です。
- CloudWatch Alarmから通知を受け取り、低下したEvaluatorを確認
- GenAIObservability → Tracesで該当時間帯のTrace一覧を確認し、対象のTraceを特定
- Trace View(Trajectory)で推論過程をTree/
Timeline形式で確認し、各Spanのメタデータ (model, tokens, input/ output, duration) を確認4.必要に応じてCloudWatch Logs Insightsで aws/ロググループを横断検索し、同様のパターンを調査spans
4. DataOps × LLMOps統合
2.
4.1 Trace単位の品質統合と原因切り分け
2.
この統合により、AIエージェントの回答品質
| Correctness (TRACE評価) | SearchQuality (TOOL_ |
推定される原因 |
|---|---|---|
| 低い | 高い | 検索結果は適切だが、AIエージェントの推論に問題がある可能性がある |
| 低い | 低い | 検索データストアの検索品質の問題がAIエージェントの回答に波及している可能性がある |
| 高い | 低い | 検索品質は低いがAIエージェントが補完している状態。潜在的なリスクとして対処が望ましい場合がある |
以下はPoCで実測したTrace View
Correctness 0.
そのため、Correctnessが高い段階であってもSearchQualityの低下傾向が見られる場合は、DataOps側の改善
4.2 統合監視
また、CloudWatch GenAIObservabilityでは、各AIエージェントのOverview画面にて、Span名ごとのTraces数やエラー数、平均レイテンシなどの統計値を一覧することができます。以下のPoC実測例では、Bedrock Agent Runtime.chat
また、2.
4.3 フィードバックループ: 低品質Traceから評価データセットへ
本番ワークロードの監視によって得た低品質評価のサンプルを分析した後は、その知見を改善へ繋げることが重要です。具体的には、品質ゲートにて利用する評価用データセットを拡充し品質ゲートのカバレッジを改善すること、そしてもう1つは、分析を通して得た示唆からリソースの根本原因を改善することです。改善されたリソースが、品質ゲートにてより網羅的になった評価用データセットで再評価されることで、本番環境のリソースを継続的に改善することができます。以下は、このフィードバックループの概略図です。
① LLMOps側の例
たとえば、4.
- CloudWatch Logs Insightsで
Correctnessが閾値を下回るTraceを抽出 - Trace ViewでInput
(ユーザー問い合わせ) とOutput (AIエージェントの回答) を確認3.ドメイン専門家の知見などを踏まえて期待される正解回答を作成し、評価用データセット (JSONL) へ追記: {"query": "...", "expected_answer" : "...", "expected_source" : "..."}
4.並行して、必要に応じてエージェントコードやリソース設定を修正5.次回のCI/
② DataOps側の例
4.
- CloudWatch Logs Insightsで
SearchQualityが閾値を下回るTool Spanを抽出 - Trace Viewでクエリと検索結果
(返却されたチャンク) を確認し、期待と実際の乖離を分析3.ドメイン専門家の知見などを踏まえて期待される検索結果を作成し、評価用データセットへ追記4.並行して、必要に応じてデータソースや構成パラメータ (チャンキング設定、埋め込みモデル等) を修正5.次回のDataOpsパイプラインにて、品質ゲート (BedrockRAG評価ジョブ (Retrieve-Only)) により、拡充済みの評価用データセットを用いて修正済み検索データストアを評価
品質ゲートを通過した改善済みリソースは本番環境へデプロイされ、再びOnline Evaluationの監視対象となります。このように、本番監視 → 原因切り分け → 改善 → 品質ゲート → 本番反映のループをDataOpsとLLMOpsの双方を横断しつつ回すことで、本番環境の継続的な改善を行うことができます。
おわりに
本記事では、複数のAIエージェントと複数の検索データストアが本番稼働する環境において、DataOpsとLLMOpsを統合して品質管理を行うAWSネイティブアーキテクチャの一例を紹介しました。Strands Agents SDK + AgentCore Runtime上にAIエージェントをデプロイし、Bedrock KBを検索データストアとして用いる構成でPoCを実施しました。
このアーキテクチャの特徴は主に3点です。
1点目は、AgentCore Observabilityが自動生成するOpenTelemetry Traceを品質管理の共通軸としている点です。1つのTrace内にAIエージェントの回答品質
2点目は、この原因切り分けや詳細分析を元に、評価用データセットの拡充とリソースの修正を並行して進め、品質ゲートで再評価するフィードバックループを構成することで、本番環境の継続的な改善を実現する点です。
3点目は、これら全てがAWSネイティブサービスで構成されており、自前のトレーシング基盤等の追加インフラを運用する必要がなく、その他AWSサービスとの統合も容易である点です。
本記事のアーキテクチャはAgentCore EvaluationsのLLM-as-a-Judge方式を品質評価の基盤としています。LLM-as-a-Judgeは本番トラフィックに対して汎用的な品質評価を行える点で強力ですが、万能ではありません。ジャッジモデル自身が正解を持たないため、ドメイン固有の知識や事実検証には限界があり、冗長な回答を高評価するバイアスも知られています。
こうした限界を補うためには、2つのアプローチが有効です。1つは、LLMの判断に依存しない決定的メトリクス
もう1つは、ドメイン専門家が低品質Traceをレビューして正解データを拡充するHuman-in-the-loopを運用に組み込むことです。LLM-as-a-Judgeによる自動評価を第一層、決定的メトリクスを第二層、人間評価を最終層とする多層的な品質管理を構成することで、本記事のアーキテクチャをより堅牢なものにできます。
次回では、このアーキテクチャを支えるAgentCore Observabilityの技術基盤 — OpenTelemetryとADOTによるゼロコード計装のしくみなどについて記載します。
