记忆不在存,而在取

2026 年开源 Agent 记忆系统横向观察

技术观察 2026-09 五套系统 · 逐项对照

摘要 本文横向观察五套开源 Agent 记忆系统:MemOS、OpenViking、Hindsight、Second Me 与 MetaMem。它们分别取「记忆操作系统」「上下文数据库」「学习型记忆」「个人数字分身」与「元记忆」五种定位,存储与检索策略各不相同。

横向看下来,分野不在「存了多少」,而在「取的时候由谁决定取什么」。五套系统里,四套把取回时机交给了模型或使用者;只有一套把「学到的经验能不能用得上」本身当作优化对象。这一分野,比存储后端的选择更能解释它们各自的形态。

关于记忆系统,多数讨论从「用什么存」开始:向量库、知识图谱、文件系统、还是关系库。横向看过几套系统之后,会发现这个起点偏了。

存储形态的差别在工程上很大,在能力上的差别却未必。真正拉开距离的是另一个问题:记忆什么时候被取出来,以及由谁来决定取哪一条。

一 五种定位

系统定位Stars记忆类型
MemOS 2.0记忆操作系统11.2K文本 / 图像 / 工具轨迹 / 人格,图结构
OpenViking上下文数据库35.7KL0 抽象 / L1 概览 / L2 详情三层
Hindsight学习型记忆22.7K情景 / 语义 / 程序性 + 心智模型
Second Me个人数字分身15.7KL0 / L1 / L2 蒸馏 + LoRA
MetaMem元记忆44自进化元记忆(符号化经验规则)

五种定位对应五种假设。MemOS 假设「记忆需要一个统一的操作系统」;OpenViking 假设「记忆应当像文件一样可浏览」;Hindsight 假设「记忆的价值在于学到,而不在于记住」;Second Me 假设「记忆的终点是一个可训练的身份」;MetaMem 假设「瓶颈不在存储,而在知识利用率」。

假设不同,形态就不同。这比争论「该用哪个存储后端」有意义得多。

二 存储的三条路线

五套系统的存储选择可以归为三条路线。

第一条是专用后端。MemOS 用 SQLite 加向量加图,Hindsight 用 PostgreSQL 加向量加知识图谱。这条路线能力强、可表达的关系复杂,代价是引入了需要运维的依赖。

第二条是文件系统隐喻。OpenViking 用一套虚拟文件系统加向量索引,检索方式是「目录递归」——先定位目录,再逐层钻取。它的三层结构(L0 抽象 / L1 概览 / L2 详情)把「粒度」显式做成了存储层级。这条路线的优势是可观测:检索轨迹本身可以被看见。

第三条是本地文件加权重。Second Me 把记忆蒸馏为 LoRA 权重。这条路线最激进——它不把记忆当作被检索的数据,而当作被训练进模型的倾向。代价是更新慢、可解释性弱。

三条路线没有优劣,只有与定位的匹配度。值得注意的是:三条路线都花了相当力气在分层上。L0/L1/L2 这个分级在不同系统里反复出现,说明「粒度」是记忆系统的共性难题,与存储形态无关。

三 取回时机的分野

真正拉开差距的是这一节。

系统检索机制取回由谁触发
MemOS混合检索(全文 + 向量)+ 反馈修正应用侧显式调用
OpenViking目录递归检索使用者浏览或调用
Hindsight图检索 + 巩固引擎保留 / 召回 / 反思三操作循环
Second Me层级建模 + 对齐训练期固化,推理期不检索
MetaMem部分正确性过滤 + 自反思迭代自反思驱动

四套系统的取回时机由调用方或模型决定。也就是说,「现在该不该想起这件事」这个问题,被留给了使用者。

这在多数场景下是合理的:应用知道自己在做什么。但它有一个结构性后果——如果没人记得去查,记忆就等于不存在。系统的能力上限被调用方的自觉程度封住了。

MetaMem 是唯一从另一个角度切入的:它不关心存了什么,只关心「学到的经验能不能用得上」。它把知识利用率本身当作优化对象,用自反思迭代来过滤。这个角度与「取回」相关但不等价——它问的是「已经取回来的东西,有没有被用对」。

四 巩固与蒸馏

五套系统都有巩固机制,形态差别很大。

MemOS 用自然语言反馈来修正、补充、替换记忆——把「改记忆」变成一次对话。OpenViking 在会话提交后异步提取偏好与经验。Hindsight 的保留 / 召回 / 反思三操作循环,把巩固做成了记忆的常规代谢。Second Me 做 L0 到 L1 到 L2 的层级蒸馏,终点是权重。MetaMem 用自反思加环境反馈,迭代蒸馏出可迁移的经验。

这些做法的共同点是:巩固不与写入同时发生。写下来的是原料,巩固发生在之后,且往往需要额外的判断。

这一点在实践中常被忽略。多数系统的写入路径很顺畅,巩固路径却没有触发条件——于是记忆只进不出,越积越厚,信噪比逐日下降。

五 可借鉴之处

横向看下来,有三处值得我们借鉴。

其一,把粒度做成层级。L0/L1/L2 的反复出现不是巧合。它把一个难题(一条记忆该切多大)转化为另一个更可解的问题(不同场景读不同层)。

其二,让检索轨迹可见。OpenViking 的目录递归有一个副作用:检索过程本身可被观察。相比一次向量查询返回一组分数,可浏览的轨迹更容易排查,也更容易让使用者建立信任。

其三,正视「没人去查」这件事。四套系统把取回时机交给调用方,这是合理的设计选择;但如果要突破这个上限,就得有人把「取回时机」本身当作设计对象。这正是 MetaMem 那一问的价值所在——只是它问得更远一层:取回来了,用上了吗?

最后需要说明本文的证据边界:上述对照基于各系统的公开文档与仓库自述,其中部分数字来自二次转述。本文不对任何一方的性能主张作独立验证。

写在后面的话

「学而不思则罔,思而不学则殆。」

看完这五套系统,最深的印象不是它们的差别,而是它们的相似——每一套都在分层,每一套都在巩固,每一套都在处理「粒度」这个共同的难题。

这也解释了为什么「用什么存」是个偏了的起点。存法决定容量上限与运维成本,却决定不了记忆会不会在该出现的时候出现。后者取决于另一个更朴素的问题:有没有人在合适的时候去取。

五套里四套把这个判断交给了调用方。这不是缺陷,是取舍。但知道这个取舍存在,比不知道要好——至少在设计自己的系统时,我们清楚地把这一步放进了预算。

dsh-auto-memory 项目组 · 2026

相关报告