はじめに
AWS re:Invent 2025 で発表があった Amazon Bedrock AgentCore Memory に Episodic についてシンプルに纏めます。
と思いましたが、せっかくなので、4 つの組み込み戦略の違いについて具体例を元に纏めてみたいと思います。
Amazon Bedrock AgentCore Memory の概要については過去に以下の記事でも紹介していますので、Memory 機能について学習されたい方はまずそちらを参考にご覧ください。
概要
AgentCore Memory には以下の4つの組み込み戦略があります:
- Semantic Memory
- User Preference Memory
- Summary Memory
- Episodic Memory
1. Semantic Memory Strategy(セマンティック記憶戦略)
概要
会話から 事実情報 を抽出・保存する戦略です。
ユーザーが明示的に述べた、または論理的に推論できる具体的な情報を長期記憶として保持します。
会話例
ユーザー: こんにちは、注文について問い合わせたいのですが。
エージェント: はい、お問い合わせありがとうございます。ご注文番号をお教えください。
ユーザー: 注文番号は ORD-2025-XXXX です。私の名前は山田太郎で、住所は東京都渋谷区神宮前1-2-3です。
エージェント: 山田太郎様、ご注文を確認いたします。
抽出される情報
[
{ "fact": "ユーザーの名前は山田太郎", "confidence": 0.95 },
{ "fact": "住所は東京都渋谷区神宮前1-2-3", "confidence": 0.95 },
{ "fact": "注文番号ORD-2024-78532について問い合わせた", "confidence": 0.90 }
]
実装例
from bedrock_agentcore.memory import MemoryClient
client = MemoryClient(region_name="us-west-2")
memory = client.create_memory_and_wait(
name="CustomerSupportMemory",
description="カスタマーサポート用のセマンティックメモリ",
strategies=[{
"semanticMemoryStrategy": {
"name": "FactExtractor",
"namespaces": ["/customers/{actorId}/facts"]
}
}]
)
活用シーン
- 顧客情報(名前、連絡先、住所)の記憶
- システム構成情報の保持
- 過去のトラブル履歴の参照
- 契約内容や購入履歴の把握
2. User Preference Memory Strategy(ユーザー設定記憶戦略)
概要
ユーザーの 好み、選択パターン、スタイル を学習・保存する戦略です。
複数のセッションにわたってユーザーの嗜好を理解し、パーソナライズされた体験を提供します。
会話例
ユーザー: 今週末、ディナーの予約をしたいです。
エージェント: かしこまりました。どのようなお店をお探しですか?
ユーザー: 私はベジタリアンなので、ベジタリアン対応のお店がいいです。あと、静かな雰囲気のお店が好みです。
エージェント: 承知しました。
抽出される情報
[
{ "preference": "食事制限: ベジタリアン", "category": "dietary", "confidence": 0.95 },
{ "preference": "静かな雰囲気のレストランを好む", "category": "atmosphere", "confidence": 0.90 },
{ "preference": "よく利用するエリア: 渋谷、表参道", "category": "location", "confidence": 0.85 },
]
実装例
from bedrock_agentcore.memory import MemoryClient
client = MemoryClient(region_name="us-west-2")
memory = client.create_memory_and_wait(
name="TravelAgentMemory",
description="旅行予約エージェント用のユーザー設定メモリ",
strategies=[{
"userPreferenceMemoryStrategy": {
"name": "PreferenceLearner",
"namespaces": ["/users/{actorId}/preferences"]
}
}]
)
活用シーン
- ECサイトでの商品レコメンデーション
- コミュニケーションスタイルの適応
- コーディング規約の自動適用
- サービス利用パターンの最適化
3. Summary Memory Strategy(要約記憶戦略)
概要
会話セッションの 要約 を作成・保存する戦略です。
長い会話の本質を凝縮し、将来のインタラクションで効率的にコンテキストを参照できるようにします。
会話例
ユーザー: 本番環境でアプリケーションが断続的にタイムアウトしています。
エージェント: いつから発生していますか?
ユーザー: 今朝の 9 時頃からです。CloudWatch を見ると ECS の CPU 使用率が急上昇しています。
エージェント: 最近デプロイした変更はありますか?
ユーザー: 昨日の夜に新機能をリリースしました。画像処理のバッチジョブです。
エージェント: そのバッチジョブのリソース設定を確認しましょう。
ユーザー: 確認したところ、CPU が 256、メモリが 512 MB でした。
エージェント: 画像処理には少なすぎる可能性があります。1024/2048に増やしてみてください。
ユーザー: 設定を変更して再デプロイしました。
エージェント: 状況はいかがですか?
ユーザー: CPU 使用率が安定しました!タイムアウトも解消されています。
抽出される情報
{
"session_id": "session-2025-1201-001",
"global_summary": "本番環境の ECS アプリケーションでタイムアウトが発生し、リソース設定の調整により解決した",
"detailed_summary": {
"issue": "本番環境で断続的なタイムアウトが発生(9 時頃から)",
"root_cause": "新規リリースした画像処理バッチジョブのリソース不足(CPU 256、メモリ 512 MB)",
"solution": "ECS タスクのリソースを CPU 1024、メモリ 2048 MBに増加",
"outcome": "CPU 使用率が安定し、タイムアウトが解消",
"recommendation": "画像処理タスクには十分なリソースを割り当てる"
},
"key_topics": ["ECS", "タイムアウト", "リソース設定", "画像処理", "CPU 使用率"],
"resolution_status": "解決済み"
}
実装例
from bedrock_agentcore.memory import MemoryClient
client = MemoryClient(region_name="us-west-2")
memory = client.create_memory_and_wait(
name="SupportSessionMemory",
description="サポートセッション用の要約メモリ",
strategies=[{
"summaryMemoryStrategy": {
"name": "SessionSummarizer",
"namespaces": ["/sessions/{actorId}/{sessionId}/summary"]
}
}]
)
活用シーン
- 長時間サポートセッションの記録
- プロジェクト会議の要点整理
- コンテキストウィンドウの効率的な利用
- 過去の議論内容の素早い参照
4. Episodic Memory Strategy(エピソード記憶戦略)
概要
一連のインタラクションを エピソード として記録・保存する戦略です。
状況、意図、評価、振り返りを含む構造化された記録を作成し、成功/失敗パターンから学習できるようにします。
会話例
ユーザー: 新しい Lambda 関数をデプロイしたいです。
エージェント: どのような関数ですか?
ユーザー: S3 にアップロードされた画像をリサイズする関数です。
エージェント: SAM テンプレートを作成しますね。ランタイムは何を使いますか?
ユーザー: Python 3.12 でお願いします。
エージェント: テンプレートを作成しました。sam deploy を実行してください。
ユーザー: エラーが出ました。"Resource handler returned message: 'Lambda function xyz already exists'"
エージェント: 同名の関数が存在するようです。既存の関数を更新するか、別名で作成するか選んでください。
ユーザー: 既存の関数を更新したいです。
エージェント: sam deploy に --force-upload オプションを追加してください。
ユーザー: まだエラーです。"Role does not have permission to perform lambda:UpdateFunctionCode"
エージェント: IAM ロールに権限が不足しています。lambda:UpdateFunctionCode を追加する必要があります。
ユーザー: IAM ポリシーを更新し、再度デプロイをしたら成功しました!
抽出される情報
<episode id="ep-2024-1203-lambda-deploy">
<situation>
ユーザーが S3 画像リサイズ用の Lambda 関数をデプロイしようとしている。
Python 3.12 ランタイムを使用。
</situation>
<intent>
新規 Lambda 関数のデプロイ、または既存関数の更新
</intent>
<actions>
<action step="1" tool="sam_template_generator" status="success">
SAM テンプレートを作成
</action>
<action step="2" tool="sam_deploy" status="failed">
デプロイ実行 → "Lambda function already exists" エラー
</action>
<action step="3" tool="sam_deploy" status="failed">
--force-upload オプション追加 → IAM 権限エラー
</action>
<action step="4" tool="iam_policy_update" status="success">
lambda:UpdateFunctionCode 権限を追加
</action>
<action step="5" tool="sam_deploy" status="success">
再デプロイ成功、テストパス
</action>
</actions>
<assessment>
最終的に成功。2 つのエラーに遭遇したが、適切な対処で解決。
</assessment>
<justification>
1. 既存関数との名前衝突 → --force-upload で解決
2. IAM権限不足 → ポリシー更新で解決
</justification>
<reflection>
- 既存リソースの確認を事前に行うべき
- デプロイ前に IAM 権限の確認を推奨
- lambda:UpdateFunctionCode は頻繁に必要になる権限
</reflection>
</episode>
実装例
from bedrock_agentcore.memory import MemoryClient
client = MemoryClient(region_name="us-west-2")
memory = client.create_memory_and_wait(
name="AgentWorkflowMemory",
description="エージェントワークフロー用のエピソードメモリ",
strategies=[{
"episodicMemoryStrategy": {
"name": "EpisodeTracker",
"namespaces": ["/episodes/{actorId}"],
"reflectionNamespaces": ["/reflections/{actorId}"]
}
}]
)
活用シーン
- エージェントの自己改善
- トラブルシューティングパターンの学習
- ワークフロー最適化
- 失敗からの学習と同じミスの回避
まとめ
| 戦略 | 何を覚えるか | いつ使うか |
|---|---|---|
| Semantic | 具体的な事実・情報 | ユーザー情報、設定値を記憶したい時 |
| User Preference | 好み・選択パターン | パーソナライズされた体験を提供したい時 |
| Summary | セッションの要約 | 長い会話を効率的に参照したい時 |
| Episodic | 一連の行動と結果 | パターン学習や自己改善をしたい時 |
なお、記憶したメモリは呼び出してくれるるかどうかは、あるあるですがモデル次第といった声もきくので、もしいい感じに呼び出してくれない時は、モデルを変更して試してみると良いかもしれません。

