如果只看表面,mem9 很像是在给 AI Agent 的 memory 加一层向量检索。

但我把 mem9 仓库当前实现的写入链路、召回链路和数据模型真正看下来以后,越来越确定一件事:它的变化并不是“从关键词搜索换成 embedding”这么简单,而是把记忆从本地文件升级成一套可抽取、可去重、可重塑、可共享的服务端系统。

一句话先说结论:

mem9 向量化之后,比原生记忆更强的地方,不只是“搜得到”,而是“搜出来的东西更像真正可复用的记忆”。

先说结论:mem9 到底比原生记忆强在哪

我觉得最重要的是下面五点:

  1. 它能按语义召回,不再过度依赖原文措辞是否刚好命中。
  2. 它不是直接把整段对话塞进记忆,而是先抽成更原子化的 fact
  3. 它会把新事实和旧记忆做 reconcile,决定新增、更新、删除还是忽略,避免记忆越用越乱。
  4. 它不是固定 top-k,而是会按问题类型、时间信息、记忆来源去调召回策略。
  5. 它把记忆做成共享基础设施,能跨会话、跨机器、跨 agent 使用,还能做治理和审计。

所以严格说,mem9 的优势不是“有向量数据库”,而是“向量化之后,整个记忆生命周期终于可以被认真管理了”。

原生 memory 的问题,不是不能用,而是很快会撞墙

我对原生 memory 的判断是:它本质上还是一种轻量、本地、偏记录式的机制。

以 OpenClaw 这类 agent 的 native memory 为例,常见做法大概是:

  1. 保留一个主 memory 文件。
  2. 再带上一段最近会话的 memory 文件。
  3. 按 chunk 或窗口把内容塞回 prompt。
  4. 需要时做一点关键词或混合搜索。

这样的设计表面上看能工作。你只是想让 agent 记住一点偏好、项目背景、最近两天的上下文,它大概率也能先跑起来。

但问题也会很快出现:

  1. 记忆更像日记,不像知识。很多内容只是被追加进去,没有被整理。
  2. 语义召回不稳定。用户换个说法,原本相关的记忆可能就找不回来。
  3. 重复和冲突会累积。旧事实没被淘汰,新事实又继续追加。
  4. 原始 session 噪声很大。工具输出、一次性讨论、无关上下文会稀释真正重要的信息。
  5. 记忆通常绑定在本地目录或单台机器上,换环境、换 agent、换团队成员就断了。

所以我的结论反而更激进一点:哪怕只是一个人、单机、轻量使用,原生 memory 也只是“能用”,远远谈不上“够用”。

mem9 的关键,不是给日记建向量索引,而是先把记忆变成可检索对象

我越看越觉得,mem9 真正重要的地方不是“做存储”,而是“对记忆做了抽象层”。

这个抽象层至少做了三件事。

1. 把 raw session 和 fact memory 分开

从代码看,mem9 不是只有一张“记忆表”。

它同时保留两种东西:

  1. sessions,也就是原始对话流。
  2. memories,也就是提炼后、可复用、可演化的记忆。

这点非常关键。

因为很多问题其实需要两种不同粒度的上下文:

  1. 你问的是偏精确、偏时间性的内容,原始 session 更重要。
  2. 你问的是长期偏好、稳定事实、项目背景,提炼后的 fact 更重要。

原生 memory 经常把这两类东西混在一起,于是系统既不够准,也不够干净。

2. 先抽事实,再决定写不写

mem9 在 ingest 时,不是收到一段对话就直接落一条 memory。

它更像这样一条流水线:

messages
  -> 去掉上次注入的记忆上下文
  -> 保存 raw session
  -> 用 LLM 抽取 facts 和 tags
  -> 和旧记忆做 reconcile
  -> 决定 ADD / UPDATE / DELETE / NOOP

这和原生 memory 的差别非常大。

原生 memory 更像“记下来再说”。

mem9 更像“先理解,再落库”。

这一步会直接带来两个结果:

  1. 写进去的是更短、更稳、更可复用的原子事实。
  2. 旧记忆不会无限叠加,而是有机会被更新、归档、替换。

3. 向量化的对象,不只是聊天原文

这也是我觉得 mem9 比原生 memory 更强的核心原因。

很多所谓“向量化记忆”,其实只是把整段聊天文本做 embedding,然后做一次相似度搜索。

mem9 不是这样。

它向量化的对象至少包括:

  1. 提炼后的 insight / fact
  2. 原始 session
  3. 带标签、时间语义、来源类型的候选结果。

也就是说,它不是把“日志”向量化,而是把“不同层级的记忆单元”向量化。

这样一来,召回出来的上下文天然就更适合给 agent 用。

为什么向量化之后,mem9 会比原生记忆明显更好

下面这几个点,是我觉得最值得写清楚的。

1. 从字面匹配,变成语义匹配

原生 memory 很容易受表达方式影响。

比如用户以前说的是:

“我写技术文章时,喜欢先讲结论,再展开。”

后来用户换一种问法:

“你帮我写博客时,行文风格应该偏什么结构?”

如果系统主要靠关键词拼接或局部文本命中,这条记忆不一定能稳定召回。

但当记忆先被提炼成 fact,再做 embedding,系统就更容易把“先讲结论”“行文结构”“写博客偏好”识别成同一个语义簇。

这就是第一层提升:不是搜得更快,而是搜得更准。

2. 从“整段都记”,变成“只记值得记的原子事实”

我越来越认同一点:fact 比日记式 memory 更容易去重,也更容易重塑。

这个判断非常重要。

原生 memory 往往会把一整段上下文存进去,于是你会得到:

  1. 冗长描述。
  2. 重复结论。
  3. 互相矛盾的旧信息。
  4. 很多只在当次会话有价值的噪声。

