← 返回文章列表

Agent 的记忆应该有多自治?从 MemoryBear、MindMemOS 到 Agent Foundation

固定审查 MemoryBear 与 MindMemOS 的当前源码,复盘 Agent Foundation 已经内化的自治记忆策略、实现理由,以及重新划定的权威边界。

我在设计 Agent Foundation 时反复遇到一个看似简单、实际很容易说混的问题:Agent 的记忆究竟应该有多自治?

如果系统只能被动保存用户手工指定的内容,它很难形成长期价值;如果模型可以自己抽取、合并、改写甚至删除记忆,它又可能把一次推断直接升级成产品事实。两种极端都不理想。

为了把问题说清楚,我重新固定审查了两个开源参考项目:

  • MemoryBear,固定到 main@6f469908ce8222d6abdc569e6fb3b2b3e97af37a
  • MindMemOS,固定到 main@186db4a75122b1d8691933f280bec10191c82c28

这次调研基于源码与机制分析,没有进行统一数据集上的运行对比。核心问题是:哪些自治机制进入了 Agent Foundation,解决了什么问题,它们在产品中拥有怎样的权限?

这里的“内化”不是把参考项目换个名字,也不是只写一层校验。Foundation 已经实现了 bounded implicit Dreaming、混合召回与激活生命周期、可恢复的容量压缩、实体消歧与规范化、受限 Graph formation、反馈重排、Schema 双路径检索与受限演进等机制。它们保留了参考项目解决问题的核心,但使用 Foundation 自己的 Registration、Evidence、Policy、ReviewDecision 和 receipt 语义重新落地。

查看 Agent Foundation 项目总览 · 打开本文交互图

先拆开“自治”这个词

“系统会自动记忆”至少包含四种不同能力:

  1. 候选发现:从对话、文档、工具结果或任务反馈中发现值得保留的内容。
  2. 结构形成:把原始内容转成摘要、实体、关系、episode、vector 或 skill candidate。
  3. 自治维护:根据访问、时间、反馈和相似度做去重、合并、归档、强化或重组。
  4. 权威写入:让上述结果成为产品此后可以依赖的当前事实,并影响用户可见结果或后续动作。

前三项主要回答“怎样让记忆更有用”,第四项回答“谁有权让它生效”。我后来发现,很多争论不是在讨论同一件事:有人说的自治是自动摘要,有人说的自治却已经包含改写业务事实。

MemoryBear、MindMemOS 与 Agent Foundation 的记忆自治边界

技术解释图:三条路径都允许系统主动发现和组织记忆;差异集中在持久化权威如何形成。图中参考项目部分来自固定源码审查,不代表端到端运行验证。

MemoryBear:把“遗忘”做成长期维护,而不是简单删除

MemoryBear 给我的第一点启发,是不要把长期记忆理解成“把聊天记录放进向量库”。它的写入流水线会编排抽取、图节点与边构建、去重消歧、摘要和多模态处理,再把结果落到 Neo4j 等存储中。换句话说,它首先把记忆当作一个需要持续加工的结构,而不是原文的备份。

更值得研究的是遗忘机制。固定源码中的 forgetting engine 使用 ACT-R 风格的激活计算、访问历史与阈值筛选低激活节点;另一条策略会创建 MemorySummary,继承较高的激活值和重要性,保留原 Statement / Entity 标识,再迁移关系并处理原节点。

这里最有价值的不是“模拟人脑”这个表述,而是一个工程判断:

遗忘不一定等于立刻丢失;它可以是把低价值细节压缩成仍可追溯的概括。

这比按时间删除旧记录可靠得多。访问频率、重要性、相互关系和来源都可以进入维护决策,系统也能把存储预算用在更有价值的内容上。

但源码同样说明了它的边界:这些动作属于记忆运行时自己的 mutation pipeline。对一个以个人长期记忆为中心的系统,这可能是合理选择;对一个会影响教学评价、Graph 业务状态或人工审核结果的产品,仅有“模型认为应该合并”还不足以成为最终授权。

