notes
Tools

永続 AI 記憶システムの設計

LLM に長期記憶を持たせる各要素 (要約・埋め込み・タグ・関連付け・忘却・背景処理) の実現可能性、既存実装、壁になる部分

要点#

「会話ごとに要約 → 1024 次元ベクトル化 → タグ付け・関連付け → 忘却曲線 → 背景で常時思考」 の各パーツは どれも既製品で組める。事業として難しいのは コスト・要約ドリフト・ 関連付けの質。ベクトル類似度は近傍取得の道具で、人間の連想の代替にはならない。

数字 / 実装スタック#

要素実装例特記
要約LLM prompt (500 → 50 token)反復で意味が薄くなる (100 回で 20% 残 程度)
埋め込みCohere embed-v3 1024d, BGE-M3 1024d, text-embedding-3-large 3072→1024 切詰めMatryoshka embedding で切詰め OK
ベクトル DBQdrant, Milvus, Weaviate, LanceDB, FAISS数百万エントリまで単ノードで
タグ・分類LLM zero-shot / embedding + k-means / HDBSCANLLM の方が精度高い、cost 高い
関連付けcosine 類似度 top-k + BM25 混合 (hybrid search)純ベクトルは連想でなく近傍
忘却score * exp(-t/τ) * importanceτ, importance の設計が難題
背景処理cron で LLM 呼び出し、consolidation常時 = 月 $10-100/user レンジ

詳細#

できる部分#

  1. 要約: LLM (Claude, GPT, ローカル 8B 級) に投げるだけ。会話 1 turn ~500 token を 50 token に圧縮できる。RAG プロトコルの前段として定番
  2. 1024 次元ベクトル化: BGE-M3、Cohere embed-v3、text-embedding-3 (Matryoshka で 任意次元に切詰め)。CPU で数ミリ秒/文、GPU で <100μs
  3. ベクトル DB: 数百万エントリまで単ノード Qdrant/Milvus。cosine 類似度検索 <10ms
  4. タグ付け・分類: LLM zero-shot (このメモに合うタグ 3 つ プロンプト) or embedding をクラスタリング (HDBSCAN で階層クラスタ)
  5. 忘却曲線: 検索スコアに時間減衰と重要度を乗せるだけ: retrieval_score = cosine * exp(-age/tau) * importance * (1 + log(recall_count))

難しい部分#

要約ドリフト: 「要約の要約の要約...」で意味が抜ける。元ログ参照が要る。 実装: 要約は圧縮版として保持し、必要なとき raw log を取り出す 2 層設計 (MemGPT が採用)。

関連付けの質: cosine 類似度は 近傍 であって 連想 ではない。

  • 「あの日のラーメン → 出張の記憶」= 因果的関連 (時系列 + 場所)
  • 「Ruckig → 加速度制御 → PID」= 概念階層関連
  • どちらもベクトル距離だけでは出せない
  • 対処: 知識グラフ (Neo4j, LangGraph) 併用。ノード=概念、エッジ=関係、それぞれに embedding を持たせる。PathRAG、GraphRAG (Microsoft) がこの方向

忘却の設計問題: 「何を忘れるか」が難題。

  • 単純な時間減衰: 一度も使わない大事な事実も消える
  • 使用頻度で判断: 稀にしか要らないが決定的な事実 (誕生日、パスワード等) を保護
  • 人間の忘却曲線 (Ebbinghaus): 「思い出した回数」で強化される (spacing effect)
  • 実装案: 「アクセス時に τ を延ばす」= interval reinforcement

背景処理: 常時 LLM 呼び出しは

  • コスト: 1 user 月 $10-100 レンジ (chat の 10-100 倍)
  • 品質: 「昨夜寝ている間に思考が進んだ」の効果を測る方法がない
  • 実用性: consolidation (要約統合)、tagging、link 更新 に絞れば有用。「自由連想」は ノイズを生みやすい

既存実装 (部分実装)#

プロダクト何をやっているか何をやっていないか
ChatGPT Memory (2024〜)会話中に LLM が明示メモリを抽出、ユーザ可視背景処理なし、書き込み時 1 発
Anthropic Claude Memoryファイルベース、turn 終了時に更新埋め込み検索なし、明示ファイル
MemGPT / Letta階層メモリ (working + archival)、tool call で自主 R/W背景 consolidation は限定
Rewind / Recall.ai見聞き全部録画、embedding 索引、自然言語検索「思考」しない、検索のみ
Character.aiRAG 型の永続キャラ記憶ユーザ毎の記憶は薄い

研究段階のアイデア#

  • sleep-time compute (Anthropic 構想): 使わない時間に model 自身が推論を進める
  • Memformer / RMT: attention に memory token を織り込む (transformer 内蔵メモリ)
  • Cognitive Architectures (ACT-R, SOAR): 記号 AI 時代からの「常時稼働する認知」 復権兆し。symbolic reasoning + LLM のハイブリッド

個人の見立て#

技術的にはできる (どのパーツも既製品ある)。エンジニアリングとしては品質・コスト・ 評価が難しい。真にやるなら:

  1. 知識グラフ + embedding のハイブリッド (関連付けの質)
  2. 反復 LLM 推論 で consolidation・要約統合
  3. 選択的 forgetting (アクセス頻度と重要度で τ を動的)
  4. 定期的な raw log 参照 (要約ドリフト対策)

の 4 段構え。ただし「本物の連想」が本当に有用な洞察を生むかは実証データが乏しく、 プロダクト成功例はまだない。作る本人が楽しい題材、というのが正直な感想。

関連#

  • [[claude-context-injection]] — Claude Code の memory 挙動
  • [[llm-wiki-pattern]] — 知識ベースを LLM に注入する類似発想
最終更新:

On this page