
AgentCore CLI を使って AI エージェントを AgentCore にデプロイしてみた
はじめに
こんにちは、コンサルティング部の神野です。最近スーパーのライフが気になっています。
AWS から AgentCore CLI(@aws/agentcore)という新しい CLI ツールが Public Preview として公開されています。
プロジェクトの作成からローカル開発、AWS へのデプロイまでをコマンド一発で進められるものになっています。
あれ、AgentCore Starter Toolkitあったよね・・・?となる方もいると思うのですが、私もこの2つの違いが気になりました。
違いも意識しつつ、今回はこの AgentCore CLI を実際に触ってみて、エージェントの作成からデプロイ・動作確認までの一連の流れを紹介していきます。
前提
今回は下記環境を使用しました。
環境情報
| 項目 | バージョン / 情報 |
|---|---|
| Node.js | v25.5.0 |
| Python | 3.13.11 |
| AgentCore CLI | 0.3.0-preview.6.1 |
AgentCore CLI
AgentCore CLI は、Amazon Bedrock AgentCore 上で AI エージェントを作成・開発・デプロイするためのコマンドラインツールです。
特徴としてはざっと下記のような形です。
- プロジェクトの雛形を対話的に作成できる(
agentcore create) - ローカル開発サーバーが使える(
agentcore dev) - AWS CDK ベースでインフラをデプロイできる(
agentcore deploy) - Memory、Gateway、Identity、Evaluator などのリソースを
agentcore addで追加できる - インタラクティブな TUI(ターミナル UI)を備えている
Starter Toolkit との違い
AgentCore CLI が登場する前から、Bedrock AgentCore Starter Toolkit(Python ベース)というツールが提供されていました。
違いをざっくり整理すると、現時点では以下のような印象です。
| 観点 | AgentCore CLI | Starter Toolkit |
|---|---|---|
| 実装基盤 | CLI 自体は Node.js パッケージ(@aws/agentcore)として提供されており、現時点で Python エージェントが生成されます |
Python ベースのツールキットです。Python 向けのクイックスタートに加えて、TypeScript エージェント向けのガイドも用意されています |
| 操作感 | agentcore create などのコマンドに加えて、ターミナル UI から対話的に操作できます |
CLI ベースで利用します。対話的に進められますが、AgentCore CLI のようなターミナル UI 前提の体験ではありません |
| インフラ管理 | 生成されるプロジェクトに agentcore/cdk/ が含まれており、CDK ベースでインフラを管理できます |
createコマンドでCDK/Terraformの雛形を自動で作ることは可能です。https://dev.classmethod.jp/articles/bedrock-agentcore-starter-toolkit-create-command/ ただデプロイは自分で別途コマンドを実行する必要があります。 |
| 新規採用の推奨度 | 公式 README でも Starter Toolkit 利用者にアンインストールを案内しており、現在これから触り始めるならまずはこちらを確認するのが自然そうです | いまも利用可能ですが、これから新規に触る場合は、まず AgentCore CLI の情報を確認するのが良さそうです |
Starter Toolkit でも似たようなことはカバーしていたのですが、AgentCore CLI ではターミナル UI ウィザードによる直感的な操作やレーティングスケールのプリセットが加わり、CDK ベースのインフラ管理も含めてより洗練された開発者体験になっている印象です。
ここで気になるのですが、どちらを使うのが良いのでしょうか・・・?継続的にアップデートされるのでしょうか・・・??
みのるんさんが Issue で質問したところ、AgentCore CLI が今後の標準であり、現時点から使用するのが良いという回答がありました。新規で開発する、または迷った際は AgentCore CLI をまずは採用するのを考えても良さそうですね。
ターミナル UI
先にこの機能を紹介した方が中身が入りやすいと思い紹介します。
AgentCore CLI の面白い機能として、インタラクティブな ターミナル UI があります。引数なしで agentcore を実行すると起動します。
agentcore

いろいろなことができそうですね。シンプルにAIエージェントを実行するinvoke を試してみます。(すでにAIエージェントをデプロイしている前提です)

