PaPoo
cover
technews
Author
technews
世界の技術ニュースをリアルタイムでキャッチし、日本語でわかりやすく発信。AI・半導体・スタートアップから規制動向まで、グローバルテックシーンの「今」をお届けします。

Bedrock AgentCore Optimizationでマルチエージェントのプロンプトを改善・検証してみる

記事のキーポイント

AgentCore Optimizationって何をするの?

この記事は、AWS Bedrock AgentCore に追加された Optimization 機能を実際に触ってみた検証記事です。

ざっくり言うと、これは
​「エージェントが実際にどう動いたか」を見て、プロンプトや設定を改善する仕組み です。

普通、LLMエージェントのプロンプト改善ってかなり泥臭いです。
「この言い回しだとダメだな」「もう少しツールの使い方を明示したいな」と、人間が何度も試行錯誤する必要があります。正直、ここはかなりしんどい。私もこういう改善作業は好きですが、沼りやすいのも事実です。

このOptimizationは、その試行錯誤の一部をAIにやらせる感じです。
しかも机上の空論ではなく、​実際のトレースログ を材料にするのがポイントです。これはかなり実運用向きだと思います。

3つの機能がある

image_0001.png

この記事では、Optimizationを次の3つに分けて説明しています。

1. Recommendations

実際のトレースログと、改善したい評価指標(Evaluator)を入力にして、
システムプロンプトやツール説明文の改善案をAIが出す 機能です。

言い換えると、
「人間が勘で直す」のではなく、
「AIに“こう直すと良さそう”と提案させる」仕組みです。

2. Configuration bundles

プロンプトやツール説明文をコードの外に切り出して、​AgentCore側でバージョン管理 する仕組みです。

これが便利なのは、コードを毎回直して再デプロイしなくても、
設定だけ差し替えてエージェントの挙動を変えられる ところです。

A/Bテストのときにも使います。
ControlとTreatmentで別設定を持たせる、というのがやりやすくなります。

3. A/Bテスト

実トラフィックを2つのバリアントに分けて流し、
それぞれの結果をEvaluatorで採点して比較する機能です。

image_0002.jpeg

つまり、
「新しいプロンプト、本当に本番で効くの?」
をちゃんと確かめられるわけです。

この3つをまとめて、AWSは continuous improvement loop と呼んでいます。
改善案を出す → 設定として管理する → 本番で試す、という流れですね。
この流れはかなり筋が良いです。プロンプト改善って、結局「作る」「試す」「比べる」の繰り返しなので、最初からそれを機能として持っているのは強いと思います。

検証では何をしたのか

著者は、Strands Agentsで作った マルチエージェント構成 に対してこのOptimizationを試しています。

構成は Agents-as-Tools パターン。
これは、メインエージェントがサブエージェントを @tool のように扱い、必要に応じて呼び出す設計です。

今回の検証用エージェントは、

に分かれていて、それをメインエージェントが束ねています。

image_0003.png

こういう構成は実際の業務でもよくありそうです。
「1つの巨大な万能エージェント」より、「役割を分けた小さなエージェントを束ねる」ほうが保守しやすい、という考え方ですね。個人的にも、この方向はかなり現実的だと思います。

Configuration bundles の作り方がちょっとクセあり

A/Bテストに乗せるには、プロンプトやツール説明を agentcore.jsonconfigBundles に外出しする必要があります。

著者が使った構造はこんな感じです。

{
  "components": {
    "{{runtime:agentsAsToolsLab}}": {
      "configuration": {
        "systemPrompt": "You are an assistant that answers questions about weather and news.",
        "weather_agent": "Get weather",
        "news_agent": "Get news"
      }
    }
  }
}

ここで面白いのは、ツール説明文を toolDescriptions の下に入れるのではなく、​configuration直下にフラットに置いている 点です。

理由は、Recommendations API がツール説明文の path を解決する都合に合わせるため。
つまり、CLIのデフォルト構造のままだとうまくいかず、少し形を変えたら動いた、という話です。

このあたりは正直、まだ新しい機能らしい「手触り」があります。
便利だけど、完全に洗練されきってはいない。こういうところは実際に触った人のレポートがありがたいですね。

image_0004.png

Hookで設定を動的に注入する

Bundleの値をRuntimeに反映するには、Strandsの hook機構 を使っています。

著者は ConfigBundleHook を作り、

をそれぞれ上書きしています。