MindMemOS:自治不仅整理记忆,还会演进结构

MindMemOS 当前 main 已经不能再用“只有静态 schema”来描述。固定源码里存在完整的 schema-add pipeline:它会缓冲记录、切分 episode、通过 worker/drain 处理失败与重试,并形成 schema entity、vector 和 graph 写入计划。

它的 Dreaming pipeline 更进一步。系统可以聚类热点记忆,处理精确重复,调用关系检测和 action planning,再把 create、merge、archive、link 等动作组织成 mutation plan。Skill 也有从使用结果、失败轨迹和反馈中继续演进的路径。

这个设计揭示了第二个重要事实:

当记忆规模变大时,仅靠“写入时一次性抽取”不够;系统需要离线巩固、结构学习和持续维护。

它也给出了一个很现实的多存储边界。memory_db/writer.py 会协调 Qdrant 与 Neo4j;fast 模式并行写入,strong 模式按顺序执行,并通过 graph_pending 和 errors 表达未完全收敛。源码没有提供 PostgreSQL/Neo4j 式跨存储 ACID 的证明,我也不应把 strong 这个名字解释成分布式事务。

在所审查的默认 Dreaming 路径中,mutation plan 由运行时应用;该路径未提供与 Agent Foundation 对应的独立 proposal、业务 reviewer 和 executor 公共门禁。两者的权限划分不同:前者侧重记忆运行时的演进,后者将产品写入拆为提案、审核与执行。

不是只借鉴:我们已经实现了什么

回看这些工作,我认为最重要的不是功能数量,而是每一项实现都对应一个长期记忆系统会真实遇到的失效模式。

参考机制Foundation 已实现的版本为什么实现重新划定的边界
MemoryBear 的多信号召回与激活思路固定配置的 hybrid / corroboration-aware recall,把 lexical、dense、recency、访问和独立来源信号纳入有界排序单一向量相似度无法稳定表达“相关、当前、可信、常用”权重与容量由 Registration / policy 固定;不把一次点击直接解释为事实正确
MemoryBear 的遗忘、摘要融合与容量维护ACT-R-inspired activation、容量触发的 source-preserving compaction、可恢复 dormancy / restore长期记忆不能只增不减,但删除原始来源会破坏审计和恢复生成有 lineage 的 successor;来源保留为可恢复状态,不做物理删除
MemoryBear 的实体发现、别名合并与 Graph formationbounded entity-resolution、entity canonicalization、allowlisted relation formation 和有界关系召回别名和重复实体会把同一人的记忆切碎,关系若完全不形成又无法支持结构化召回先形成 typed plan;只允许同 Scope、Evidence-bound 的有限形状,不开放任意 Cypher,也不 DETACH DELETE
MindMemOS 的 Dreaming mutation planmindmemos-bounded-implicit-dreaming-v1:冻结 2–8 条活跃 Memory,支持 create、update、merge、archive、link 五类动作写入时一次抽取无法长期解决重复、过期、冲突和新关系,系统需要后台巩固三种模式:低风险自动、policy-gated、proposal-only;高风险动作需 owner decision,过期 window 零写入
MindMemOS 的 Dreaming Graph Link同 Scope、allowlist、source-bound 的 additive Memory / Entity link记忆巩固可能发现新的可解释关系,不能永远只停留在文本层Graph mutation 仍由权威端执行;禁止任意 endpoint、关系类型和跨 Scope link
MindMemOS 的 Schema 检索与演进Entity / property-bound 双路径检索,以及 additive optional-property Schema candidate → validate → publish → Registration replacement固定 Schema 会阻塞新领域,但运行时随意改 Schema 会破坏已有项目合同只接受受限的可选属性扩展;rename、delete、type narrowing 和自动激活均被拒绝
MindMemOS 的反馈驱动维护exact receipt-bound owner feedback、append-only event、signed-clamp reranking、archive / restore“有用 / 没用”反馈应影响后续召回,但不能变成无来源的隐式改写反馈必须绑定实际 Runtime receipt 和 Memory revision;分数贡献可解释,归档可恢复
MindMemEvolve 一类离线策略搜索immutable Schema candidate envelope 与独立验证门允许离线实验生成更优候选,同时避免实验结果直接污染在线权威candidate 默认零激活;只有独立验收和显式发布后才能进入 Registration

