ENGINEER BLOG ENGINEER BLOG
  • 公開日
  • 最終更新日

【Bedrock AgentCore】OptimizationでAI Agentを最適化

この記事を共有する

目次

はじめに

皆さんこんにちは!パーソル&サーバーワークスの小泉です。
以前の記事ではConfiguration Bundleを使ってシステムプロンプトをコード外で管理する方法を紹介しました。
また、Agentの評価についても記載したので 今回は評価結果を基に、AIにプロンプトの改善案を出してもらい、A/Bテストで効果を定量的に測定するところ(改善)を検証しました。

なぜこれをやったのか

前回の記事でEvaluationを使って品質を可視化できるようになりました。
なので今回はAgentを「どう改善すればよいのか」、「改善は適切なのか」を検証しました。
具体的にはBedrock AgentCore(以下AgentCore)のOptimization 機能(Recommendation + A/Bテスト)を用いて検証を行いました。

今回使うAgentCoreの機能

機能役割
Runtimeエージェントのホスティング基盤
Configuration Bundleプロンプトの外部管理・バージョン管理
GatewayA/Bテストのトラフィック振り分け
Observabilityトレース収集(Evaluationの前提)
Evaluationsエージェント品質の自動評価
Optimizationプロンプト改善案の自動生成 + A/Bテスト

全体の流れ

流れ.png

検証の前提

検証用に作成した英語学習エージェントを使います。

  • Runtime: デプロイ済みの英語学習エージェント(Strands Agents + Claude Sonnet 4)
  • ツール: lookupvocabulary(辞書5単語のみ)、checkgrammar、generate_quiz
  • Config Bundle: 「英語を教えてください。」という大雑把なプロンプトが入っている状態
  • Evaluation結果: GoalSuccessRate 0.75(4回中1回ゴール未達)

辞書が5単語しかないため、辞書にない単語を聞かれるとツールが失敗します。
この状態でプロンプト改善だけでどこまで品質が上がるかを検証します。

手順

1. Recommendationでプロンプト改善案を生成

AgentCoreのOptimization機能に、蓄積済みのトレースデータを分析させてプロンプトの改善案を自動生成してもらいます。

agentcore run recommendation \
  --type system-prompt \
  --runtime runtime01 \
  --evaluator Builtin.Helpfulness \
  --inline "You are an English language tutor. Help users learn English." \
  --wait

--inline には現在のプロンプトを渡します(Config Bundleから読む方法もありますが、今回は直接指定しました※1)
※1 日本語プロンプトを渡すとprompt attack protectionで弾かれたため、英語でプロンプトを指定しました。

マネコンの画面から、AIがトレースを分析した説明が確認できます。 recommend-ex.png

今回の分析では以下が指摘されました

  • 7トレースを分析。6つがスコア1.0、1つが0.83
  • スコア0.83のトレース: クイズを出したとき、答えを隠してユーザーの回答を待った → 減点
  • 成功パターン: ツール出力に付加価値を加えている、ツールが間違ったら自分の知識で上書きしている

この分析を基に、以下の改善プロンプトが生成されました

生成された改善プロンプト:

You are an English language tutor. Help users learn English. Respond in the user's native language while teaching English. Use tools (lookupvocabulary, generatequiz, check_grammar) proactively. Add value beyond tool output: collocations, usage context, related forms. If a tool returns incorrect results, override with your expertise. If a tool fails, answer from your own knowledge. For quizzes, present both the question and full explanation.

日本語訳

あなたは英語の家庭教師です。ユーザーの英語学習を助けてください。英語を教えながらも、ユーザーの母国語で説明してください。ツール(lookupvocabulary, generatequiz, check_grammar)を積極的に使ってください。ツールの出力をそのまま返すのではなく、付加価値を加えてください(コロケーション、使用場面 、関連語形など)。ツールが間違った結果を返した場合は、あなた自身の知識で上書きしてください。ツールが失敗した場合は、自分の知識で回答してください。クイズの場合は、問題と解説を両方提示してください。

元のプロンプトが1行だったのに対して、具体的な振る舞い指示が追加されました。

マネコンの画面から、元のプロンプトと改善プロンプトがdiff形式で表示されます。

recommend.png

2. A/Bテストの前提: Gatewayの設定

A/BテストにはAgentCore Gatewayが必要です。
A/Bテストでは、Gatewayがリクエストを受け取った時点でControl/Treatmentを振り分け、対応するConfig BundleバージョンのIDをヘッダーに注入してRuntimeに転送します。

3. A/Bテストの実行

Recommendationで生成された改善プロンプトをConfig Bundleの新バージョンとして保存し、旧バージョン(大雑把)vs 新バージョン(AI推奨)を50:50で振り分けるA/Bテストを開始します。

agentcore run ab-test \
  --name "prompt_ab_test_v2" \
  --gateway "abTestGateway" \
  --runtime runtime01 \
  --control-bundle agentConfig \
  --control-version "3b793f39-..." \
  --treatment-bundle agentConfig \
  --treatment-version "d37693ee-..." \
  --online-eval qualityMonitor \
  --control-weight 50 \
  --treatment-weight 50

Gateway経由でエージェントを呼び出すと、リクエストがランダムに旧プロンプト(Control)か新プロンプト(Treatment)に振り分けられます。

4. A/Bテスト結果

10〜12セッション分のデータが溜まった後、結果が表示されました。

ABテスト結果2.png

評価器Control(大雑把)Treatment(AI推奨)改善
GoalSuccessRate0.801.00+25%
Helpfulness1.001.000%

GoalSuccessRateが0.80→1.00に改善。
AI推奨プロンプトでは全セッションでユーザーのゴールを達成できています。

p値※2は0.52でサンプルサイズが小さいため統計的有意性には届いていませんが、改善の方向性はわかりました。
本番環境で数百セッション流せば有意になる可能性が高いと考えています。

※2 結果が偶然である確率。一般的に0.05未満で統計的に有意と判断される

所感

今回の検証では、具体的な最適化よりどのように最適化するかの流れについて記載しました。実際にエージェントを構築・運用する際には評価・最適化の観点から設計するとPDCAが回りやすいと感じました。

この記事は私が書きました

小泉 和貴

記事一覧

全国を旅行することを目標に、仕事を頑張っています。

小泉 和貴

この記事を共有する

クラウドのご相談

CONTACT

クラウド導入や運用でお悩みの方は、お気軽にご相談ください。
専門家がサポートします。

サービス資料ダウンロード

DOWNLOAD

ビジネスをクラウドで加速させる準備はできていますか?
今すぐサービス資料をダウンロードして、詳細をご確認ください。