Mem0g用图谱拿到 68.4%,TiMem5 层时间树为什么走另一条路
我前阵子在跑一个长会话的 agent demo,连续 200 轮对话之后用户突然问:“我上次说的那个公司你还记得吗?”
Mem0 选择性 pipeline 检索回来的是用户两个月前提过一次的公司名,但用户中途已经换了工作。Agent 一本正经地用了过期信息回答,被用户当场拆穿。
这个 case 让我重新审视了 2026 年这波 AI agent 记忆方案——尤其是 Mem0 团队在 v1.0.0 推出的图增强变体 Mem0g 之后。
Mem0g 凭什么能在 LOCOMO 上拿 68.4%
Mem0g 的设计思路很直接:在 Mem0 原本的向量存储之外,额外搭一层有向、带标签的知识图谱。
具体运作链路是三件套:
- Entity extractor 从对话文本里抽出节点(用户、公司、产品、地点)
- Relations generator 推断节点之间的标签化边(works at、located in、prefers)
- Conflict detector 检测新信息和已有图谱节点/边的冲突
ECAI 2025 那篇 benchmark 论文(arXiv 2504.19413)里给出的数据很有说服力:在 LOCOMO 多跳推理子集上,Mem0 LLM Score 是 66.9%,加了图谱的 Mem0g 提到 68.4%,p95 latency 从 1.44s 涨到 2.59s。
- Conflict detector 检测新信息和已有图谱节点/边的冲突
1.5 个百分点的精度提升,换 1.8 倍的延迟开销——在多跳关系推理题目上,这笔账算得过来。
但我看完源码后有个疑问:conflict detector 真的稳吗
Mem0g 的图谱方案有一个隐性前提——conflict detector 必须能可靠识别"新信息和旧节点冲突"。
放到开头那个例子:用户两个月前说"我在 A 公司",今天说"我刚跳槽到 B"。一个理想的 conflict detector 会标记 (user, works_at, A) 和 (user, works_at, B) 冲突,然后做覆盖。
实际跑下来的问题:
- 冲突检测依赖 LLM 的语义判断,模型一旦没把"跳槽"识别成 works_at 关系的更新,老节点就不会被淘汰
- 图谱写入是离线 pipeline,下次召回时如果两个节点都还在,单跳查询可能返回任意一个
- 对时间序的处理是"事后打补丁"——每个节点上要额外挂时间戳,召回时再做时间过滤
这些细节在 paper 里被一句"conflict detector flagging contradictions"轻轻带过了。
- 对时间序的处理是"事后打补丁"——每个节点上要额外挂时间戳,召回时再做时间过滤
TiMem 用的是另一套设计
TiMem(github.com/TiMEM-AI/timem)不走"向量 + 图谱"的双结构路线,走的是 5 层 Temporal Memory Tree (TMT)。
5 层从下往上是:
- Fragment——原始对话片段,保留完整上下文
- Evidence——从片段里提炼的事实证据,带时间戳
- Fact——聚合多条证据后形成的稳定事实
- Trait——用户的偏好、习惯、风格特征
- Persona——稳定人设画像
每一层都有显式的时间序,上层 consolidation 时会自动用更新的下层覆盖陈旧的下层。
- Persona——稳定人设画像
回到跳槽的例子,用 TiMem 跑:
- 第 1 轮:“我在 A 公司” → fragment + evidence (timestamp: t1)
- 第 200 轮:“我跳槽到 B 了” → fragment + evidence (timestamp: t2)
- consolidation 触发时,新 evidence 升级到 fact 层时用 t2 覆盖 t1
不需要专门跑 conflict detector,时间序本身就是 conflict 的解。
- consolidation 触发时,新 evidence 升级到 fact 层时用 t2 覆盖 t1
这套设计在更长程的 benchmark 上发力
LOCOMO 的对话长度还没那么夸张。真正考验长程一致性的是 LongMemEval-S——平均会话长度比 LOCOMO 长一倍以上,且专门测试"模型是否被早期错误信息误导"。
TiMem 在 LongMemEval-S 上是 SOTA。
为什么?因为这个 benchmark 的题目大量是"用户某个事实在中途变化了,agent 应该用新的还是旧的"——这正好是时间分层最擅长的领域。Mem0g 的图谱在这里需要 conflict detector 拼命兜底,TiMem 的 5 层结构相当于在系统层解决了同一个问题。
选型建议
不给一个谁吊打谁的结论,因为两套方案的最佳战场不一样。
选 Mem0g 的场景:
短到中等长度会话(< 50 轮)
- 多跳关系推理是主要任务(比如"用户的同事的项目用了什么技术栈")
- 团队已经在用向量数据库,不想引入新的存储模型
选 TiMem 的场景:
- 团队已经在用向量数据库,不想引入新的存储模型
长程会话(数百轮以上)
- 用户状态/偏好会持续变化
- 要 selective forgetting(记住,但用最新的)
- 不想为"实体提取 + 关系生成 + 冲突检测"三件套单独维护一条 pipeline
最近 ICLR 2026 接收的那篇 MemoryAgentBench(arXiv 2507.05257)把 agent 记忆的核心能力归为四类:accurate retrieval、test-time learning、long-range understanding、selective forgetting。前两类 Mem0g 不输甚至更强,后两类 TiMem 的结构性优势会更明显。
- 不想为"实体提取 + 关系生成 + 冲突检测"三件套单独维护一条 pipeline
如果你正在选型,与其纠结"哪个框架更强",不如先看自己的场景落在哪个能力维度上。
那个让我重新审视方案的 demo 后来用 TiMem 重跑了一次。同样 200 轮对话,用户问"我上次说的那个公司",agent 用的是最新的 B 公司——没用 conflict detector,没写额外的过滤逻辑,时间序自己解决了问题。
这是我决定换路线的真正原因。