ストリームで返事が返ってきました!
今度はAIエージェントを評価するevalsを試してみます。



対話形式で Evaluator、対象期間、対象セッションを選択して実行できます。
すると下記のように結果が返ってきます。

ターミナル UI ではこのように利用可能なコマンドが一覧表示され、ガイド付きで操作を進められます。
今日紹介する非対話コマンドの多くは、ターミナル UI から代替可能です。CLI のコマンドを覚えていなくても、ターミナル UI から目的の操作を見つけられるのは地味にありがたいですね!評価の実行までターミナル上で完結できるのは楽で良いなと思いました。
インストールして早速試してみましょう。
インストール
npm でグローバルインストールします。
npm install -g @aws/agentcore
インストールが完了したら、バージョンを確認してみます。
agentcore --version
0.3.0-preview.6.1
バージョン番号が表示されれば OK です!
プロジェクトの作成
AgentCore CLI の管理単位について先に整理しておきます。
プロジェクト(agentcore.json)
├── エージェント(agents[])
├── メモリ(memories[])
├── クレデンシャル(credentials[])
├── カスタム評価器(evaluators[])
├── オンライン評価設定(onlineEvalConfigs[])
└── Gateway(mcp.json)
└── ターゲット(targets[])
agentcore create で作成されるのはプロジェクト全体で、デフォルトで 1 つのエージェントが含まれます。
Memory や Gateway、Credential といったリソースはすべてプロジェクトレベルで定義され、エージェントはコード内から環境変数を通じてこれらのリソースを参照します。デプロイも agentcore deploy でプロジェクト全体が対象になります。
agentcore add agent コマンドで、プロジェクトにエージェントを追加できます。
agentcore add agent --name SubAgent --framework Strands --model-provider Bedrock --protocol HTTP
protocol には HTTP、MCP、A2A の 3 種類が選べます。また、--type byo を指定すると既存のコードを持ち込むこともできます。
対話形式で作成する
agentcore create でプロジェクトを作成します。対話形式でフレームワークやモデルプロバイダーを選択できます。
agentcore create
対話ウィザードでは以下を聞かれます。
- プロジェクト名の選択

- プロジェクトにエージェントを追加するかどうか選択

- エージェント名の入力

- 新しくエージェントを作るか、既存のコードを持ち込みするか

- 言語の選択(現時点ではPythonしか選択できません、TypeScriptも対応して欲しいですね・・・Soonとあるので期待大です)

- ビルドタイプの選択(Direct Code Deploy / Container)

- プロトコルの選択(HTTP/A2A/MCP)

- フレームワーク(Strands / LangChain + LangGraph / GoogleADK / OpenAI Agents)の選択

- モデルプロバイダー(Bedrock / Anthropic / OpenAI / Gemini)の選択

- Memory の有無の選択

- ネットワークモード(PUBLIC / VPC)

