0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Bedrock AgentCoreって結局何ができるの?AIメンターを作って一通り触ってみた

0
Posted at

はじめに

AgentCoreも最近話題になってきて、そろそろ置いていかれそうなので、いろいろ触ってみました。

最初はAgentCoreがどんなものかよく分かっていませんでしたが、実際に触ってみることで「どんな機能があり、それぞれ何を担うのか」がだいぶ見えてきました。

この記事では、実際に作ったアプリをもとに、AgentCoreの全体像を紹介します。

※2026年8月20日時点の情報です。

想定読者

  • AgentCoreで何ができるのか、ざっくり知りたい人
  • AgentCoreの利用を検討しており、事前に全体像を把握したい人

RAGやAIエージェントなどの基本的な知識があることを前提としています。

目次

作ったもの

「自分だけのAIメンター」を作りました。

この記事では、このアプリの機能をもとに、どこで何のAgentCore機能を使っているのかを解説します。

主な機能

  • 通常のチャット(Runtime/Strands Agents)
  • チャット内容の記憶とスレッド管理(Memory)
  • IPAのデジタルスキル標準を使ったRAG(Managed Knowledge Base/Gateway)
  • スキルマップの作成・更新(GatewayのMCPツール経由でLambdaを呼び出す)
  • スキルマップやキャリア観に基づくコーチング(長期Memory)
  • 直近の学習状況をまとめたPowerPointスライドの自動生成(Code Interpreter)
  • web検索(Tavily/Strands Agents)

アーキテクチャ

image.png

成果物(参考)

RAGとスレッド管理

image.png

スキルマップの更新

image.png

image.png
image.png

エージェントを動かす方法

Harness

AgentCore Harnessは、モデルやツールなどを設定するだけでエージェントを実行できるマネージド環境です。

内部ではStrands Agentsによるオーケストレーションループが動いており、モデルの呼び出しやツールの選択、コンテキスト管理、エラー処理などをAgentCoreが行います。

主な特徴

  • AgentCoreとの統合(原則コード無し):Gateway、Browser、Code Interpreter、EvaluationのAgentCoreの機能をほぼコーディング無しで使える
  • Memoryが標準:会話履歴を自動で保存・復元し、長期Memoryも設定可能
  • セッション分離:セッションごとに分離されたmicroVM、ファイルシステム、シェルを利用可能
  • コードエクスポート:設定をStrands AgentsのPythonコードへエクスポート可能

知っておきたいこと

  • エクスポート形式に制限あり:現時点ではPython/Strands Agentsへのコードエクスポートにのみ対応(TypeScriptやLangGraphは不可)
  • 個別料金なし:Harness自体の追加料金はなく、利用したモデルやAgentCore機能に対して課金

Runtime

AgentCore Runtimeは、AIエージェントを動かすための実行環境です。

LambdaやECSでもエージェントは動かせますが、Runtimeには長時間実行やセッション分離、ストリーミングなど、エージェント向けの機能が組み込まれています。
今回のアプリでは、Strands Agentsで実装したAIメンターをmicroVM上で動かしています。

実行方式

現時点で2種類あります。

  • microVM:デフォルトのサーバーレス方式。通常のチャットエージェント向け
  • Runtime Instances:自分のAWSアカウント内でAgentCoreが管理するEC2方式。長期間の処理やGPU、複数エージェントによる環境共有に対応

主な特徴

  • 長時間実行:microVMでは最大8時間、Runtime Instancesでは最大14日間実行可能
  • セッション分離:microVMではセッションごとに専用の実行環境を割り当て。Runtime Instancesもセッション分離に対応
  • フレームワーク:Strands Agents、LangGraph、CrewAIなどに対応
  • ストリーミング:HTTPのレスポンスストリーミングとWebSocketの双方向通信に対応
  • 対応プロトコル:HTTP、MCP、A2A、AG-UIに対応

知っておきたいこと

  • アイドル時の停止:microVMは、デフォルトでは15分間アイドル状態が続くと停止
  • 会話履歴は別管理:会話履歴を残す場合は、AgentCore Memoryなどに保存
  • ペイロード:リクエストペイロードは最大100MB

microVMは常時起動するサーバーではなく、必要なときにセッション単位で実行環境が用意される仕組みです。継続的に稼働する処理や専用リソースが必要な場合は、Runtime Instancesを選択できます。

HarnessとRuntimeの違い

公式ドキュメントでも、HarnessとRuntimeの使い分けが紹介されています。

  • Harness:モデルやツール、メモリなどを設定すると、AgentCoreがエージェントの実行を管理。手軽にエージェントを作りたい場合に向いている
  • Runtime:エージェントの処理をコードで実装。Graph形式のワークフローや独自の前後処理など、細かく制御したい場合に向いている

