createrole

约 7 分钟

agent 长期记忆框架调研:mem0、MemPalace、MemOS 怎么存、怎么忘、怎么召回

通读三个开源 agent 记忆框架的源码,比较它们在写入、冲突、遗忘、检索上的取舍。三家在时间锚定、词法通道、溯源上已经收敛,遗忘仍是最不成熟的环节。

  • 记忆
  • 调研
  • agent

2026 年 7 月,我们通读了三个开源 agent 记忆框架的源码:mem0、MemPalace、MemOS。结论以代码为准,README 和论文只作参考。三个项目恰好落在记忆设计光谱的三个位置。

总览

mem0MemPalaceMemOS
一句话LLM 单次抽取事实写入向量库,只增不改原文逐字存储加空间化索引,零 LLMLLM 抽取,图数据库组织,后台调度器
记忆本体自包含事实短文(15 到 80 词)800 字符原文块,不摘要不改写第三人称记忆条目加图上摘要父节点
写入 LLM 调用1 次0 次(LLM 全部可选)fine 模式一次写入可达十几次
冲突不解决,矛盾并存原文层不解决,时态知识图谱层 supersedeLLM 三分类加融合归档
遗忘无(衰减是付费平台功能)原文永不删,只衰减联想连接强度无衰减,分区容量满后 FIFO 淘汰
检索语义、BM25、实体加成三信号加和向量与 BM25 混排,壁橱只加分不门控图、向量、BM25、全文四路并发加 rerank

mem0:从「LLM 裁决更新」退回「只增不改」

网上流传的 mem0 设计是两次 LLM 调用:先抽取事实,再裁决 ADD/UPDATE/DELETE/NONE,外加 Neo4j 图记忆。这是旧版。2025 年末到 2026 年的 v2 到 v3 改版之后,当前开源版只做单次抽取、只增不改,图库支持整体移除。官方给出的数据是 LoCoMo 从 71.4 提到 91.6,延迟减半。他们用真实数据否定了自己最著名的设计。

写入管线只有一次 LLM 调用,智能集中在一个约 470 行的抽取 prompt 里。几条关键指令值得记下:

  • 记忆要上下文丰富而非原子化。坏例是「User has a dog」,好例是「User has a dog named Poppy and their morning walks are the highlight of their day」。
  • 状态变迁必须带前态,例如「从杏仁奶换成燕麦奶」。
  • 相对时间必须按观察日期换算成绝对日期。「上周去了巴黎」在六个月后没有意义。
  • 专有名词和数量严禁泛化。「aerial yoga」不许写成「yoga」。
  • 抽材料的内容,而不是「用户分享了材料」这个动作。
  • 穷尽检查:10 条以上消息应产出 5 到 15 条记忆,少于 3 条要重读。

写入前会把候选旧记忆的 UUID 映射成 0、1 这样的整数 ID 再喂给 LLM,防止幻觉。去重只有 MD5 精确哈希,且只覆盖检索窗口内的前 10 条。删掉图库后,mem0 用 spaCy 规则抽实体,维护实体到记忆的反向索引,算是一个没有类型化关系边的「穷人版图记忆」。

检索不调 LLM。语义分、BM25 分、实体加成三者相加,其中实体加成按链接数惩罚泛化实体:similarity × 0.5 × 1/(1+0.001(n-1)²)

遗忘方面开源版什么都没有:无 TTL、无衰减、无访问频次,只有一个按日期粒度的过期字段。decay、timestamp、summary 是付费平台专属。矛盾的新旧记忆并存,需要修正时只能手动调 update 或 delete。

MemPalace:原文永存,智能放在检索端

MemPalace 2026 年 4 月创建,三个半月拿到 57.5k stars,是当前最热的本地记忆项目。它走反抽取路线。最小存储单元是 800 字符的逐字原文块(100 字符重叠),代码注释写着「No summaries. Ever.」。

隐喻是记忆宫殿:翼楼对应一个人或项目,房间是主题分区,抽屉是原文块,壁橱是派生的指针索引,每行形如「主题|实体|日期:行号→抽屉 ID」,由纯正则生成。运行时还有四层注入栈:L0 身份文件约 100 token 永远加载,L1 十五条要点约 800 token,L2 按翼楼和房间拉取,L3 全量语义搜索。

写入不调 LLM:归一化、按段落边界切块、关键词计分路由、正则抽实体、正则生成壁橱指针。ID 是内容的 sha256,天然幂等;嵌入模型身份写入集合元数据,防止换模型污染向量空间。因为写入是确定性管道,换嵌入模型或改切块策略都能全量重建,这是抽取式路线做不到的。它的 LongMemEval R@5 达到 96.6%,纯本地零 LLM。

