はじめに
AgentCoreも最近話題になってきて、そろそろ置いていかれそうなので、いろいろ触ってみました。
最初はAgentCoreがどんなものかよく分かっていませんでしたが、実際に触ってみることで「どんな機能があり、それぞれ何を担うのか」がだいぶ見えてきました。
この記事では、実際に作ったアプリをもとに、AgentCoreの全体像を紹介します。
※2026年8月20日時点の情報です。
想定読者
- AgentCoreで何ができるのか、ざっくり知りたい人
- AgentCoreの利用を検討しており、事前に全体像を把握したい人
RAGやAIエージェントなどの基本的な知識があることを前提としています。
目次
- 作ったもの
- エージェントを動かす方法
- Agentを拡張する機能
- Bedrock Managed Knowledge Base
- Strands Agents
- (余談)Vibe Codingって勉強にならない?
- まとめ
作ったもの
「自分だけのAIメンター」を作りました。
この記事では、このアプリの機能をもとに、どこで何のAgentCore機能を使っているのかを解説します。
主な機能
- 通常のチャット(Runtime/Strands Agents)
- チャット内容の記憶とスレッド管理(Memory)
- IPAのデジタルスキル標準を使ったRAG(Managed Knowledge Base/Gateway)
- スキルマップの作成・更新(GatewayのMCPツール経由でLambdaを呼び出す)
- スキルマップやキャリア観に基づくコーチング(長期Memory)
- 直近の学習状況をまとめたPowerPointスライドの自動生成(Code Interpreter)
- web検索(Tavily/Strands Agents)
アーキテクチャ
成果物(参考)
RAGとスレッド管理
スキルマップの更新
エージェントを動かす方法
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を保存 -
個別取得(
GetEvent):eventIdを指定してEventを取得 -
セッション一覧(
ListSessions):actorIdに紐づくセッションを取得 -
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を検索可能
-
Namespace:
actorIdやsessionIdなどを使い、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のコードやシェルコマンドを実行可能
-
ライブラリを標準搭載:
pandas、numpy、openpyxl、python-docx、python-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へ登録し、
RetrieveやAgenticRetrieveStreamを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なども触ってみたいと思います。




