Mem0とMem0gの論文を読んで試してみた
はじめに
大規模言語モデル(LLM)は、賢いけれど記憶がない。どんなに優れた応答をしても、コンテキストウィンドウを超えた瞬間に「さっきの話」を忘れてしまう。
ただし最近はMCPの流行などもあってコンテキスト長はあまり消費したくないムーブもあり、外部保持したメモリの研究が流行っているらしい。
2025年4月に発表された論文
Mem0: Memory Optimization for Long-term Conversational Agents を読んでみた。
LLMの記憶をどう設計すれば 「正確で、軽く、実運用に耐える」かを考え、評価している。
1. Mem0とは何か
Mem0は、エージェントの長期会話を「記憶」として扱う仕組み。
大きく4段階で動く:
-
Extraction(抽出)
会話ログから「長期的に価値のある事実」だけを抜き出す。
例:ユーザーの予定、嗜好、関係者の名前など。 -
Update(統合)
既存の記憶と照合し、重複・補足・矛盾を検出して更新。
新しい情報を足し、古いものを上書きする。 -
Storage(保存)
抽出した事実をベクトルDBなどに保存。
“メモリ”は自然言語テキストとして保持される。 -
Retrieval(検索)
質問に応じて、必要な記憶だけを取り出し、LLMに渡す。
つまり、すべての履歴を投げずに「思い出す」ことができる。
この設計により、Mem0はトークン消費とレイテンシを大幅に削減しつつ、
対話の一貫性を保つことに成功している。
図で表すとこんなかんじ。

2. Mem0g: 記憶を“構造化”する拡張版
Mem0gはMem0の発展形。
会話中の情報をグラフ構造で保存し、
エンティティ(人・場所・出来事)とその関係(住んでいる・働いている・訪れたなど)を
トリプレット (head, relation, tail) で抽出するのがポイントらしい。
Neo4jというデータベースを使っているらしいが私は使ったことがない, GraphRAGという言葉が登場して1年ちょっと経ったが, 実運用されている率ってどれぐらいなんだろうか.
例:
(Alice) -[lives_in]-> (San Francisco)
3. 評価:LOCOMOベンチマーク
研究チームは、LOCOMOという長期会話データセットを使って性能を検証した。
1つの会話が平均600ターン(約26,000トークン)にも及ぶ、
まさに“記憶力テスト”のようなデータセット。
質問タイプは4種類:
- 🧩 Single-hop:1つの発話に答えがある質問 (ex: Aliceの犬の名前は?)
- 🔗 Multi-hop:複数の発話をまたぐ質問 (ex: Aliceの犬を預かっているのは誰?)
- 🕰️ Temporal:時間順序を理解する質問 (ex: Aliceは引っ越す前と後でどこに住んでいた?)
- 🌍 Open-domain:文脈を越えた自由質問 (ex: Aliceは音楽が好きそう?)
4. 結果まとめ
| 質問タイプ | 勝者 | ポイント |
|---|---|---|
| Single-hop | Mem0 | 単一事実の検索で最高スコア。 |
| Multi-hop | Mem0 | 複数発話の統合推論で他を圧倒。 |
| Temporal | Mem0g | 時系列の理解で圧倒的に強い。 |
| Open-domain | Zep(僅差) | 外部知識を統合できる設計が有利。 |
Mem0はベンチマーク全体で安定した高スコアを示した。
しかも、レイテンシを大きく削減したとも書いてある.
5. なぜMem0が効くのか
- 自然言語ベースの記憶が柔軟で密度が高い
- **Conflict detection(矛盾検出)**で古い情報を自動更新
- 必要最小限の記憶 を保持 することでレイテンシの性能を改善
つまり、Mem0は「思い出すべきことだけを覚えておく」賢いメモリらしい.
Mem0でハイスコアを出したようなタスクだとMem0gは冗長すぎるようだ.
6. Mem0gが光る場面
グラフ構造は、すべてのタスクで有利とは限らない。
シンプルな質問ではオーバーヘッドが生じるが、
時間的・関係的文脈が絡む質問では強力。
特に「イベントの順序」や「人物の関係性」を追うタスクでは、
Mem0gが明確に上回った。
テストコードを作ってみた
Mem0はすでに公式のGitがある.
手早く試したいならこれが一番参考になりそうだ。
これを参考に私も簡単なテスト用スクリプトを作ってみた.
Mem0については動作は多少確認したが、Mem0gはいまいちまだよくわかっていない部分も多いので, 使う場合は要検証.
次はLOCOMOのデータセットを使って論文の結果を試してみたい.
Discussion