这张表也解释了为什么我们此前花了很大力气:目标从来不是“再做一个 Memory SDK”,而是让自治维护真正可用,同时避免它把模型判断、用户反馈、来源变化和产品写权限揉成一个不可审计的动作。

Dreaming 已经是 Foundation 的正式机制

这一点尤其需要澄清。Foundation 不是只从 MindMemOS 得到“以后可以做 Dreaming”的启发,而是已经实现了一条 Registration-bound 的 bounded implicit Dreaming 路径。

执行前,系统冻结当前活跃 Memory window、source revision、Evidence lineage、Planner identity、policy fingerprint 和动作预算;Planner 只能在这个窗口上输出最多八个 typed actions。服务端随后重新验证作用域、版本、来源保留和风险等级,再决定动作属于自动执行、owner decision 还是仅保留 proposal。执行过程逐项产生 receipt;Graph 暂不可用时以 graph_pending 暴露未收敛状态,而不是把部分成功伪装成完整成功。

这不是复制 MindMemOS 的完整运行拓扑。Foundation 没有把上游的调度器、Kafka、Qdrant、Neo4j 组合或模型 Planner 一并收入平台;它内化的是 Dreaming 的维护语义,并把触发、计划、授权、执行和恢复拆成可替换的职责。

MemoryBear 的策略也不只是写进了调研文档

MemoryBear 相关工作同样已经越过“想法”阶段:混合召回、可逆 dormancy、capacity compaction、entity-resolution、canonicalization、Graph formation 与 bounded relation recall 都有对应的 Foundation 合同或服务实现。

Foundation 采用了其中三个约束:访问与时效影响排序;容量维护保留来源;实体合并可追踪、可阻止、可恢复。它们分别用于处理陈旧召回、无限增长和身份碎片化;上游删除策略和完整认知模型不在这次采用范围内。

所有内化机制共享同一条权威底座

普通开发者不应该为每种输入手写一套存储协议。Foundation 允许 Agent 把当前 turn 的 typed Observation、精确 Evidence binding 和候选内容交给统一路由;但文本相同不代表来源、可见性和发布权威相同,因此每个真正生效的结果仍绑定 Evidence revision、subject、Registration、policy 和 target generation。

Evidence 失效时,系统先关闭不安全投影;replacement Evidence 到来后,再通过显式 revalidation 恢复。Dreaming、压缩、实体规范化和反馈重排都不能越过这条底座。历史不会因为模型重新整理了一次内容而被静默改写。

我重新划定了什么

真正的分歧发生在第四层:谁可以让候选成为产品事实。

Agent Foundation 把这条路径拆成了几件独立的事:

  • Agent 产生 typed Observation 或零写入 Proposal;
  • Evidence Authority 确认来源、revision 与 lineage;
  • Policy 判断候选是否具备 auto-apply 或必须 review 的资格;
  • ReviewDecision 记录实际 actor、represented owner、理由与冻结 action;
  • 独立 executor 消费 durable outbox,写入目标权威并产生 receipt;
  • Evidence 后续失效时,dependency fence 与 revalidator 关闭或恢复安全投影。

这种设计牺牲了一部分“模型一次调用就自动完成所有事情”的流畅感,但换来了可审计、可撤销、可恢复的边界。尤其在 Graph 变更中,submitter、reviewer 和 executor 不应共享一个模糊的超级凭据。

哪些部分我们刻意没有照搬