mem9 把这些内容拆成更原子的事实以后,向量检索的命中面会更干净,后续更新也更容易。

因为你更新的是某条事实,不是修改一篇越来越长的日记。

3. 从“越记越乱”,变成“旧记忆会被对账和演化”

这是我最看重的一点。

很多原生 memory 系统的根本问题,不在召回,而在写回。

你今天记一次“用户喜欢 A”,明天又记一次“用户现在改成喜欢 B”,系统如果只是追加,最后就会同时保留两条互相冲突的信息。

mem9 在写回前会做 reconcile

  1. 看这个新 fact 是不是全新信息。
  2. 看它是不是在更新旧事实。
  3. 看旧事实是不是应该删除或归档。

源码里甚至把智能更新做成了“归档旧版本,再创建新版本”的演化模式,而不是简单覆盖。

这意味着:

  1. 记忆能保持相对干净。
  2. 变化是可追溯的。
  3. 召回结果更不容易被历史垃圾污染。

原生 memory 最大的问题之一,就是没有这个环节。

4. 从“一个搜索框”,变成“多路召回 + 权重策略”

更进一步看召回层,权重策略其实正是 mem9 和原生 memory 拉开差距的地方。

mem9 并不是只做一次向量搜索,然后取 top-k。

它更接近这样一套策略:

  1. vectorfts / keyword 一起召回。
  2. 用 RRF 之类的融合方式合并结果。
  3. pinnedinsightsession 给不同先验权重。
  4. 对时间相关、枚举类、精确问法等不同 query shape 用不同偏好。
  5. 在必要时把最近 session、长期 fact、用户显式固定的记忆一起混排。

这件事的意义很大。

因为 agent 真正需要的,从来都不是“最相似的五段文本”,而是“最适合回答这次问题的上下文组合”。

原生 memory 往往停在第一层。

mem9 已经开始处理第二层。

5. 从“本地可用”,变成“多 agent 共享的记忆基础设施”

再往上看,多 agent 共享同一套事实层这件事也很关键。

这其实是很多人低估的价值。

原生 memory 更适合单用户、单 agent、本地工作流。它的默认假设是:

  1. 记忆属于当前目录。
  2. 记忆服务于当前 agent。
  3. 记忆更多是个人资产。

mem9 的方向完全不同:

  1. 记忆是服务端状态,不依赖某台机器。
  2. 不同 agent 可以共享同一个项目或租户下的事实层。
  3. 企业场景可以做统一治理、审查、审计和可视化管理。

这意味着它解决的就不再只是“我下次还能不能记住”,而是:

  1. 新 agent 能不能继承旧 agent 学到的东西。
  2. 团队里的多个 agent 能不能共享项目上下文。
  3. 企业能不能看见记忆是怎么被写入、更新、召回和治理的。

这一点,本地原生 memory 很难补。

这件事为什么对 Agent 特别重要

因为 Agent 的问题,不是“会不会检索”,而是“能不能在长时间运行里保持记忆质量”。

如果一个系统只有向量搜索,没有记忆重塑能力,它通常会遇到三个阶段:

  1. 前期很好用,因为记忆量少,什么都能搜到。
  2. 中期开始变乱,因为重复、冲突、噪声快速累积。
  3. 后期召回质量下降,因为真正重要的信息被大量低质量内容淹没。

mem9 想解决的就是这个衰减过程。

它用的办法不是单点优化,而是一整套组合拳:

  1. raw session 保留原始证据。
  2. fact 抽取压缩长期记忆。
  3. 向量化解决语义召回。
  4. 混合搜索提高命中稳定性。
  5. reconcile 控制记忆演化。
  6. 权重和 query shape 选择真正该注入的上下文。

所以我更愿意把 mem9 看成 memory runtime,而不是 memory plugin。

一个更直白的对比

如果把两者说得再简单一点,大概可以这样理解:

维度原生 memorymem9
记忆形态本地文件、追加式记录raw session + fact 双层结构
检索方式关键词、窗口、简单混搜向量检索 + FTS + 融合排序
写回方式记下来再说抽事实后 reconcile
记忆更新容易重复堆积可新增、归档、替换、忽略
适用范围短期能跑,长期连单人使用都容易失真跨会话、跨机器、多 agent、团队协作
治理能力很弱可审计、可共享、可视化、可管控

这张表里我最想强调的是第二行和第三行。

真正让 mem9 拉开差距的,不是“它用了向量”,而是“它把向量检索放进了一套更完整的记忆写入和召回系统里”。

我对 mem9 的判断

就算你只是一个人、本地跑一个 agent、任务也不复杂,我也不建议继续依赖原生 memory。

它也许能让你快速起步,但很快就会暴露出几个硬伤:语义召回不稳、重复信息越积越多、旧事实难清理、换环境就断、上下文质量会随使用时间持续下滑。

这时 mem9 的价值才会真正显出来:

  1. 它让记忆变得可抽象,而不是只有原文。
  2. 它让记忆变得可检索,而不是只能碰运气命中。
  3. 它让记忆变得可演化,而不是只会不断追加。
  4. 它让记忆变得可共享,而不是锁死在本地目录。
  5. 它让记忆变得可治理,而不是完全黑盒。

所以我的结论是:

mem9 向量化之后,比原生记忆更好的点,表面上看是召回更准,实质上看是它终于把“记忆”从一堆日志,变成了一套可以长期运转的系统。

这也是为什么我的建议很直接:如果你准备认真使用 AI Agent,哪怕现在只有一个人、一个项目,最好也直接安装 mem9,不要把原生 memory 当成长期方案。