はじめに
昨日、AWSが提供する「Amazon Bedrock AgentCore ワークショップ」を体験したのですが、これがAmazon Bedrock AgentCoreの魅力的な機能群を一通り実装しながら体験できる素晴らしい内容だったので、本記事でその魅力と内容を簡単に共有させていただきます。詳細はサンプルレポジトリから。
これからAgentCoreを触る方にとって、きっと有益なワークショップになるはずです。
参考リンクから早速ワークショップを始めましょう。
目次
ワークショップの構成
このワークショップは、AWSのコスト見積もりを行うエージェントを題材に、以下のBuilding Blockを一つずつ組み込んで機能を強化していく流れで進みます。
- Lab 1: Code Interpreter - 計算するエージェント 🧮
- Lab 2: AgentCore Runtime - クラウドへのデプロイ 🚀
- Lab 3: Identity - AI エージェントのための認証認可 🛡️
- Lab 4: Gateway - 外部サービスを MCP に変換し接続する 🔌
- Lab 5: Observability - モニタリングとデバッグ 📊
- Lab 6: Memory - AgentCore Memoryを使用したコスト見積もりエージェント 🧠
Labごとの学びと魅力
Lab 1: Code Interpreter - 計算するエージェント 🧮
このラボでは、ユーザーが「パン屋のWebサイトを安く作りたい」といった自然言語で要望を伝えると、エージェントがPythonコードを動的に生成し、コストを見積もるというありそうなシナリオを実装しました。
【魅力に感じた点】
このLabで特に魅力に感じたのは、start()
/ invoke()
/ stop()
だけで呼び出せるシンプルさです。純粋に「計算」という能力だけをエージェントに後付けできる手軽さには感動しました。
【実装例】
# 呼び出しは非常にシンプル
from bedrock_agentcore.tools.code_interpreter_client import CodeInterpreter
interpreter = CodeInterpreter(region="us-west-2")
interpreter.start()
result = interpreter.invoke("executeCode", {"code": "print(1+1)"})
interpreter.stop()
Lab 2: AgentCore Runtime - クラウドへのデプロイ 🚀
Lab 1で作成したコスト見積もりエージェントを、AgentCore Runtime
を使ってクラウドにデプロイする方法を学べました。
【魅力に感じた点】
このLabで特に魅力に感じたのは、agentcore
CLIによるデプロイの圧倒的な手軽さです。prepare
, configure
, launch
の3ステップで、ローカルのエージェントがコンテナ化され、クラウドで動くようになる体験は感動的です。
【実装例】
# 1. 準備 → 2. 設定 → 3. デプロイ の3ステップ
uv run prepare_agent.py --source-dir ../01_code_interpreter/cost_estimator_agent
uv run agentcore configure --entrypoint deployment/invoke.py ...
uv run agentcore launch
Lab 3: Identity - AI エージェントのための認証認可 🛡️
デプロイしたエージェントに、OAuthによる認可フローを実装しました。
【魅力に感じた点】
Lab 3のハイライトは、何と言っても@requires_access_token
デコレータです。複雑なOAuthのM2M認証フローが、このデコレータ一つで抽象化されてしまうのには驚きました。エージェントのコアロジックに一切触れずに、後付けで認可レイヤーを追加できる手軽さにも感嘆でした。
【実装例】
@requires_access_token(provider_name=OAUTH_PROVIDER, auth_flow="M2M")
async def _internal_function_with_auth(access_token: str = None):
# access_tokenを使ったリクエスト処理
...
@tool(...)
async def public_tool_for_agent(*args, **kwargs):
# エージェントに公開するツールからは認証処理が見えない
return await _internal_function_with_auth(*args, **kwargs)
Lab 4: Gateway - 外部サービスを MCP に変換し接続する 🔌
AWS Lambdaで実装したメール送信機能を、AgentCore Gateway
を使ってエージェントが扱えるツール(MCP)に変換しました。
【魅力に感じた点】
Gatewayの魅力は、既存の資産を「AIエージェントのツール」として再利用できる点です。今回はLambda関数をMCP化しましたが、これが社内のレガシーなAPIであっても同様に接続できると考えると、活用の幅が一気に広がります。Lambda以外もGatewayと繋げてエージェントが使えるようにしてみたいですね。
【実装シナリオ】
このラボでは、test_gateway.py
を実行することで、これまでの機能を統合したエージェントの動作を確認します。プロンプトでコスト見積もりを指示し、その結果をメールで送信するように依頼します。
エージェントはcost_estimator_tool
とmarkdown_to_email
ツールを自律的に呼び分け、最終的に見積もり結果が記載されたHTMLメールが届きます。
Lab 5: Observability - モニタリングとデバッグ 📊
このラボでは、test_observability.py
スクリプトを使って同一セッション内でエージェントを複数回呼び出し、その一連のやり取りがAgentCore Observability
を通じてCloudWatch上でどのようにトレースされるかを確認しました。
【魅力に感じた点】
このLabで最も感動したのは、エージェントの「思考の過程」を簡単に可視化できる点です。今まではLangfuseなどの外部トレースツールの設定が必要でしたが、AWSのCloudWatchの画面から、簡単に確認できるようになります。
【実装例】
このラボでは、test_observability.py
を実行して、同一セッションIDで複数回エージェントを呼び出し、トレースを発生させます。
# 同一セッションで複数回エージェントを呼び出す
uv run python test_observability.py
コードの変更なしに、CloudWatchコンソールの「GenAI Observability」ページにアクセスするだけで、Session、Trace、Spanの階層でエージェントの思考過程が詳細に可視化されていることを確認できました。
Lab 6: Memory - AgentCore Memoryを使用したコスト見積もりエージェント 🧠
このラボでは、エージェントに記憶機能を追加し、過去の見積もりを比較するcompare
ツール(短期記憶を利用)と、ユーザーの好みに基づいて最適なアーキテクチャを提案するpropose
ツール(長期記憶を利用)を実装しました。
【魅力に感じた点】
AgentCore Memory
の魅力は、短期記憶と長期記憶の役割分担が明確な点です。開発者はcreate_event
で対話履歴を保存するだけで、あとはMemory Strategy
がユーザーの好みなどを自動で抽出し、長期記憶に整理してくれる。この「状態管理のオフロード」により、開発者は「記憶を使って何をさせるか」という、より創造的な部分に集中できると感じました。retrieve_memories
を使えば、長期記憶からユーザーの嗜好をセマンティック検索で取得でき、パーソナライズされた提案が簡単に実現できます。長期記憶に保存する情報も選択肢から選べるため、実装がとても楽だと感じました。
【実装例】
# 短期記憶への保存
self.memory_client.create_event(
memory_id=self.memory_id,
messages=[(user_input, "USER"), (result, "ASSISTANT")]
)
# 長期記憶からの検索
memories = self.memory_client.retrieve_memories(
memory_id=self.memory_id,
namespace=f"/preferences/{self.actor_id}",
query="User preferences for architecture"
)
これにより、エージェントは「さっきの見積もりと比較して」という指示(短期記憶を利用)や、「私の好みに合う構成を提案して」(長期記憶を利用)といった、文脈に応じた応答が可能になります。
ワークショップの落とし穴
特筆すべきエラーや詰まった箇所は、正直なところ、ありませんでした。ワークショップのドキュメントとサンプルコードが非常によく出来ており、手順通りに進めれば誰でも完走できるんじゃないかと思います。
しかし、それが逆に一つの「ハマりどころ」かもしれません。
ただコマンドを実行していくだけでもスムーズにエージェントが完成してしまうため、「何が起きているのか」を深く理解しないまま進んでしまう可能性があります。
このワークショップの価値を最大限に引き出すには、prepare_agent.py
やtest_gateway.py
といったスクリプトの内部で、AgentCoreの各コンポーネントがどのように呼び出され、連携しているのかを一つ一つコードレベルで追っていくことを強くお勧めします。
まとめ
このワークショップは、Bedrock AgentCoreの各機能を段階的に実装しながら、その強力な機能を体感できる素晴らしい内容でした。これからAgentCoreを触り始める人には、最初の一歩として強くお勧めできます。
ただし、一つ注意点があります。それは、セットアップやテストツールがあまりに親切に整えられているため、ただコードを実行するだけでもスムーズに完走できてしまうという「落とし穴」です。
このワークショップの真価は、サンプルコードの内部にこそあります。各Labで実行するスクリプトが、AgentCoreの各コンポーネントをどのように呼び出し、連携させているのか。その実装を一つ一つ自分の目で確認しながら進めることが、深い理解への鍵となると思います。
強いて要望を挙げるなら、AgentCoreもCLIツールではなくCDKと統合して欲しいかな...
Amplifyも初期はCLIだったものがCDKベースになったので、AgentCoreもそうなる事を少し期待しています。
次のステップとして、ぜひ自分なりのオリジナルエージェントを実装してみたいと思います!