丁寧にヒアリングしてくれますね。
今回は Strands Agents + Amazon Bedrock の組み合わせで、Memory も有効にして作成しました。
MemoryはLong-term and short-termを有効にしたのですが、SEMANTIC と SUMMARIZATION、 USER_PREFERENCEの3種の長期記憶戦略が有効になっていました。
非対話形式で作成する
CI/CD やスクリプトから使う場合は、フラグを指定して非対話形式で作成することもできます。
agentcore create --name MyAgent --framework Strands --model-provider Bedrock --memory longAndShortTerm --defaults
--defaults を付けると、未指定の項目はデフォルト値が使われます。
生成されるプロジェクト構造
作成後のディレクトリ構成を確認してみます。
SampleProject/
├── agentcore/
│ ├── .env.local # ローカル開発用の環境変数(gitignore 対象)
│ ├── agentcore.json # リソース定義(エージェント、メモリ等)
│ ├── aws-targets.json # デプロイ先リージョン設定
│ └── cdk/ # CDK インフラコード
├── app/
│ └── MyAgent/
│ ├── main.py # エージェントのエントリポイント
│ ├── pyproject.toml # Python 依存関係
│ ├── Dockerfile # コンテナビルド用
│ ├── mcp_client/
│ │ └── client.py # MCP クライアント接続設定
│ ├── memory/
│ │ └── session.py # Memory セッション管理
│ └── model/
│ └── load.py # モデル読み込み設定
agentcore/agentcore.json がプロジェクトの核となる設定ファイルで、エージェント・メモリ・クレデンシャル・評価の定義がすべてここに集約されています。エージェントの実コードは app/ 配下にフレームワークごとのテンプレートとして生成されます。
すぐにデプロイして試せるようなコードになっていました。
設定ファイルの詳細
プロジェクト作成後に生成される agentcore/ ディレクトリの設定ファイルについて、もう少し詳しく見ていきます。
agentcore.json
プロジェクトの核となる設定ファイルです。今回作成したプロジェクトでは以下のような内容が生成されていました。
{
"name": "sampleProject",
"version": 1,
"agents": [
{
"type": "AgentCoreRuntime",
"name": "MyAgent",
"build": "Container",
"entrypoint": "main.py",
"codeLocation": "app/MyAgent/",
"runtimeVersion": "PYTHON_3_12",
"networkMode": "PUBLIC",
"modelProvider": "Bedrock",
"protocol": "HTTP"
}
],
"memories": [
{
"type": "AgentCoreMemory",
"name": "MyAgentMemory",
"eventExpiryDuration": 30,
"strategies": [
{
"type": "SEMANTIC",
"namespaces": [
"/users/{actorId}/facts"
]
},
{
"type": "USER_PREFERENCE",
"namespaces": [
"/users/{actorId}/preferences"
]
},
{
"type": "SUMMARIZATION",
"namespaces": [
"/summaries/{actorId}/{sessionId}"
]
}
]
}
],
"credentials": [],
"evaluators": [],
"onlineEvalConfigs": []
}
主要なフィールドの役割を整理しておきます。
| フィールド | 説明 |
|---|---|
name |
プロジェクト名(英数字、23文字以内) |
version |
スキーマバージョン |
agents[] |
エージェント定義の配列。build(Direct Code Deploy / Container)、runtimeVersion(PYTHON_3_10〜3_13)、networkMode(PUBLIC / VPC)などを指定 |
memories[] |
Memory リソースの配列。戦略(SEMANTIC / SUMMARIZATION / USER_PREFERENCE)と有効期限を定義 |
credentials[] |
API キーや OAuth クレデンシャルの配列 |
evaluators[] |
カスタムevaluatorの定義 |
onlineEvalConfigs[] |
オンライン評価の設定 |
エージェントや Memory を agentcore add で追加すると、このファイルに自動的に反映されていく仕組みですね。
また、エージェントにカスタム環境変数を渡したい場合は、agents[] 内に envVars フィールドを追加します。
{
"agents": [
{
"type": "AgentCoreRuntime",
"name": "MyAgent",
...
"envVars": [
{ "name": "LOG_LEVEL", "value": "INFO" },
{ "name": "CUSTOM_PARAM", "value": "my-value" }
]
}
]
}
envVars の名前には英数字とアンダースコアのみ使用できます。ここで設定した環境変数は、ローカル開発時(agentcore dev)にもデプロイ後にも自動的にランタイムへ渡されます。なお、agentcore add には環境変数を直接追加するサブコマンドはなかったので、agentcore.json を直接編集する形になります。
mcp.json
Gateway の設定ファイルです。MCP(Model Context Protocol)互換のゲートウェイとそのターゲットを定義します。プロジェクト作成時点では生成されず、agentcore add gateway で Gateway を追加した際に自動生成されます。
{
"agentCoreGateways": [
{
"name": "ToolGateway",
"description": "Gateway for ToolGateway",
"targets": [],
"authorizerType": "NONE",
"enableSemanticSearch": true,
"exceptionLevel": "NONE"
}
]
}
| フィールド | 説明 |
|---|---|
agentCoreGateways[] |
Gateway 定義の配列 |
targets[] |
接続先ターゲットの配列(agentcore add gateway-target で追加) |
authorizerType |
認可タイプ(NONE / AWS_IAM / CUSTOM_JWT) |
enableSemanticSearch |
セマンティック検索の有効化(デフォルト true) |
exceptionLevel |
例外レベル(NONE / DEBUG) |
Gateway を作成した時点では targets は空配列になっていて、後から agentcore add gateway-target でターゲットを追加していく形です。
aws-targets.json
デプロイ先の AWS アカウント・リージョンを指定する設定ファイルです。
[]
デフォルトでは空配列になっていて、agentcore deploy 実行時にアカウント情報が読み取られて設定されていました。複数設定してターゲットを明示的に指定することも可能です。
[
{
"name": "default",
"account": "123456789012",
"region": "us-east-1",
"description": "Default target (us-east-1)"
}
]
.env.local
ローカル開発用の環境変数ファイルです。.gitignore に含まれており、リポジトリにはコミットされません。
agentcore add identity で追加したクレデンシャルは、ローカル開発時にこのファイルに格納されます。環境変数の命名規則は以下のとおりです。
| 環境変数 | 説明 |
|---|---|
AGENTCORE_CREDENTIAL_{NAME}=value |
Identity で追加したクレデンシャルの値 |
デプロイ後は Identity で管理されるため、.env.local に書くのはローカル開発時のみです。
エージェントのコードを確認する
生成されたエージェントのエントリポイント app/MyAgent/main.py を見てみます。
from strands import Agent, tool
from bedrock_agentcore.runtime import BedrockAgentCoreApp
from model.load import load_model
from mcp_client.client import get_streamable_http_mcp_client
from memory.session import get_memory_session_manager
app = BedrockAgentCoreApp()
log = app.logger
# MCP クライアントの定義
mcp_clients = [get_streamable_http_mcp_client()]
# ツールの定義
tools = []
@tool
def add_numbers(a: int, b: int) -> int:
"""Return the sum of two numbers"""
return a+b
tools.append(add_numbers)
for mcp_client in mcp_clients:
if mcp_client:
tools.append(mcp_client)
def agent_factory():
cache = {}
def get_or_create_agent(session_id, user_id):
key = f"{session_id}/{user_id}"
if key not in cache:
cache[key] = Agent(
model=load_model(),
session_manager=get_memory_session_manager(session_id, user_id),
system_prompt="You are a helpful assistant. Use tools when appropriate.",
tools=tools
)
return cache[key]
return get_or_create_agent
get_or_create_agent = agent_factory()
@app.entrypoint
async def invoke(payload, context):
log.info("Invoking Agent.....")
session_id = getattr(context, 'session_id', 'default-session')
user_id = getattr(context, 'user_id', 'default-user')
agent = get_or_create_agent(session_id, user_id)
stream = agent.stream_async(payload.get("prompt"))
async for event in stream:
if "data" in event and isinstance(event["data"], str):
yield event["data"]
if __name__ == "__main__":
app.run()
BedrockAgentCoreApp がランタイムのラッパーとなっていて、@app.entrypoint デコレータを付けた関数がエージェントの呼び出し口になります。
生成されたコードでは Memory、MCP クライアント、モデル読み込みがそれぞれモジュール分割されています。
model/load.py—BedrockModelのインスタンス生成memory/session.py—AgentCoreMemorySessionManagerを使ったセッション管理。環境変数MEMORY_MYAGENTMEMORY_IDから Memory ID を読み込むmcp_client/client.py— Streamable HTTP MCP クライアントの接続設定
Gateway を追加してデプロイすると、環境変数 AGENTCORE_GATEWAY_{GATEWAY名}_URL に Gateway の URL が自動注入されます。MCP クライアントの接続先をこの環境変数から読み込むように mcp_client/client.py を修正すれば、Gateway 経由で外部ツールに接続できるようになります。
リソースの追加
AgentCore CLI では、エージェント以外のリソースも agentcore add コマンドで宣言的に追加できます。
ターミナル UI から対話形式でリソースを追加・作成できるので、手軽に試せるのが良いですね。追加できるリソースも AgentCore のプリミティブを一通りサポートしているイメージです。


