关于记忆系统,多数讨论从「用什么存」开始:向量库、知识图谱、文件系统、还是关系库。横向看过几套系统之后,会发现这个起点偏了。
存储形态的差别在工程上很大,在能力上的差别却未必。真正拉开距离的是另一个问题:记忆什么时候被取出来,以及由谁来决定取哪一条。
一 五种定位
| 系统 | 定位 | Stars | 记忆类型 |
|---|---|---|---|
| MemOS 2.0 | 记忆操作系统 | 11.2K | 文本 / 图像 / 工具轨迹 / 人格,图结构 |
| OpenViking | 上下文数据库 | 35.7K | L0 抽象 / L1 概览 / L2 详情三层 |
| Hindsight | 学习型记忆 | 22.7K | 情景 / 语义 / 程序性 + 心智模型 |
| Second Me | 个人数字分身 | 15.7K | L0 / 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