ざっくり言うと、
「エージェントが動き出す直前に、設定を差し込む」
という実装です。

これも実運用ではかなり大事です。
設定をコードにベタ書きしないことで、改善サイクルを速く回せます。
このへんは地味ですが、運用しやすさに直結します。

image_0005.png

Recommendationsで何が出てくるのか

著者は、英語クエリ8種類を5回ずつ流して、合計40セッション分のトレースをため、その後に Recommendations を実行しています。

実行したのは次の2つです。

agentcore run recommendation --type system-prompt
agentcore run recommendation --type tool-description

システムプロンプトの改善案

結果を見ると、
​「call both tools in parallel」​
​「use news_agent to find related news」​
のように、ツール呼び出しまで意識したプロンプトに改善されていたそうです。

ここはかなり面白いです。
単に「丁寧に答えましょう」みたいな一般論ではなく、​このエージェントが実際に持っているツール構成を踏まえた指示 を出してくれるわけです。
これはかなり実用的ではないでしょうか。

ツール説明の改善案

ツール説明についても、説明を厚くするだけでなく、

image_0006.png

のように、​他のサブエージェントと並列で使う可能性 まで書かれていたとのことです。

これも良いですね。
ツール説明って、つい「何をするツールか」だけ書きがちですが、実際には「いつ、どういう文脈で使うか」まで書くと効きやすいです。
Recommendations はそこを拾ってくれるので、かなり賢いなと思いました。

A/Bテストで本当に効くのかを確認

Recommendations が出した改善案を、そのまま信じるのではなく、A/Bテストで確認しています。ここがちゃんとしていて好感度高いです。
AIの提案は便利ですが、実際に効くかどうかは別問題ですからね。

比較したもの

条件

image_0007.svg

結果

40セッション分の結果は次の通りです。

つまり、方向としては Treatment が良いです。
でも、サンプルが少なすぎて「本当に改善した」とまでは言えなかった、という結果です。

これはかなり健全です。
小規模検証で「改善した!」と断言してしまうより、
「傾向は見えるけど、サンプル不足で断定はできない」と言っているほうが信頼できます。

個人的にも、この結論は大事だと思います。
プロンプト改善は“雰囲気”で勝ちやすいので、A/Bテストのように比較できる仕組みがあるのは本当に強いです。

Recommendationsに任せる領域、人間が書く領域

この記事のいちばん実用的な示唆はここかもしれません。

著者は、Recommendationsが得意な領域と、開発者が書くべき領域を次のように整理しています。

image_0008.png

Recommendationsに任せやすいもの

開発者が書くべきもの

これはかなり納得感があります。
要するに、​​「プロンプトの書き方として汎用的に効く部分」はAIに任せてよいが、業務固有のルールは人間が責任を持つべき ということです。

たとえば、

みたいなものは、AIに勝手に補完させるべきではないですよね。
ここを混ぜると、便利そうに見えて事故りやすい。私はこの線引きがとても重要だと思います。

おまけ: 日本語プロンプトが安全判定で弾かれる?

最後のおまけが、地味に衝撃的です。

image_0009.png

著者は、日本語のシステムプロンプトを --inline で入れて Recommendation を実行すると、
prompt attack protection によって unsafe と判定されてしまったと書いています。

しかも切り分けた結果、

という挙動だったそうです。

一方で、​ツール説明文のRecommendationは日本語でも通る とのこと。

これはかなり興味深いです。
日本語のシステムプロンプトだけ厳しく見られているのか、あるいは安全性検出の誤判定なのか、詳細はこの記事だけでは断定できません。
ただ、少なくとも検証上は 英語でやるのが無難 だった、というのは実務的な学びです。

こういう“製品のクセ”は、ドキュメントを読むだけでは見えにくいので、実験記事の価値が出ますね。

image_0010.png

まとめ

この記事は、Bedrock AgentCore Optimization を使って、​マルチエージェントのプロンプト改善と検証を実際に回してみた レポートでした。

特に印象的だったのは、

です。

プロンプト改善って、どうしても「職人芸」になりがちですが、こうやって 改善→管理→検証 を一連の仕組みに落とせるなら、かなり運用しやすくなりそうです。
個人的には、AgentCore Optimization は「プロンプトを気合で直す時代」から少し抜け出すための、かなり実戦的な一歩だと思いました。


参考: Bedrock AgentCore Optimizationでマルチエージェントのプロンプトを改善・検証してみる

同じ著者の記事