親切に対話してリソースを作れそうですね。シェルなどで自動化する必要がないなら、最初は対話形式で設定すると迷わず進められるかなと思います。
一方で非対話形式でも追加は可能なので、いくつかコマンド例を紹介します。
Memory の追加
agentcore add memory --name SharedMemory --strategies SEMANTIC,SUMMARIZATION --expiry 30
Memory の戦略には SEMANTIC(ベクトル検索)、SUMMARIZATION(会話履歴の要約)、USER_PREFERENCE(ユーザー設定の記憶)の 3 種類を指定できます。追加した Memory は agentcore.json の memories 配列に定義され、エージェントコード内では環境変数 MEMORY_SHAREDMEMORY_ID として参照できます。
Gateway の追加
agentcore add gateway --name ToolGateway
Gateway は MCP(Model Context Protocol)互換のプロキシで、外部ツールへの接続を管理します。Gateway にはターゲットを追加して、Lambda 関数や外部の MCP サーバーなどを接続できます。ターゲットタイプは mcp-server、api-gateway、open-api-schema、smithy-model、lambda-function-arn の 5 種類です。
agentcore add gateway-target \
--gateway ToolGateway \
--name WeatherAPI \
--type mcp-server \
--endpoint https://mcp.example.com/mcp
Gateway に JWT 認可を設定したい場合は、--authorizer-type CUSTOM_JWT を指定して作成します。
agentcore add gateway \
--name SecureGateway \
--authorizer-type CUSTOM_JWT \
--discovery-url https://example.auth0.com/.well-known/openid-configuration \
--allowed-audience my-api-audience
Lambda ターゲットの場合、ツール定義を JSON ファイル(--tool-schema-file)で渡します。
agentcore add gateway-target \
--gateway ToolGateway \
--name WeatherLambda \
--type lambda-function-arn \
--lambda-arn arn:aws:lambda:us-east-1:123456789012:function:get-weather \
--tool-schema-file ./tool-schema.json
Identity の追加
API キーや OAuth クレデンシャルを安全に管理するための仕組みです。ローカル開発時は .env.local に格納され、デプロイ後は AgentCore Identity で管理されます。
agentcore add identity --name OpenAI --api-key sk-...
agentcore add identity \
--type oauth \
--name MyOAuthService \
--discovery-url https://example.com/.well-known/openid-configuration \
--client-id my-client-id \
--client-secret my-client-secret \
--scopes "read,write"
またデプロイ時に.env.localでの値を使用するか、手動で入力するか、スキップして後から対応するかが選択可能です。

