分支③ 跨时间的记忆
这条分支补主干的哪块缺口: 原始模型「上下文窗口一满就忘」。分支②(RAG)解决「当下去外部知识里查」,而这条分支解决另一件事:让 agent 跨会话记住关于你和世界的事实,并随时间更新——决定写什么、何时更新、怎么取回。
1. 这条分支是什么(第一性原理)
注意它和 RAG 的区别:
- RAG(分支②) 检索的是相对静态的外部知识(文档、网页),是「去查资料」。
- 记忆(本分支) 维护的是关于这次交互/这个用户的、会增长会过时的事实,是「记住并更新」。
一句话:RAG 是图书馆,记忆是日记。 日记要解决三个 RAG 不管的问题:
- 写什么——一句对话里,哪条值得长期记?
- 何时更新——「我搬到上海了」要覆盖掉旧的「我在北京」,而不是两条都留。
- 怎么取回——下次见面,如何把相关记忆调进上下文。
分支里三个库,正是对「记忆放哪、谁来改」给了三种不同答案。
2. 分支内有哪几种做法(流派)
跨时间的记忆
│
┌────────────────┼────────────────────┐
▼ ▼ ▼
自编辑记忆 独立记忆服务 时序知识图
「agent 自己改」 「LLM 抽取+合并」 「双时间实体图」
letta (MemGPT) mem0 graphiti
- 自编辑记忆:把「常驻记忆」放进上下文,给 agent 一组工具,让它自己决定改写自己的记忆。
- 独立记忆 服务:把记忆抽成一个服务/层,由一个 LLM 负责从对话里抽取、增删改、检索。
- 时序知识图:把记忆建成带时间的实体关系图,区分「事件何时发生」与「何时被记录」。
3. 对比矩阵(子库区别,逐格接地)
| 库 | 记忆放哪 | 谁来决定写/改 | 取回方式 | 一句话差异 | 代码锚点 |
|---|---|---|---|---|---|
| letta (MemGPT) | 三层:core(在上下文)/ recall(历史)/ archival(向量库) | agent 自己用工具改常驻记忆 | 工具语义/文本搜 recall、向量搜 archival | 上下文当 RAM、数据库当磁盘,agent 像 OS 一样给自己分页 | docs/letta/01-memory-tiers.md1 |
| mem0 | 向量 + 图混合存储,按 user/agent/session 分域 | 一个抽取 LLM 做 add/update/delete 决策 | 按域检索相关记忆 | 把记忆做成可独立部署的「层/服务」,可挂循环里也可做后端 | (TODO: 待 mem0 子库 doc;mem0/ 核心、openmemory/ 服务) |
| graphiti | 时序知识图(Neo4j/FalkorDB) | 从 episode 抽实体/边,增量更新不重算 | 图 + 嵌入 + BM25 混合检索 | 唯一做双时间(valid-at 事件时间 vs ingested-at 写入时间)的记忆 | (TODO: 待 graphiti 子库 doc;graphiti_core/) |
4. 模式与权衡
- 谁掌方向盘? letta 让 agent 自己改记忆(放进工具循环,见分支①);mem0 让一个专门的抽取 LLM改;graphiti 用结构化抽取规则改。自主性越高越灵活,但也越不可控、越依赖模型质量。
- 在循环里 vs 在服务后面。 mem0、letta 的卡片都强调:要早定记忆是活在 agent 进程内还是躲在服务后——两种拓扑的持久化、延迟、一致性截然不同,事后改很贵。
- 时间是 graphiti 的杀手锏。 「我去年在 A 公司、今年在 B 公司」——只有区分事件时间与记录时间,才能正确回答「我现在在哪」和「我去年在哪」。引用 graphiti 时要精确说是这个双时间,而非泛泛「知识图记忆」。
- 图在这条分支和分支②交汇。 graphiti(记忆)和 hkuds-lightrag(RAG)都用图;区别在 graphiti 的图是带时间、会增量更新的「日记」,lightrag 的图是相对静态的「图书馆」。
5. 趋势
- 记忆从「框架内功能」独立成「专门层/服务」:mem0、graphiti(及其 MCP server)都把记忆做成可被任意 agent 运行时接入的独立组件。
- 「自编辑」成为一等设计:letta/MemGPT 证明,把记忆管理交给 agent 自己(而非外部批处理)是可行且强大的范式。
- 时序正确性受重视:随着 agent 关系变长(数周数月),「何时为真」比「是否为真」更关键,bi-temporal 建模上行。
6. 代表作 + 深入
- 要彻底搞懂一个有记忆的 agent 怎么运转 → 已写好的完整子库 doc
docs/letta/(四章:记忆分层、agent 循环、系统提示组装、压缩与内部机制)。这也是本货架目前唯一完成的子库 doc,强烈建议先读它建立直觉。 - 要一个可独立部署的记忆服务 → mem0。
- 要带时间维度的知识图记忆 → graphiti。