Skip to content

Memory(長期記憶)

エージェントが獲得した事実・嗜好・過去の経験を、セッションやタスクをまたいで永続ストアに保存し、必要なときに関連するものだけを想起してコンテキストへ戻す。会話履歴という揮発的な短期文脈を超えて、長期にわたる一貫性と経験からの学習を可能にするパターンである。

別名

呼称出典
Long-term Memory一般的呼称 / LangGraph 等の長期記憶ストア
Memory StreamPark et al.「Generative Agents」
Sessions / Persistent MemoryOpenAI Agents SDK(SessionSQLiteSession

問題

コンテキストウィンドウは1タスク内の短期記憶にすぎず、セッションの終了とともに失われる。ユーザーの嗜好、過去に下した決定、やり取りの中で学んだ事実——これらを毎回ゼロから問い直すのは非効率で、セッションをまたいだ一貫性も保てない。

Context Compaction は短期文脈を畳んでウィンドウを守るが、畳んだ内容の恒久的な保存先は別に要る。「今の会話をどう収めるか」と「次の会話でどう思い出すか」は別の問題であり、後者を解くのが長期記憶である。

コンテキスト

適用する:

  • 複数セッションにまたがる対話(パーソナルアシスタント、継続的な顧客対応)
  • 過去の経験・失敗の教訓を次のタスクに活かすエージェント
  • ユーザー固有の事実・嗜好を蓄積してパーソナライズするシステム

適用しない(不要な)ケース:

  • 単発・ステートレスなタスク——記憶を持たない方が単純で安全
  • 記憶の保持がプライバシー・コンプライアンス上のリスクになる場合——保持範囲・期限・削除を設計できないなら、持たない選択をする

解決

外部の永続ストア(ベクタDB・KVストア・ドキュメントストア)を用意し、(1) 保存: やり取りの後に要点となる事実・経験を抽出し、重複を統合して永続化する、(2) 想起: 新しいタスクの冒頭で関連する記憶だけを意味検索して文脈へ注入する、(3) 更新・忘却: 陳腐化・矛盾・削除要求を管理する。

記憶は種類で扱いを分けると設計しやすい——エピソード記憶(過去の出来事)、意味記憶(事実・知識)、手続き記憶(やり方)。想起は関連度だけでなく、新しさ(recency)と重要度(importance)も加味すると実践的な精度が上がる。

python
def after_turn(interaction, store):
    facts = extract_salient(interaction)      # 会話から要点を抽出
    store.upsert(consolidate(facts))          # 重複を統合して永続化(無制限に貯めない)

def before_task(task, store, k=5):
    memories = store.retrieve(                 # 関連度+新しさ+重要度で想起
        task, limit=k, score=relevance_recency_importance,
    )
    return task.system + render(memories)      # 関連する記憶だけを文脈へ注入

実装の要点:

  • 保存と想起を分ける。 貯めた記憶を全部入れない。関連するものだけを想起して注入する(想起は Context Triage の一適用)
  • 統合と忘却を設計する。 無制限に貯めると矛盾・重複・陳腐化が品質を下げる。要約統合・有効期限・削除手段を最初から持つ
  • 想起は関連度だけに頼らない。 新しさと重要度を加味する。Generative Agents の retrieval(recency + importance + relevance)が実践的な基準になる
  • プライバシーを設計の前提にする。 保持範囲の最小化、アクセス制御、ユーザーによる削除手段を先に決める。「便利だから貯める」は責任を先送りするだけ

トレードオフ

  • ✅ セッションを超えた一貫性・パーソナライズと、過去の経験からの学習が可能になる
  • ✅ 毎回背景を問い直すコストが減り、短い文脈でも文脈を保てる
  • ⚠️ 記憶の陳腐化・矛盾・汚染(誤情報の固定化)を管理しないと、かえって品質が劣化する。統合・忘却の設計が要る
  • ⚠️ 永続的な個人データの保持は、プライバシーとコンプライアンスの責任を生む

クラウドパターンとの対応

クラウドパターン本パターンでの再定義
External Configuration Store「揮発的な計算資源の外へ、永続的な設定・状態を切り出す」から「揮発的なセッションの外へ、エージェントの事実・経験を切り出す」へ。状態の寿命をプロセスからエージェントの生涯へ延ばした
Cache-Aside「必要なデータを高速層へオンデマンドに読み書きする」から「関連する記憶をコンテキストへオンデマンドに想起し、新たな記憶を書き戻す」へ

関連パターン

  • Checkpoint & Resume — 1タスク内の実行状態を機械的に復元する(タスク内)。Memory はタスク・セッションをまたぐ知識を意味的に想起する(タスク間)。前者は「中断からの再開」、後者は「経験の蓄積」
  • Context Compaction — 短期文脈を畳むのが Compaction、畳んだ要点の恒久的な保存先が Memory
  • Context Triage — 記憶からの関連想起は Triage の一適用。Memory は「何を保存するか」に責任を持つ
  • Reflection — 失敗の教訓を言語化して Memory に蓄積すると、次のタスクで想起して活かせる(Reflexion 的な学習)

出典・参考

本文: CC BY 4.0 / コード片: MIT。GitHub で寄稿を受け付けています。