設定中心で手軽に作るならHarness、コードベースで細かく制御するならRuntimeです。
最初はHarnessで手軽に作り、Graph形式のワークフローや独自の前後処理など、実現したい制御が明確になってからRuntimeへ移行する進め方もよさそうです。Harnessの設定はStrands AgentsのPythonコードへエクスポートできるため、最初からRuntimeを選ばなくてもよいと思います。

Agentを拡張する機能

Memory

短期Memory

ChatGPTのチャット履歴に近い機能です。会話内容を加工せず、そのままEventとして保存します。

主な特徴
  • 会話単位で管理actorIdがユーザーを、sessionIdが会話を識別
  • 会話履歴を保存:メッセージ本文、送信者のrole、日時などをEventとして保存
  • 履歴の取得:ユーザーのセッション一覧や、セッション内のEvent一覧を取得可能
  • 保持期間:最大365日。Memory作成時などに事前設定が必要
  • 保存形式:会話データのほか、画像やJSONなどのBlobも保存可能
  • メタデータ:Eventに任意の情報を付け、取得時の絞り込みに利用可能
  • Eventのブランチ:過去のEventを起点にブランチを作成可能。メッセージの編集や別の会話パスを表現できる
基本操作
  • 作成(CreateEvent:新しいEventを保存
  • 個別取得(GetEventeventIdを指定してEventを取得
  • セッション一覧(ListSessionsactorIdに紐づくセッションを取得
  • Event一覧(ListEvents:セッション内のEventを取得。メタデータやブランチによる絞り込みも可能
  • 削除(DeleteEvent:指定したEventを完全に削除
知っておきたいこと
  • Eventは変更不可:保存済みのEventは更新できない。修正する場合はブランチを作成し、不要なEventは削除する
  • 自動保存ではない:Memoryリソースを作成しただけでは会話保存されない。Runtime側でSDKのCreateEventやSession Managerなどを使い、保存と復元を組み込む必要がある

今回のアプリでは、CognitoのユーザーIDをactorId、チャットごとのIDをsessionIdとして使用しています。スレッド名など、アプリ側で必要な情報はDynamoDBで管理しています。

長期Memory

ChatGPTのメモリに近い機能です。ユーザーに関する情報を、セッションをまたいで利用できるMemoryRecordとして保存します。

組み込み戦略では、短期Memoryに保存された会話からMemoryRecordを自動的に生成できます。

主な特徴
  • セッションをまたいだ記憶:保存したMemoryRecordを別のセッションでも利用可能
  • Memory戦略:長期保存する情報と、その抽出・統合方法を設定可能
  • 自動抽出・統合:組み込み戦略では、短期Memoryの会話を解析し、抽出した情報を既存のMemoryRecordと統合
  • セマンティック検索:現在の会話に関連するMemoryRecordを検索可能
  • NamespaceactorIdsessionIdなどを使い、MemoryRecordの保存範囲を分離可能
基本操作
  • 個別取得(GetMemoryRecord:指定したMemoryRecordを取得
  • 一覧取得(ListMemoryRecords:Namespace内のMemoryRecordを取得
  • 検索(RetrieveMemoryRecords:クエリに関連するMemoryRecordをセマンティック検索
  • 削除(DeleteMemoryRecord:指定したMemoryRecordを削除
Memory戦略

Memory戦略は、長期Memoryに何を保存し、どのように抽出・統合するかを定義します。

  • 組み込み戦略:AgentCoreが抽出と統合を管理
    • SEMANTIC:事実や知識を抽出
    • SUMMARIZATION:会話を要約
    • USER_PREFERENCE:ユーザーの好みや関心を抽出
    • EPISODIC:重要な出来事や経験を保存
  • 組み込み戦略のカスタマイズ:組み込みの処理基盤を利用しつつ、抽出・統合の指示や使用モデルを変更
  • Self-managed戦略(CUSTOM:抽出・統合処理、モデル、出力スキーマなどを独自に実装。AgentCoreはMemoryRecordの保存と検索に利用
知っておきたいこと
  • Memory戦略が必要:戦略を設定していない場合、長期Memoryは生成されない
  • 自動抽出は非同期:組み込み戦略では、会話の保存後にバックグラウンドで処理されるため、MemoryRecordとして取得できるまで時間がかかる
  • 過去のEventは対象外:組み込み戦略を有効にする前に保存されたEventは、さかのぼって自動抽出されない
  • 自動抽出の対象は会話データのみ:短期Memoryに保存したBlobは、組み込み戦略による抽出対象にならない
  • Runtimeでは取得処理が必要:MemoryRecordを検索し、エージェントのコンテキストへ渡す処理を組み込む必要がある

今回のアプリでは、会話からユーザーのキャリア観や興味関心を抽出し、セッションをまたいだコーチングに利用しています。

Gateway

AgentCore Gatewayは、エージェントからツールや外部サービスへの接続をまとめて管理する機能です。

REST APIやLambdaなどをMCPツールとして公開できるほか、HTTPサービスへの中継や、複数のモデルプロバイダーへの接続の共通化にも対応しています。

主な特徴

  • 複数の接続方式:MCPツールの集約、HTTPリクエストの中継、リクエストで指定したモデルへのルーティングに対応
  • 豊富な接続先:Lambda、REST API、外部MCPサーバー、Managed Knowledge Basesなどを接続可能
  • 連携テンプレート:Jira、Slack、Salesforceなど、外部サービス向けのテンプレートを用意
  • Web検索:Web Search ToolをMCPツールとして追加可能
  • 認証・認可:Gatewayを呼び出す側と、接続先へアクセスする側の認証をまとめて管理
  • ツール検索:登録したツールを自然言語で検索し、用途に合うツールを絞り込める

知っておきたいこと

  • 接続先は別途必要:GatewayがAPIやMCPサーバー自体をホストするわけではない
  • 小規模なら直接Toolでもよい:1つのエージェントから少数のAPIを呼ぶだけなら、通常のToolとして実装したほうがシンプル

今回のアプリでは、DynamoDBに保存したスキルマップを更新するREST APIを、Gateway経由のMCPツールとして呼び出しています。

このくらいなら通常のToolでも実装できますが、Gatewayも触ってみたかったので採用しました。

Code Interpreter

AgentCore Code Interpreterは、エージェントが生成したコードを分離された環境で安全に実行するための機能です。

計算やデータ分析だけでなく、Excel、Word、PDF、PowerPointなどのファイル加工・生成にも利用できます。

主な特徴

  • コード・コマンド実行:Python、JavaScript、TypeScriptのコードやシェルコマンドを実行可能
  • ライブラリを標準搭載pandasnumpyopenpyxlpython-docxpython-pptxなどを利用可能
  • ファイルの入出力・加工:ファイルをセッションへアップロードし、コードで編集・変換。生成したファイルをダウンロード可能

知っておきたいこと

  • セッションの有効時間:デフォルトは15分で、最大8時間まで設定可能
  • ファイルは一時保存:セッション終了時にローカルファイルは削除される。成果物を残す場合はS3などへの保存が必要
  • 実行リソースは固定:1セッションあたり2vCPU、メモリ8GB、ディスク10GBで、構成は変更不可
  • ファイルサイズに上限あり:インラインで扱えるペイロードは最大100MB。大きなファイルはS3などを経由する
  • 実行ロールに注意:生成されたコードからもCode Interpreterの実行ロールを利用できるため、必要最小限の権限に絞る

今回のアプリでは、python-pptxを使い、短期Memory、長期Memory、スキルマップから取得した情報をもとに、直近の学習状況をまとめたPowerPointを生成しています。

Evaluation

AgentCore Evaluationsは、エージェントの応答やツールの使い方を自動で採点する機能です。

LLMを採点者として使うLLM-as-a-Judgeや、Lambdaに実装した独自ルールで評価できます。Ground Truthを与え、期待する回答や動作と比較することも可能です。

主な特徴

  • 評価方式:オンデマンド評価、バッチ評価、オンライン評価、データセット評価(プレビュー)に対応
  • 複数の評価項目Built-in evaluators(備え付けの評価項目)のほか、独自の採点基準となるCustom evaluatorsも作成可能
  • Ground Truth:期待する回答やツールの実行順序などを定義し、実際の動作と比較可能

評価方式

  • オンデマンド評価:指定したセッションやトレースを評価。問題のあった応答の調査や、修正結果の確認に利用
  • バッチ評価:複数のセッションをまとめて評価。変更前後の比較やリグレッションテストに利用
  • オンライン評価:本番トラフィックから対象をサンプリングして継続的に評価。品質の監視や劣化の検知に利用
  • データセット評価(プレビュー):複数のテストシナリオをデータセットとして定義し、エージェントの呼び出しから評価までをまとめて実行

評価内容

評価時の採点基準をEvaluatorとして指定します。

  • Built-in evaluators:AWSが用意したEvaluator。正確性、有用性、タスク達成、ツール選択などを評価
    • 多くはLLM-as-a-Judge
    • Trajectory系は、ツールの実行順序をプログラムで比較
  • Custom evaluators:独自の評価基準を定義
    • LLM-as-a-Judge:評価モデル、採点基準、スコア形式を設定
    • コードベース:Lambdaに評価処理を実装し、文字列一致や業務ルールなどを判定

知っておきたいこと

  • トレースが必要:評価には、OpenTelemetryなどで記録したトレースをAgentCore Observabilityへ送信する必要がある。Harnessではトレース連携が組み込まれている
  • 公式対応はPython版のみ:現時点で、正式対応するフレームワークと計装ライブラリはPython版のみ。TypeScriptは公式サポート対象外
  • Ground Truthはオンライン評価で使用不可:正解データを指定できるのはオンデマンド評価、バッチ評価、データセット評価
  • LLMによる評価は絶対ではない:重要な評価では、Ground TruthやコードベースのEvaluator、人による確認などを組み合わせる
  • 評価にも料金がかかる:Built-in evaluatorsは処理したトークン量、Custom evaluatorsは評価回数や使用モデルなどに応じて課金。オンライン評価ではサンプリング率を設定可能

今回は、事前に定義した採点基準をCustom Evaluatorに設定しました。

最小構成のエージェントは1/5点でしたが、RAGやMemoryなどを組み込んだ今回の構成では4/5点となり、改善結果を定量的に比較できました。

当初はTypeScriptで実装したRuntimeエージェントを評価しようとしましたが、公式対応する計装ライブラリがPython版のみだったため断念しました。今回はEvaluationとの統合が組み込まれているHarnessを使って評価しています。

Bedrock Managed Knowledge Base

Bedrock Managed Knowledge Baseは、ベクトルDBを含むRAG基盤をAWSが管理するKnowledge Baseです。

従来のCustomer-managed Knowledge BaseではOpenSearch ServerlessなどのベクトルDBを選択・管理する必要がありますが、Managed Knowledge Baseではデータソースを接続して取り込めば利用できます。

主な特徴

  • ベクトルDBの管理が不要:データの取り込み、Embedding、インデックス作成、保存、検索、RerankingをAWSが管理
  • Smart Parsing:ファイル形式に応じて解析方法を自動選択。解析モデルを指定せず、PDF、Excel、画像を含む文書などを取り込み可能
  • 対応形式の拡大:従来もPDF内の画像やJPEG/PNGを解析できたが、PowerPoint、より多くの画像形式、音声、動画にも対応
  • Agentic Retrieval:複雑な質問を複数の検索に分解し、必要な情報が揃うまで繰り返し検索
  • Gatewayとの統合:Gatewayへ登録し、RetrieveAgenticRetrieveStreamをMCPツールとして利用可能

知っておきたいこと

  • マルチモーダルは要設定:画像、音声、動画を取り込む場合は、高度なインデックスを有効にする必要がある
  • 取り込みには上限あり:直接取り込みは1回最大10ファイル・毎秒20リクエスト。Ingestion Job(同期処理)はKnowledge Baseごとに最大50件まで同時実行可能
  • ベクトルDBは選択不可:独自のベクトルDB構成や直接管理が必要な場合は、Customer-managed Knowledge Baseを選択する

今回のアプリでは、IPAのデジタルスキル標準のPDFとExcelをS3から取り込み、Gateway経由でエージェントから検索しています。

Smart Parsingにより、Parsing Strategyや解析モデルを個別に選択せず、PDFとExcelをそのままデータソースとして取り込めました。

Strands Agents

Strands Agentsは、ざっくり言うとLangChainみたいなものです。

モデル、プロンプト、ToolsをAgentへ渡すと、モデルが必要なToolを選びながら処理を進めます。AWSが公開しているSDKのため、AgentCoreとの連携機能も充実しています。

主な特徴

  • モデル・Toolsを選択:Bedrock以外のモデルや、独自関数、外部API、MCPなどを利用可能
  • AgentCoreとの統合:Runtime、Memory、Gateway、Code Interpreterなどと連携可能
  • 複数エージェントに対応:Graph、Workflow、Swarmなどを構築可能

今回のアプリでは、Strands AgentsでAIメンターを実装し、TavilyをToolとして追加してWeb検索に対応しています。

(余談)Vibe Codingって勉強にならない?

今回の実装は大部分をCodexに任せており、生成されたコードも細部まではレビューしていません。
その代わり、気になった処理や重要そうな部分は、公式ドキュメントと生成されたコードを見比べながら確認しました。

今回の目的は、AgentCoreのAPIやメソッド名をすべて覚えることではなく、「どんな機能があり、どこで使い、何に注意するか」を一通り理解することです。

目的をそこに絞ったことで、短期間でこれだけの機能を試せました。新しい技術の全体像を素早くつかむ方法として、Vibe Codingはかなり有効だと感じました。

まとめ

少し前までは「LangChainがやっていることをAWS上で提供しているだけでは?」と思っていました。

実際には、エージェントの実行環境だけでなく、Memory、外部ツールとの接続、コード実行、評価など、エージェントを構築・運用するための機能が幅広く用意されています。

次はHITL、Graph、承認ワークフロー、Policyなども触ってみたいと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?