コマンドに迷ったら先ほど紹介したターミナルUIを使用して追加するのが良いかと思います。
一通りコマンドの例を紹介したところで、ローカル開発、AWSへのデプロイをやってみます。
ローカル開発
ローカルでエージェントを動かしてみます。
agentcore dev
このコマンドを実行すると、対話できるウィンドウが立ち上がります。試しにこんにちはと入力してみます。

無事にローカルでエージェントが動きましたね!サクッと対話できるのは良きです。
AWS へのデプロイ
いよいよ AWS にデプロイします。
agentcore deploy
内部的には AWS CDK が実行され、以下のリソースが作成されます。
- AgentCore Runtime のエンドポイント
- ECR リポジトリとコンテナイメージ
- AgentCore Memory リソース(設定している場合)
- IAM ロール
- CloudWatch ロググループ
また、デプロイ後に対象リージョンで CloudWatch Transaction Search(トランザクション検索)が未有効の場合、自動的に有効化する処理も組み込まれています(PR #506)。これにより、デプロイ後すぐに CloudWatch でエージェントのトレースやセッションの詳細を検索・分析できるようになります。
今までは手動で1回有効化しておく必要があったので、これは嬉しいアップデートですね。
デプロイが完了したら、ステータスを確認してみます。
agentcore status

エージェントの状態、エンドポイント情報、環境変数の設定状況などが確認できます。
今回は Gateway、Identity、Memory、カスタム環境変数をひと通り追加してからデプロイしたのですが、コンソール上で確認してみると以下のような環境変数が自動設定されていました。
| 環境変数 | 値の例 | 設定元 |
|---|---|---|
MEMORY_MYAGENTMEMORY_ID |
SampleProject_MyAgentMemory-xxx |
Memory 追加時 |
AGENTCORE_GATEWAY_TOOLGATEWAY_URL |
https://sampleproject-toolgateway-xxxxx.gateway...amazonaws.com/mcp |
Gateway 追加時 |
AGENTCORE_GATEWAY_TOOLGATEWAY_AUTH_TYPE |
AWS_IAM |
Gateway 追加時 |
CREDENTIAL_OPENAI_NAME |
OpenAI |
Identity 追加時 |
CUSTOM_PARAM |
my-value |
envVars で定義 |
LOG_LEVEL |
INFO |
envVars で定義 |
リソースを追加するとそれに対応する環境変数が自動で注入される仕組みになっています。エージェントのコード内で os.environ.get("MEMORY_MYAGENTMEMORY_ID") のようにアクセスできるので、接続情報をハードコードする必要がありません。
デプロイしたエージェントの動作確認
デプロイが完了したら、クラウド上のエージェントにプロンプトを送ってみます。
agentcore invoke "こんにちは" --agent MyAgent
実行すると、以下のようにレスポンスが表示されます。
Provider: Bedrock
こんにちは!お元気ですか?
何かお手伝いできることはありますか?質問や知りたいことがあれば、お気軽にお聞きください。
Log: /path/to/project/agentcore/.cli/logs/invoke/invoke-MyAgent-20260322-122023.log
レスポンスが返ってきましたね! Provider: Bedrock はモデルプロバイダーの情報で、最後の Log: にはリクエスト・レスポンスの詳細が記録されたログファイルのパスが表示されます。
ログファイルの中身も見てみます。
================================================================================
AGENTCORE INVOKE LOG
Agent: MyAgent
Runtime ARN: arn:aws:bedrock-agentcore:us-east-1:123456789012:runtime/SampleProject_MyAgent-xxxxx
Region: us-east-1
Session ID: none
Started: 2026-03-22T03:20:23.910Z
================================================================================
[12:20:23.911] INVOKE REQUEST (Session: none)
--- REQUEST ---
{
"timestamp": "2026-03-22T03:20:23.911Z",
"agent": "MyAgent",
"runtimeArn": "arn:aws:bedrock-agentcore:us-east-1:123456789012:runtime/SampleProject_MyAgent-xxxxx",
"region": "us-east-1",
"prompt": "こんにちは"
}
--- END REQUEST ---
[12:20:28.746] INVOKE RESPONSE (4835ms)
--- RESPONSE ---
{
"timestamp": "2026-03-22T03:20:28.746Z",
"durationMs": 4835,
"success": true,
"response": "こんにちは!お元気ですか?..."
}
--- END RESPONSE ---
リクエストとレスポンスが JSON 形式で記録されていて、レスポンスタイムも確認できます。デバッグや性能分析に活用できますね。
セッション ID を使った会話の継続
次に、セッション ID を指定して Memory による会話の文脈保持を試してみます。
agentcore invoke "私の名前は神野です" --session-id my-session-001-01231233123123123123312312312 --agent MyAgent
Provider: Bedrock
こんにちは、神野さん!はじめまして。
お名前を教えていただきありがとうございます。何かお手伝いできることはありますか?質問や知りたいことがあれば、お気軽にお尋ねください。
Log: /path/to/project/agentcore/.cli/logs/invoke/invoke-MyAgent-20260322-122722.log
同じセッション ID で続けて呼び出してみます。
agentcore invoke "記憶しておりますか?先ほどの発言を。" --session-id my-session-001-01231233123123123123312312312 --agent MyAgent
Provider: Bedrock
はい、記憶しております!
先ほど「私の名前は神野です」とおっしゃいましたね。神野さんのお名前はしっかり覚えています。
何かお手伝いできることがありましたら、お気軽にお申し付けください。
Log: /path/to/project/agentcore/.cli/logs/invoke/invoke-MyAgent-20260322-122746.log
しっかり名前を覚えてくれていますね!! 同じセッション ID を使うことで、AgentCore Memory が会話の文脈を保持してくれているのが確認できました。
評価(Evaluations)
AgentCore CLI には LLM-as-a-Judge ベースの評価機能が組み込まれています。エージェントの応答品質を定量的に測定できるのはありがたいですね。実際に Evaluator を作成して評価を実行してみます。
まずは簡単にEvaluatorの説明をします。
Built-in Evaluator
まず、AgentCore には事前定義済みの Built-in Evaluator が用意されています。
独自の instructions を書かなくてもすぐに評価を始められるのが良いポイントです。
カスタム Evaluator の作成
Built-in Evaluator では足りない場合は、カスタム Evaluator をAgentCore CLIで作成できます。
agentcore add evaluator \
--name ResponseQuality \
--level SESSION \
--model us.anthropic.claude-sonnet-4-5-20250929-v1:0 \
--instructions "Evaluate the quality and helpfulness of the agent response. Context: {context}" \
--rating-scale 1-5-quality
評価レベルは 3 段階から選べます。
| レベル | 評価対象 |
|---|---|
| SESSION | セッション全体の品質 |
| TRACE | ターンごとの応答精度 |
| TOOL_CALL | 個別のツール選択の適切さ |
--rating-scale にはプリセットとして 1-5-quality(デフォルト)、1-3-simple、pass-fail、good-neutral-bad が用意されています。用途に応じて数値スケールかカテゴリカルスケールかを選べますね。
オンデマンド評価の実行
Evaluator を作成してデプロイしたら、過去のトレースに対して評価を実行してみます。
agentcore run evals --agent MyAgent --evaluator ResponseQuality --days 7
指定した期間(ここでは過去 7 日間)のトレースに対して、LLM-as-a-Judge による評価が行われます。Built-in Evaluator を使う場合は以下のように指定します。
agentcore run evals --agent MyAgent --evaluator Builtin.Helpfulness --days 7
実行結果を見てみます。
Agent: MyAgent | Mar 22, 2026, 12:28 PM | Sessions: 2 | Lookback: 7d
Builtin.Helpfulness: 0.50
Results saved to: /path/to/project/agentcore/.cli/eval-results/eval_2026-03-22_03-28-42.json
評価結果がターミナルに表示され、詳細な JSON ファイルも保存されます。JSON の中身を見てみると、セッションごとのスコア、ラベル、評価理由(explanation)が記録されています。
{
"timestamp": "2026-03-22T03:28:42.469Z",
"agent": "MyAgent",
"evaluators": ["Builtin.Helpfulness"],
"lookbackDays": 7,
"sessionCount": 2,
"results": [
{
"evaluator": "Builtin.Helpfulness",
"aggregateScore": 0.5,
"sessionScores": [
{
"sessionId": "55541c29-a909-48b1-af5f-8815aebf3297",
"value": 0.5,
"label": "Neutral/Mixed",
"explanation": "The user's initial message 'こんにちは' is a greeting..."
}
],
"tokenUsage": {
"inputTokens": 1757,
"outputTokens": 621,
"totalTokens": 2378
}
}
]
}
今回は「こんにちは」のような挨拶だけのやり取りだったので、Helpfulness としては 0.50(Neutral/Mixed)という評価になりましたね。特に有益な会話をしているわけでもないのでそれはそうかって感じですね。
カスタム Evaluator(ResponseQuality)でも同様に実行してみます。
Agent: MyAgent | Mar 22, 2026, 12:57 PM | Sessions: 2 | Lookback: 7d
ResponseQuality: 3.00
Results saved to: /path/to/project/agentcore/.cli/eval-results/eval_2026-03-22_03-57-17.json
こちらも問題なく動きました!
ログを見ると1-5-quality スケールで 3.00(Good)という結果でした。評価理由には「Japanese language and honorifics を適切に使用」「Memory による名前の記憶が正しく機能」などが記載されていて、Evaluator がどのような観点で評価したのかも確認できます。
{
"timestamp": "2026-03-22T03:57:17.969Z",
"agent": "MyAgent",
"evaluators": [
"ResponseQuality"
],
"lookbackDays": 7,
"sessionCount": 2,
"results": [
{
"evaluator": "ResponseQuality",
"aggregateScore": 3,
"sessionScores": [
{
"sessionId": "55541c29-a909-48b1-af5f-8815aebf3297",
"value": 3,
"label": "Good",
"explanation": "The user simply greeted the agent with 'こんにちは' (Hello in Japanese). The agent's response is appropriate and well-constructed in several ways: 1) It reciprocates the greeting in Japanese, maintaining language consistency. 2) It asks 'お元気ですか?' (How are you?), which is a natural follow-up to a greeting. 3) It proactively offers assistance by asking if there's anything it can help with. 4) It encourages the user to ask questions freely with 'お気軽にお聞きください' (please feel free to ask). 5) It includes a friendly emoji to create a welcoming tone. The response is culturally appropriate, polite, and conversational. It successfully opens the door for further interaction while being concise and not overwhelming. The agent demonstrates readiness to help without being pushy. This response meets all expectations for handling a simple greeting - it's warm, professional, maintains the user's language choice, and effectively invites continued conversation."
},
{
"sessionId": "my-session-001-01231233123123123123312312312",
"value": 3,
"label": "Good",
"explanation": "The conversation consists of two exchanges. In the first exchange, the user introduces themselves as '神野' (Kamino/Jinno). The agent responds politely in Japanese, acknowledging the name and offering assistance. This is appropriate and courteous.\n\nIn the second exchange, the user asks if the agent remembers the previous statement. The agent confirms it does remember and accurately recalls that the user said '私の名前は神野です' (My name is Kamino/Jinno). The agent demonstrates successful memory retention across the conversation.\n\nStrengths: 1) The agent uses appropriate Japanese language and honorifics (さん suffix), showing cultural awareness. 2) The agent correctly remembers the user's name from the previous exchange, which is the core of what was being tested. 3) The tone is friendly and helpful throughout. 4) The agent explicitly quotes what the user said, confirming accurate memory.\n\nThe responses are appropriate, polite, and functionally correct. The agent successfully demonstrates conversation continuity and memory - a key capability being tested. The quality meets expectations for a basic memory retention test with culturally appropriate responses. There are no significant errors or issues that would warrant a lower score, but the responses are straightforward without exceptional added value that would justify exceeding expectations."
}
],
"tokenUsage": {
"inputTokens": 1160,
"outputTokens": 557,
"totalTokens": 1717
}
}
]
}
オンライン評価の設定
本番トラフィックに対してサンプリングベースの継続評価も設定できます。
agentcore add online-eval \
--name QualityMonitor \
--agent MyAgent \
--evaluator ResponseQuality \
--sampling-rate 10 \
--enable-on-create
--enable-on-create を付けると、デプロイ後にオンライン評価が即座に有効化されます。このフラグを付けない場合はデプロイ後も Disabled の状態になり、マネジメントコンソールから手動で有効化する必要があります。
クリーンアップ
検証が終わったら、作成したリソースを削除します。
agentcore remove all --force
このコマンドは agentcore.json と mcp.json のスキーマをリセット(空の状態に戻す)します。ソースコード自体は変更されません。
実際に AWS 上のリソース(AgentCore Runtime、Memory、ECR リポジトリなど)を削除するには、スキーマリセット後に agentcore deploy を実行します。
agentcore deploy
空のスキーマでデプロイすることで、CloudFormation スタックの削除が行われ、AWS 上のリソースがクリーンアップされます。
おわりに
まだ Public Preview の段階なので、今後の仕様変更の可能性はありますが、AgentCore の開発をまずは始めよう!と思った際にターミナル UI のガイドに沿って進められるのはありがたいなと感じました。リソースの追加などもAgentCore CLIを土台にして最初は開発を進めていくと迷いが少なくなりそうですね。
検証していると思ったよりもやれることが多くてびっくりしました。他にも気になった点はあるのですが全部は書き切れていないので、また面白い使い方や注目するポイントがあれば別途記事で共有できればと思います。
本記事が少しでも参考になりましたら幸いです。最後までご覧いただきありがとうございました!









