エピソード記憶(エピソードキオク)
LLMエージェントが過去の対話・行動・イベントを時系列で構造化して保存し、類似状況での意思決定に活用する記憶システム。認知科学のエピソード記憶概念をAIに応用したもので、Generative AgentsやVoyager等で実装される。
エピソード記憶とは
エピソード記憶(Episodic Memory)は、LLMエージェントが「いつ・どこで・何を・どのように」経験したかを時系列で構造化して保存し、将来の類似タスクで参照・活用する記憶メカニズムである。認知心理学者Endel Tulvingが1972年に提唱した人間のエピソード記憶概念を、AIエージェント向けに再解釈・実装したものだ。
2023年のStanford「Generative Agents: Interactive Simulacra of Human Behavior」論文(Park et al.)がエピソード記憶のAI実装を本格化させた。この研究では25体のエージェントが仮想町で生活し、各エージェントが経験を「観察→振り返り→計画」のサイクルで処理・蓄積することで、人間らしい社会的行動を創発した。
エピソード記憶の構造
各エピソードは以下の要素で構造化される。
| フィールド | 型 | 説明 | 例 |
|---|---|---|---|
| timestamp | datetime | 発生時刻 | 2026-06-22T03:30:00Z |
| actor | string | 行動主体 | user / agent / system |
| action | string | 実行した行動 | "PostgreSQLクエリを実行" |
| observation | string | 結果の観察 | "13,902件のレコードを確認" |
| outcome | enum | 成功/失敗/部分成功 | success |
| importance | float | 重要度スコア(1-10) | 7.5 |
| embedding | vector | ベクトル表現(768-4096次元) | [0.023, -0.156, ...] |
| tags | string[] | 分類タグ | ["database", "glossary"] |
| reflection | string | 振り返りメモ | "バッチ挿入は5件単位が最適" |
Generative Agentsの記憶ストリーム
Park et al.の実装では、エピソード記憶を「Memory Stream」として管理する。
記憶の書き込みフロー
- 観察(Observation): エージェントが環境から情報を取得(例: 「Isabellaがカフェで絵を描いている」)
- 重要度評価: LLMが1〜10でスコアリング(「朝食を食べた」=2、「恋人との別れ」=9)
- タイムスタンプ付与: ゲーム内時刻と実時刻の両方を記録
- 埋め込み生成: text-embedding-ada-002(当時)で768次元ベクトル化
- ストリーム追加: 全観察を時系列順にメモリストリームへ追記
記憶の検索アルゴリズム
検索スコアは3要素の加重和で計算される:
- Recency(新しさ): 指数減衰関数 score_r = exp(-λ × Δt)、λ=0.995/時間
- Importance(重要度): 書き込み時のスコア正規化値 score_i ∈ [0,1]
- Relevance(関連性): クエリとのコサイン類似度 score_v ∈ [0,1]
- 統合スコア: α × score_r + β × score_i + γ × score_v(α=β=γ=1が基本)
主要実装フレームワーク
| フレームワーク | エピソード記憶の実装 | 振り返り機能 | ストレージ |
|---|---|---|---|
| Generative Agents | Memory Stream | Reflection Tree | インメモリ+JSON |
| Voyager (NVIDIA) | Skill Library | 自動カリキュラム | JSON+ChromaDB |
| Reflexion | Trial Memory | Self-Reflection | インメモリ |
| GITM | Goal-conditioned | Task Decomposition | SQLite |
| AgentGPT | Task History | 要約ベース | Weaviate |
Voyagerのスキル記憶
NVIDIA/Voyager(Wang et al., 2023)はMinecraftエージェントで、エピソード記憶を「スキルライブラリ」として実装した特徴的な例である。
- エージェントが新しいタスク(例: 「鉄のツルハシを作る」)を達成するたびに、成功した行動シーケンスをJavaScriptコードとして保存
- 次回類似タスクでは、ベクトル検索で関連スキルを取得し、ゼロからの試行錯誤を省略
- 3,000以上のスキルを蓄積し、GPT-4単体と比較して3.3倍のアイテム取得率を達成
エピソード記憶の実装パターン
パターン1: Append-Only Log
全エピソードを時系列で追記。検索時はベクトル類似度+時間減衰でランキング。
パターン2: Summarization Chain
一定件数(例: 100件)蓄積ごとにLLMで要約を生成し、要約を新たなエピソードとして保存。原本は低優先度ストレージに退避。
パターン3: Graph-structured Episodes
エピソード間の因果関係・時系列関係をナレッジグラフで管理。Neo4j/NetworkXで実装。
エピソード記憶の評価指標
| 指標 | 説明 | 目標値 |
|---|---|---|
| Recall@K | 関連エピソードの検索再現率 | ≥0.85 (K=10) |
| Latency P95 | 検索応答時間95パーセンタイル | ≤200ms |
| Memory Utilization | 有効に参照された記憶の割合 | ≥30% |
| Staleness Rate | 陳腐化した記憶の割合 | ≤10% |
よくある質問(FAQ)
Q1: エピソード記憶と意味記憶の違いは何ですか? A: エピソード記憶は「いつ・どこで・何が起きたか」という具体的な経験の記録であり、意味記憶は「犬は哺乳類である」のような一般的知識の記憶である。LLMエージェントでは、エピソード記憶が対話ログや行動履歴、意味記憶がファインチューニングされた知識やRAGのドキュメントに対応する。
Q2: エピソード記憶はどのくらいの量を保持すべきですか? A: タスクの性質に依存するが、一般的には直近1,000〜10,000エピソードをアクティブストアに保持し、それ以前はアーカイブストア(要約済み)に退避させる。Generative Agentsの実験では1エージェントあたり約2,000エピソード/日が生成された。
Q3: 記憶の「忘却」は実装すべきですか? A: はい。人間の忘却曲線(Ebbinghaus)を模倣した時間減衰は、検索精度の向上とストレージコスト削減の両面で有効である。重要度スコアが低く、最終参照から30日以上経過したエピソードを自動アーカイブするのが一般的。
まとめ
- エピソード記憶はLLMエージェントの経験を時系列で構造化・保存する仕組み
- Generative AgentsのMemory Streamが代表的な実装アーキテクチャ
- 検索スコアはRecency・Importance・Relevanceの3要素で計算
- Voyagerのスキルライブラリのように、成功体験の再利用で効率を大幅向上
- 記憶の肥大化対策として要約・忘却・階層化が必須