检索原则是「壁橱是排名信号,永远不是门控」:抽屉向量检索为地板,壁橱命中按名次加分,再用查询词在原文里 grep 挑最佳块并拼上前后邻居,最后 BM25 0.4 加向量 0.6 混合重排。

遗忘只作用于联想连接层。原文永不删,衰减的是连接强度:Hebbian 共访增强、Ebbinghaus 指数衰减、Cepeda 间隔效应,直接引用三篇心理学文献。冲突在时态知识图谱层处理:三元组带 valid_from 和 valid_to,可以 supersede 关旧开新。这层用本地 SQLite 实现,不依赖云端图数据库。

局限在启发式天花板:房间路由、壁橱正则、记忆标记几乎全是英文;L1 的 importance 字段从未被填充,「要点」实际退化为最近 15 条;连接层的衰减尚未反哺主检索排序。

MemOS:论文最宏大,代码最重

MemOS 自称「记忆操作系统」。论文里的三类记忆,实现程度差异很大:明文记忆完整实现,是全部工程重心;KV-cache 激活记忆只在本地 HF 推理下真正省算力,默认关闭;参数记忆是纯占位,dump 出来的是一个 Placeholder 字节串。论文里的 MemLifecycle、MemGovernance、MemVault 模块在代码中不存在,只出现在自我介绍的 prompt 文案里。

最值得借鉴的是 fast/fine 双速写入。fast 模式不调 LLM,整窗原文先落库保低延迟;之后由后台调度器补做精抽取,回收临时节点。fine 模式的抽取 prompt 与 mem0 思路接近:用户视角、相对时间转绝对日期、区分事件时间与消息时间、完整性优先于简洁性。

组织方式是图。后台线程对每个节点找 embedding 近邻,LLM 判定 contradictory/redundant/independent 三类,再由 LLM 融合出新节点,原节点归档。融合失败会直接删旧节点,这是有损的。

WorkingMemory 是它最独特的部分:图中一个容量 20 条的分区,由后台调度器根据意图识别主动换入换出。遗忘等于容量 FIFO:WorkingMemory 20、LongTerm 1500、User 480,超 80% 按时间淘汰。

代价是强 LLM 依赖。抽取、冲突检测、融合、聚类、意图识别、rerank 过滤全是 LLM,fine 模式一次写入或检索十几次调用,没有预算控制。部署也重,主推路径依赖 Neo4j 企业版或 PolarDB。

三条路线的本质分歧

写入期智能还是检索期智能。mem0 把智能压进写入期的一个巨型 prompt。MemPalace 把智能全部推到检索期,写入是可无限重放的确定性管道。MemOS 两头都上 LLM,上限最高,成本和脆弱性也最高。

冲突有三种答案。mem0 放弃,矛盾并存推给读端。MemPalace 分层,原文层保真,事实层显式失效。MemOS 用 LLM 仲裁,最完整但每次都花钱。

遗忘没有人真正做到。三家都没有基于重要性或置信度的语义遗忘。这是记忆系统中最不成熟的环节。

三家不约而同收敛的点:

  1. 相对时间必须在写入期锚定为绝对日期。
  2. 纯向量不够,都补了词法通道和实体信号。
  3. 整数 ID 映射防幻觉,解析失败兜底整段落库。
  4. 溯源指回原始证据。
  5. 图数据库在退潮。mem0 删了 Neo4j 支持,MemPalace 用 SQLite 做时态图,只有 MemOS 还重仓图库。

createrole 怎么用这些结论

createrole 数字员工的记忆不是聊天记录。每回合的材料先沉淀下来,凌晨统一固化成六类页面:教训、大事记、人物、认识、经验、自我。召回分层:每回合注入几条带日期的一行钩子,需要时展开整页,再往下翻日记。员工另外维护自己的记事文件,关于自我、关系、教训,每份不超过 1500 字,每回合全文注入;夜间复盘会重写关系和教训两份。遗忘是有意为之:大多数日常材料在固化时被跳过,不成页。

对照三家,我们的路线介于 mem0 的平铺事实与 MemOS 的图组织之间,而「对话是源头证据,派生物随删重派生」与 MemPalace 的原文层和事实层分离同构。可以直接搬的是 mem0 抽取 prompt 的时间锚定、反泛化、状态变迁带前态,以及泛化实体的降权公式;MemPalace 的确定性幂等写入是派生物重建的好参照。要避开的坑也清楚:只增不改必须配读端冲突消解;LLM 调用要有预算;容量 FIFO 不是遗忘;纯启发式在中文场景天花板极低。