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 |
| ベクトル DB | Qdrant, Milvus, Weaviate, LanceDB, FAISS | 数百万エントリまで単ノードで |
| タグ・分類 | LLM zero-shot / embedding + k-means / HDBSCAN | LLM の方が精度高い、cost 高い |
| 関連付け | cosine 類似度 top-k + BM25 混合 (hybrid search) | 純ベクトルは連想でなく近傍 |
| 忘却 | score * exp(-t/τ) * importance | τ, importance の設計が難題 |
| 背景処理 | cron で LLM 呼び出し、consolidation | 常時 = 月 $10-100/user レンジ |
詳細
できる部分
- 要約: LLM (Claude, GPT, ローカル 8B 級) に投げるだけ。会話 1 turn ~500 token を 50 token に圧縮できる。RAG プロトコルの前段として定番
- 1024 次元ベクトル化: BGE-M3、Cohere embed-v3、text-embedding-3 (Matryoshka で 任意次元に切詰め)。CPU で数ミリ秒/文、GPU で <100μs
- ベクトル DB: 数百万エントリまで単ノード Qdrant/Milvus。cosine 類似度検索 <10ms
- タグ付け・分類: LLM zero-shot (
このメモに合うタグ 3 つプロンプト) or embedding をクラスタリング (HDBSCAN で階層クラスタ) - 忘却曲線: 検索スコアに時間減衰と重要度を乗せるだけ:
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.ai | RAG 型の永続キャラ記憶 | ユーザ毎の記憶は薄い |
研究段階のアイデア
- sleep-time compute (Anthropic 構想): 使わない時間に model 自身が推論を進める
- Memformer / RMT: attention に memory token を織り込む (transformer 内蔵メモリ)
- Cognitive Architectures (ACT-R, SOAR): 記号 AI 時代からの「常時稼働する認知」 復権兆し。symbolic reasoning + LLM のハイブリッド
個人の見立て
技術的にはできる (どのパーツも既製品ある)。エンジニアリングとしては品質・コスト・ 評価が難しい。真にやるなら:
- 知識グラフ + embedding のハイブリッド (関連付けの質)
- 反復 LLM 推論 で consolidation・要約統合
- 選択的 forgetting (アクセス頻度と重要度で τ を動的)
- 定期的な raw log 参照 (要約ドリフト対策)
の 4 段構え。ただし「本物の連想」が本当に有用な洞察を生むかは実証データが乏しく、 プロダクト成功例はまだない。作る本人が楽しい題材、というのが正直な感想。
関連
- [[claude-context-injection]] — Claude Code の memory 挙動
- [[llm-wiki-pattern]] — 知識ベースを LLM に注入する類似発想
最終更新: