乐于分享
好东西不私藏

你的 AI 不是有记忆,它在概率推测

你的 AI 不是有记忆,它在概率推测

对概率性记忆检索的一次架构层批判 —— 以及为什么你的 AI 总是「记错」你说过的话

三个月前你跟模型有过一次正经对话。讨论一个真问题,分析过几条路径,最后做了一个决定。

今天你打开同一个对话,问它:「我当初为什么这么决定?」

回答流畅、结构清晰、几乎可以信服。它引用了你大概说过的话,串起来一段听起来像你的逻辑。

它也是错的。

不是完全错 —— 完全错反而容易识破。它贴近真相,但不是真相。它是一个足够聪明的系统,根据你说过的话的残余信号,猜测你「会怎么说」的产物。

它不是记忆。它是一段穿着记忆外壳的概率分布。

这是整个行业不愿意点破的失败模式。我们叫它「记忆」,因为营销需要这么叫。架构层面,它是别的东西,绝大多数搭这一层的人心里其实清楚。


向量搜索能很好地回答的,只有一个问题:哪些段落语义上接近这个查询?

这是一个有用的问题。但不是记忆要回答的问题。

记忆,对一个真在思考的人来说,必须同时回答四个问题,且任何一个上都不能含糊:

这个答案从哪儿来 —— provenance(出处)。 它什么时候形成的,当时我的整体思考状态是什么 —— temporal anchoring(时间锚定)。 它和我之前哪些笔记、哪些决策、哪些人有关系 —— structural connection(结构连接)。 这是我真写过的东西,还是模型在我写过的话之间插值出来的猜测 —— fact, not fabrication(事实,不是虚构)

向量搜索在这四个问题上全部失败。不是因为实现不够成熟,而是因为它的数学本质就不指向这些问题。

余弦相似度告诉你的,是 embedding 空间里两个区域接近。它不告诉你那个点是真被写下来过的、是谁写的、什么时候写的、回应什么写的。它做不到,因为这些信息从来没有被编码进 embedding 里。一个从未承载某种信号的向量,你不可能从它身上还原出那种信号。

这不是工程失败。这是范畴错误(category error)。


坐下来想想三个具体的失败场景。任何认真做过 RAG 系统的人,过去一周里都至少撞到过其中两个。

虚构出处(hallucinated provenance)。 用户问:「我上季度怎么评估那家公司的?」 系统召回三段语义沾边的文本,模型把它们缝合成一段流畅、有结构的回答。回答读起来像一份真的评估。但这份评估在 vault 里其实从未被写过。用户信任它,因为语言是用户自己的,文本来自用户自己的库。embedding 里没有任何信号告诉系统「这几段东西从来不曾在任何真实文档里同时出现」。这种信号在几何空间里不存在,得在别的地方追踪。

过期上下文渗漏(stale context bleeding)。 三个月前的一份草稿,和昨天敲定的那个最终决定,在向量空间里挨得很近。它们用同样的词汇,引用同样的约束。检索器把两段都召回。模型无从分辨 —— 哪段是真相,哪段是你明确否决过的路径。embedding 没有时间维度。记忆,按定义,就是一个时间维度。这个错配不是调参问题,是 substrate(底层基底)的问题。

不可追溯推理(untraceable inference)。 模型给出一个结论。你问:「你怎么得出这个的?」 它给一段听起来合理但是事后构造的解释 —— 是生成的,不是检索来的。原因是:被召回的文本片段一旦在 context window 里被拼接、被前向传播处理,归因关系就被消灭了。哪一句影响了哪个结论?哪段是真的笔记内容、哪段是模型自己临场改写出来的?前向传播过程不保留这些。provenance 在检索变成生成的那一刻被熵化了 —— 再也找不回来。

这些不是边缘 case。它们是向量驱动的记忆系统在 demo 阶段之外的典型工作状态


这一行所有认真做事的团队都在打补丁。混合检索。在相关性反馈上微调过的 reranker。元数据过滤。Graph RAG —— 但 graph 节点本身仍然以 embedding 编码,所以它继承了同样的脆弱性。时间衰减相似度评分。每一种都把失败率从「很常见」降到「不那么常见」。没有一种把它降到零,因为底下那一层 substrate 是同一个错误假设。

那个假设是这样的:记忆是一组高维点,可以通过语义相似度查询到

记忆不是这样的。记忆是一张事实图谱,每个事实都带有出处、时间、结构。语义是表层。图谱才是实质。向量检索把表层递给你,把实质悄悄扔进了垃圾桶。

更深一层的混淆,是整个行业在用同一个词 ——「检索(retrieval)」—— 指代两件根本不同的操作。一种是语义检索(给我一些这个 query 的段落)。另一种是证据检索(给我我自己写过的那些段落,按我写的时间顺序,带上把它们锚定在我生命里的元数据)。这两件事表面看起来像。它们要求完全不同的 substrate。装作一样的代价,就是我们今天看到的 —— 一脸真诚地虚构出处的「记忆」功能。

“You can’t fix amnesia with better guessing. You fix it by writing things down.”

失忆症不能靠更聪明的猜测来治。要治,就把它写下来。

这句话比计算机老。某种意义上比文字本身还老。整个人类有结构记忆的历史里,每一个认真的记录者都明白这件事 —— 会计、律师、医生、史学家、抄经的修士。法庭档案不靠 vibes 索引,是有原因的。


现在流行的一种反驳说,下一代模型会修好这一切。更大的 context window。更好的 retriever。更准的 grounding。今天的失败模式只是暂时的摩擦,迟早会被磨平。

这是个让人舒服的看法。它也是错的。

更大的 context window 不会给一个从未记录过 provenance 的系统注入 provenance。更聪明的 retriever 不会在没有时间轴的 substrate 里长出时间轴。一个对齐做得更好的模型,不会变得对它读过/没读过什么更诚实 —— 它只会更流畅地装作读过。模型变强的轨迹让症状更被发现,不是更容易。

我们不是在走向一个 vector-backed AI 记忆变可靠的世界。我们是在走向一个它变得不可证伪的世界。重构会更顺滑。虚构会更自信。底下的架构,一模一样


这就是我们做 Monolithos 的原因。

我们不是用更好的向量解决记忆问题。我们用了一个老到让人不好意思承认的技术 —— 文件系统

Markdown 承载真正被说出来的内容。YAML frontmatter 承载它什么时候被说、和什么相连。SQLite 提供亚毫秒级的结构化查询。Tantivy 提供全文召回。向量搜索回到它该待的位置 —— 表层的模糊查询,铺在一个知道字面真相的 substrate 之上。

下一篇会展开技术论证:为什么一个 1991 年的文件格式和一个 2000 年的内嵌数据库,组合得当之后,在记忆任务上唯一三个真重要的指标 —— 精度、主权、跨工具流动性 —— 上同时碾压每一个云端向量库。这一篇的论证更窄。


下一个十年的 AI 会迭代二十代模型。你昨天的向量索引,连一代都活不过。

“In search, an estimate is helpful. In memory, an estimate is a lie.”

搜索里,估算是帮助。记忆里,估算是谎言。

“Probabilistic retrieval is fine for search. It is malpractice for memory.”

概率检索做搜索没问题。做记忆,是渎职。


下一篇预告(5/2 上线):《Markdown、YAML 与 SQLite —— 为什么我们把 AI 记忆层建在 1970 年代的文件系统上》

英文原文同步上线 Silas Yu Substack