上游能力或做法Foundation 的处理原因
完整上游存储与调度拓扑不复制Foundation 提供治理与权威能力,不接管 adopter 的模型、调度器和全部基础设施
模型自由执行任意 Memory / Graph CRUD拆成 typed plan、policy、review 与 authority execution模型擅长提出结构候选,但不应天然拥有产品写权限
物理删除、破坏性 entity merge拒绝作为维护默认它会同时损失来源、审计和恢复能力;当前采用 archive、redirect、successor 和可恢复 dormancy
任意 Schema mutation只保留 additive optional-property 演进rename、delete、type narrowing 会让既有 Registration 与数据解释失效
把完整 MindMemEvolve 优化器放进在线 Runtime保留离线 candidate envelope,不自动激活评估循环和产品在线权威应分离,避免实验结果直接成为运行配置
把 Skill evolution 并入 Memory Core保持为独立能力边界Skill 的执行风险、评估方法和发布责任不同于用户 Memory
依靠内容相同推断来源相同明确拒绝内容 fingerprint 不能证明 subject、Scope、可见性或发布权威

为什么不是“所有写入都要人工审批”

把治理理解成“每条记忆都弹出审批框”同样是错误的。Foundation 的 personal-safe 路径允许完整、精确、owner-explicit、低风险的当前偏好在封闭本地环境中审计式 auto-apply;不确定计划、事实冲突、敏感内容和生产环境候选则进入 review。

也就是说,系统不是用人工审核替代自动化,而是按影响面分配自治:

  • 低风险、可逆、来源明确:可以自动执行并留 receipt;
  • 高影响或来源不确定:必须等待 owner/reviewer;
  • 证据已失效或权威无法确认:fail closed,不伪装成普通空结果;
  • 只是上下文、不会改变资格:允许 typed degraded,不阻塞主流程。

这比“自治 / 不自治”的二元开关更接近真实产品。

这次调研也纠正了我自己的旧判断

早期研究快照里,我曾把 MindMemOS 的 schema 学习看作主要停留在公开描述、尚缺完整持久化路径。当前固定源码已经出现 schema-add worker、drain、mutation plan 与 Dreaming apply,这个旧结论不再成立。

这也是为什么技术调研必须固定 commit,并把“当时的观察”与“当前事实”分开。否则,博客很容易把已经被上游实现改变的判断永久写成标签。

两个项目 README 中的性能数字来自各自的测试环境。硬件、数据与配置未统一,因此本次比较只讨论机制,不比较性能百分比。

最后的判断

我现在会把“记忆自治”定义成一句更具体的话:

Agent 可以主动发现、组织和维护候选;但自治的上限,应由结果是否可撤销、可审计、可恢复,以及它将影响谁来决定。

MemoryBear 让我看到长期记忆必须会衰减、融合和保留 provenance;MindMemOS 让我看到 schema、Dreaming 和反馈可以持续改变记忆结构;Agent Foundation 则已经把其中可复用的部分实现为受限能力,并放进统一的产品权威模型里。

这三者不是同一道题的三个分数。它们分别强调记忆结构、自治演进和产品治理。真正有价值的参考,不是复制最多的功能,而是看清每个机制解决了什么问题,再决定它在自己的系统里最多可以拥有多大的权力。

证据边界

  • MemoryBear 与 MindMemOS 结论来自上述固定 commit 的源码审查,证据等级为 code-confirmed;本文没有启动其完整服务、数据库和模型链路。
  • Agent Foundation 的 bounded Dreaming、MemoryBear-derived lifecycle / entity / Graph 机制,以及 proposal、review、executor、receipt 与 Evidence dependency 能力,依据正式源码与既有本地 installed-package / PostgreSQL / Neo4j 验收。各机制的执行覆盖不同,尚无统一的产品效果对照。
  • 召回准确率、成本、延迟和模型质量需要另行设计统一测试。
  • Agent Foundation 当前仍是 bounded developer preview,不是 production-ready 或公开发布的软件。
← 返回文章列表