mem9 原理解析:向量化之后,为什么比原生记忆更适合 AI Agent
如果只看表面,mem9 很像是在给 AI Agent 的 memory 加一层向量检索。
但我把 mem9 仓库当前实现的写入链路、召回链路和数据模型真正看下来以后,越来越确定一件事:它的变化并不是“从关键词搜索换成 embedding”这么简单,而是把记忆从本地文件升级成一套可抽取、可去重、可重塑、可共享的服务端系统。
一句话先说结论:
mem9 向量化之后,比原生记忆更强的地方,不只是“搜得到”,而是“搜出来的东西更像真正可复用的记忆”。
先说结论:mem9 到底比原生记忆强在哪
我觉得最重要的是下面五点:
- 它能按语义召回,不再过度依赖原文措辞是否刚好命中。
- 它不是直接把整段对话塞进记忆,而是先抽成更原子化的
fact。 - 它会把新事实和旧记忆做
reconcile,决定新增、更新、删除还是忽略,避免记忆越用越乱。 - 它不是固定 top-k,而是会按问题类型、时间信息、记忆来源去调召回策略。
- 它把记忆做成共享基础设施,能跨会话、跨机器、跨 agent 使用,还能做治理和审计。
所以严格说,mem9 的优势不是“有向量数据库”,而是“向量化之后,整个记忆生命周期终于可以被认真管理了”。
原生 memory 的问题,不是不能用,而是很快会撞墙
我对原生 memory 的判断是:它本质上还是一种轻量、本地、偏记录式的机制。
以 OpenClaw 这类 agent 的 native memory 为例,常见做法大概是:
- 保留一个主 memory 文件。
- 再带上一段最近会话的 memory 文件。
- 按 chunk 或窗口把内容塞回 prompt。
- 需要时做一点关键词或混合搜索。
这样的设计表面上看能工作。你只是想让 agent 记住一点偏好、项目背景、最近两天的上下文,它大概率也能先跑起来。
但问题也会很快出现:
- 记忆更像日记,不像知识。很多内容只是被追加进去,没有被整理。
- 语义召回不稳定。用户换个说法,原本相关的记忆可能就找不回来。
- 重复和冲突会累积。旧事实没被淘汰,新事实又继续追加。
- 原始 session 噪声很大。工具输出、一次性讨论、无关上下文会稀释真正重要的信息。
- 记忆通常绑定在本地目录或单台机器上,换环境、换 agent、换团队成员就断了。
所以我的结论反而更激进一点:哪怕只是一个人、单机、轻量使用,原生 memory 也只是“能用”,远远谈不上“够用”。
mem9 的关键,不是给日记建向量索引,而是先把记忆变成可检索对象
我越看越觉得,mem9 真正重要的地方不是“做存储”,而是“对记忆做了抽象层”。
这个抽象层至少做了三件事。
1. 把 raw session 和 fact memory 分开
从代码看,mem9 不是只有一张“记忆表”。
它同时保留两种东西:
sessions,也就是原始对话流。memories,也就是提炼后、可复用、可演化的记忆。
这点非常关键。
因为很多问题其实需要两种不同粒度的上下文:
- 你问的是偏精确、偏时间性的内容,原始 session 更重要。
- 你问的是长期偏好、稳定事实、项目背景,提炼后的 fact 更重要。
原生 memory 经常把这两类东西混在一起,于是系统既不够准,也不够干净。
2. 先抽事实,再决定写不写
mem9 在 ingest 时,不是收到一段对话就直接落一条 memory。
它更像这样一条流水线:
messages
-> 去掉上次注入的记忆上下文
-> 保存 raw session
-> 用 LLM 抽取 facts 和 tags
-> 和旧记忆做 reconcile
-> 决定 ADD / UPDATE / DELETE / NOOP
这和原生 memory 的差别非常大。
原生 memory 更像“记下来再说”。
mem9 更像“先理解,再落库”。
这一步会直接带来两个结果:
- 写进去的是更短、更稳、更可复用的原子事实。
- 旧记忆不会无限叠加,而是有机会被更新、归档、替换。
3. 向量化的对象,不只是聊天原文
这也是我觉得 mem9 比原生 memory 更强的核心原因。
很多所谓“向量化记忆”,其实只是把整段聊天文本做 embedding,然后做一次相似度搜索。
mem9 不是这样。
它向量化的对象至少包括:
- 提炼后的
insight/fact。 - 原始
session。 - 带标签、时间语义、来源类型的候选结果。
也就是说,它不是把“日志”向量化,而是把“不同层级的记忆单元”向量化。
这样一来,召回出来的上下文天然就更适合给 agent 用。
为什么向量化之后,mem9 会比原生记忆明显更好
下面这几个点,是我觉得最值得写清楚的。
1. 从字面匹配,变成语义匹配
原生 memory 很容易受表达方式影响。
比如用户以前说的是:
“我写技术文章时,喜欢先讲结论,再展开。”
后来用户换一种问法:
“你帮我写博客时,行文风格应该偏什么结构?”
如果系统主要靠关键词拼接或局部文本命中,这条记忆不一定能稳定召回。
但当记忆先被提炼成 fact,再做 embedding,系统就更容易把“先讲结论”“行文结构”“写博客偏好”识别成同一个语义簇。
这就是第一层提升:不是搜得更快,而是搜得更准。
2. 从“整段都记”,变成“只记值得记的原子事实”
我越来越认同一点:fact 比日记式 memory 更容易去重,也更容易重塑。
这个判断非常重要。
原生 memory 往往会把一整段上下文存进去,于是你会得到:
- 冗长描述。
- 重复结论。
- 互相矛盾的旧信息。
- 很多只在当次会话有价值的噪声。
mem9 把这些内容拆成更原子的事实以后,向量检索的命中面会更干净,后续更新也更容易。
因为你更新的是某条事实,不是修改一篇越来越长的日记。
3. 从“越记越乱”,变成“旧记忆会被对账和演化”
这是我最看重的一点。
很多原生 memory 系统的根本问题,不在召回,而在写回。
你今天记一次“用户喜欢 A”,明天又记一次“用户现在改成喜欢 B”,系统如果只是追加,最后就会同时保留两条互相冲突的信息。
mem9 在写回前会做 reconcile:
- 看这个新 fact 是不是全新信息。
- 看它是不是在更新旧事实。
- 看旧事实是不是应该删除或归档。
源码里甚至把智能更新做成了“归档旧版本,再创建新版本”的演化模式,而不是简单覆盖。
这意味着:
- 记忆能保持相对干净。
- 变化是可追溯的。
- 召回结果更不容易被历史垃圾污染。
原生 memory 最大的问题之一,就是没有这个环节。
4. 从“一个搜索框”,变成“多路召回 + 权重策略”
更进一步看召回层,权重策略其实正是 mem9 和原生 memory 拉开差距的地方。
mem9 并不是只做一次向量搜索,然后取 top-k。
它更接近这样一套策略:
vector和fts/ keyword 一起召回。- 用 RRF 之类的融合方式合并结果。
- 对
pinned、insight、session给不同先验权重。 - 对时间相关、枚举类、精确问法等不同 query shape 用不同偏好。
- 在必要时把最近 session、长期 fact、用户显式固定的记忆一起混排。
这件事的意义很大。
因为 agent 真正需要的,从来都不是“最相似的五段文本”,而是“最适合回答这次问题的上下文组合”。
原生 memory 往往停在第一层。
mem9 已经开始处理第二层。
5. 从“本地可用”,变成“多 agent 共享的记忆基础设施”
再往上看,多 agent 共享同一套事实层这件事也很关键。
这其实是很多人低估的价值。
原生 memory 更适合单用户、单 agent、本地工作流。它的默认假设是:
- 记忆属于当前目录。
- 记忆服务于当前 agent。
- 记忆更多是个人资产。
mem9 的方向完全不同:
- 记忆是服务端状态,不依赖某台机器。
- 不同 agent 可以共享同一个项目或租户下的事实层。
- 企业场景可以做统一治理、审查、审计和可视化管理。
这意味着它解决的就不再只是“我下次还能不能记住”,而是:
- 新 agent 能不能继承旧 agent 学到的东西。
- 团队里的多个 agent 能不能共享项目上下文。
- 企业能不能看见记忆是怎么被写入、更新、召回和治理的。
这一点,本地原生 memory 很难补。
这件事为什么对 Agent 特别重要
因为 Agent 的问题,不是“会不会检索”,而是“能不能在长时间运行里保持记忆质量”。
如果一个系统只有向量搜索,没有记忆重塑能力,它通常会遇到三个阶段:
- 前期很好用,因为记忆量少,什么都能搜到。
- 中期开始变乱,因为重复、冲突、噪声快速累积。
- 后期召回质量下降,因为真正重要的信息被大量低质量内容淹没。
mem9 想解决的就是这个衰减过程。
它用的办法不是单点优化,而是一整套组合拳:
- raw session 保留原始证据。
- fact 抽取压缩长期记忆。
- 向量化解决语义召回。
- 混合搜索提高命中稳定性。
- reconcile 控制记忆演化。
- 权重和 query shape 选择真正该注入的上下文。
所以我更愿意把 mem9 看成 memory runtime,而不是 memory plugin。
一个更直白的对比
如果把两者说得再简单一点,大概可以这样理解:
| 维度 | 原生 memory | mem9 |
|---|---|---|
| 记忆形态 | 本地文件、追加式记录 | raw session + fact 双层结构 |
| 检索方式 | 关键词、窗口、简单混搜 | 向量检索 + FTS + 融合排序 |
| 写回方式 | 记下来再说 | 抽事实后 reconcile |
| 记忆更新 | 容易重复堆积 | 可新增、归档、替换、忽略 |
| 适用范围 | 短期能跑,长期连单人使用都容易失真 | 跨会话、跨机器、多 agent、团队协作 |
| 治理能力 | 很弱 | 可审计、可共享、可视化、可管控 |
这张表里我最想强调的是第二行和第三行。
真正让 mem9 拉开差距的,不是“它用了向量”,而是“它把向量检索放进了一套更完整的记忆写入和召回系统里”。
我对 mem9 的判断
就算你只是一个人、本地跑一个 agent、任务也不复杂,我也不建议继续依赖原生 memory。
它也许能让你快速起步,但很快就会暴露出几个硬伤:语义召回不稳、重复信息越积越多、旧事实难清理、换环境就断、上下文质量会随使用时间持续下滑。
这时 mem9 的价值才会真正显出来:
- 它让记忆变得可抽象,而不是只有原文。
- 它让记忆变得可检索,而不是只能碰运气命中。
- 它让记忆变得可演化,而不是只会不断追加。
- 它让记忆变得可共享,而不是锁死在本地目录。
- 它让记忆变得可治理,而不是完全黑盒。
所以我的结论是:
mem9 向量化之后,比原生记忆更好的点,表面上看是召回更准,实质上看是它终于把“记忆”从一堆日志,变成了一套可以长期运转的系统。
这也是为什么我的建议很直接:如果你准备认真使用 AI Agent,哪怕现在只有一个人、一个项目,最好也直接安装 mem9,不要把原生 memory 当成长期方案。