记忆的内化:Metis 把 Agent 记忆从提示词搬进前向计算

做出外挂记忆操作系统 MemOS 的 MemTensor 团队,自己发布了外挂路线的'反面':Metis(arXiv:2607.26760),第一个把记忆做成原生能力的基础模型——记忆不再是数据库+检索+拼提示词,而是一块随对话演化的参数状态:写入靠前向计算,读取靠 memory attention,全程没有一次反向传播。本文沿论文的三轴对比(架构、优化、效率)拆它的设计,再用诚实的数字给它定位:原生记忆今天的处境,约等于 LRM 出现之前的推理。

看一眼你手头任何一个 Agent 的记忆系统:向量库、检索器、重排器、摘要器、提示词模板——每个零件都在模型外面。模型本身从头到尾不知道”记住”这件事发生过,它只是在每次前向计算时读到一段被别人拼进来的文本。过去两年,感知被内化成了多模态模型,推理被内化成了大推理模型(LRM),为什么记忆还挂在外面?

MemTensor 在 7 月底发布的论文《Metis: Memory Foundation Model》(arXiv:2607.26760,42 页,17 位作者,含新加坡国立的 Tat-Seng Chua)正面回答了这个问题。他们提出了”记忆基础模型”(memory foundation model)这个新类别,并给出第一个原型 Metis:基于 Qwen3.5 骨干(4B/9B/27B 三档),代码模型权重已开源(CC BY-NC-SA 4.0)。

先看谁在说这话,这比说了什么更有信息量。MemTensor 正是外挂记忆路线的头部玩家:他们做的 MemOS(记忆操作系统,MemCube 抽象,2025 年开源)在外挂记忆基准上压过 Mem0、Zep 一众方案,更早还有 2024 年 WAIC 发布的分层记忆模型 Memory3。现在,把外挂记忆做到最好的团队自己站出来说:这条路线有结构性天花板,天花板不在工程,在架构。这是全文最值得认真对待的信号。

我的一句话读法:

Metis 的本质是一次表示之变——把记忆的表示从”上下文里的文本”换成”前向计算里的参数状态”。换掉表示后,外挂记忆的三个结构性缺陷(架构解耦、梯度阻断、串行开销)同时消失;代价是引入一个新的、目前还很痛的缺陷:把无限历史压进固定大小的矩阵,是有损压缩。

下面沿论文自己的三轴对比拆开,再看机制、训练和诚实的数字。

一张图的三个轴:外挂记忆的三个结构性天花板

论文第一张图(也是本文缘起那张截图的核心)把外挂记忆(External)和原生记忆(Native)沿三个轴对照:

外挂记忆Metis 原生记忆
架构解耦(Decoupling):记忆模块独立于模型,走”指令 → 信息”的旁路耦合(Coupling):记忆直接长在 Transformer 骨干里
优化梯度阻断(Blocked Gradient):检索/重排/摘要是离散操作,学习信号传不过去端到端梯度(End-to-End Gradient):记忆参数可以直接用梯度训练
效率串行(Sequential):先检索、再拼接、再 prefill,历史越长税越重并行(Parallel):记忆读写与自注意力并行,开销由固定的记忆态大小决定

三个轴的分量不同。架构轴是现象,效率轴是工程收益,优化轴才是根本约束,值得单独展开。

外挂记忆管线里的每一步——按相似度取 top-k、按规则重排、用另一个模型摘要、决定写不写库——都是不可微的离散操作。这意味着”记忆策略”本身无法从数据里学:你没法用端到端的训练信号告诉系统”上次就是因为检索错了片段才答错的”。于是所有外挂记忆系统的记忆策略只能靠人写规则、调提示词、拍阈值。AI 的历史对这种位置有过反复裁决:凡是”人写规则”卡在学习信号断点上的组件,最终都会被”让数据说话”的可微版本替代——手工特征之于 CNN、管线式 NLP 之于端到端模型,都是同一个故事。Metis 赌的是,记忆是下一个。

机制:记忆怎么”写进”前向计算

Metis 在 Transformer 层里插入 Metis block,每个 block 分两部分:

  • 局部记忆块(local memory):一个矩阵 M(l)Rdk×dv\mathbf{M}^{(l)} \in \mathbb{R}^{d_k \times d_v} 加一个归一化向量。这就是”记忆态”本体——随对话不断变化的动态参数,初始为零矩阵。
  • 超记忆块(hyper memory):重要性打分器和三个投影矩阵(W~K,W~V,W~Q\tilde{\mathbf{W}}_K, \tilde{\mathbf{W}}_V, \tilde{\mathbf{W}}_Q)。这些是训练时学好、推理时冻结的静态参数——它们编码的不是”记了什么”,而是”怎么记”。

写入(存储程序) 完全发生在前向计算里,分三步:先用重要性打分从当前交互的 LL 个 token 里挑出少数关键 token(top-ρ\rho 自适应聚合);再把这些 token 的隐状态投影成记忆键值;最后用 Gated DeltaNet 风格的更新规则写进记忆矩阵。论文给出的基础形式是指数平滑:

Mt+1=λMt+1λLtK~tdkV~t\mathbf{M}_{t+1} = \lambda \, \mathbf{M}_t + \frac{1-\lambda}{L'_t} \cdot \frac{\tilde{\mathbf{K}}_t^\top}{\sqrt{d_k}} \tilde{\mathbf{V}}_t

逐符号读:Mt\mathbf{M}_t 是第 tt 轮交互后的记忆矩阵;λ\lambda 是遗忘折扣(保留多少旧记忆);K~tV~t\tilde{\mathbf{K}}_t^\top \tilde{\mathbf{V}}_t 是把本轮挑出的键值对以外积形式叠加进矩阵——你可以把它理解成”往一块固定大小的黑板上再写一层字,旧字按比例变淡”。实验中把线性更新换成 Gated DeltaNet 的门控 delta 规则效果更好,Metis 最终采用后者(GDU)。

读取(利用程序) 是一个记忆注意力:当前 query 直接查询记忆矩阵,结果与原始自注意力按一个学习到的权重 γ[0,1]\gamma \in [0,1] 融合:

At=γSelfAttn+(1γ)Norm(Q~tMt)\mathbf{A}_t = \gamma \cdot \text{SelfAttn} + (1-\gamma) \cdot \text{Norm}(\tilde{\mathbf{Q}}_t \mathbf{M}_t)

论文证明这等价于在序列前面拼了一段”虚拟记忆前缀”——第 cc 轮交互的信息由此影响第 tt 轮的生成,但不占用任何上下文窗口。

这套机制不是凭空发明。它的谱系是 fast weight programming(Schmidhuber 上世纪 90 年代的”快权重”)→ 线性注意力 → DeltaNet/Gated DeltaNetTitans(测试时记忆)这条线。Metis 的差异化不在更新规则本身,而在两点:一是把这套机制作为记忆能力而非序列建模效率来定义和训练(下一节);二是最关键的一句话——整个记忆生命周期没有一次反向传播。训练阶段用梯度学会的是”怎么读写记忆”这个程序;推理阶段跑的只是这个程序的执行:权重全部冻结,记忆态在纯前向计算中演化。线上不需要梯度、不需要优化器状态,这是它和 Temp-LoRA 一类”测试时微调”路线的本质区别。

记忆是练出来的:四种操作 + 课程学习

外挂记忆是装上去的,原生记忆是练出来的——这是论文第二个值得带走的观念。光有上面的架构,模型并不会自动学会”记住”,Metis 为此构造了专门的记忆训练数据:

  • 主数据 357,137 条(约 4.06 亿 token),从 27 个公开基准合成,按四种记忆操作组织:remember(存了要能取)、update(新信息覆盖旧信息)、forget(被撤销的信息不能再冒出来)、reflect(多条事实做多跳组合)。每种操作再交叉显式/隐式指令(明说”记住这个” vs 藏在自然叙述里)和干净/带噪两个维度。
  • 辅助数据 609,443 条,专攻难场景:多实体绑定(一堆容易混淆的事实同时存取)、选择性遗忘(撤销一条、保留另一条)、记忆后闲聊(谈完记忆转到无关话题,防止记忆内容泄漏进不相干的回答)。

训练方式是 mid-training:骨干冻结,只训记忆参数,三个目标(记忆重建 → 记忆操作 → 抗干扰正则)按课程线性退火,先学”无损存取”的上界,再学指令驱动的状态变换,最后学抗污染。

这份数据配方本身就是论文对”记忆是什么”的操作性定义:记忆不是存储,是 remember/update/forget/reflect 四种状态变换。这个定义对做外挂记忆系统的人同样有用——你的向量库方案在后三种操作上的行为,多半没被认真测过。

诚实的数字:赢了谁,还输给谁

论文在 MemOps(Gold 设定)等基准上用 LLM-as-a-judge 打分。无上下文设定(历史信息只能靠记忆,不给原文)下的关键对照:

方案MemOps 均分
Qwen3.5-27B 裸模型(无记忆)1.69
δ-Mem4.38
Temp-LoRA-27B(测试时微调)9.70
Metis-27B(原生记忆)24.76
对照:RAG/部分上下文28.01
对照:完整上下文塞进窗口87.90

三个结论,缺一不可:

  1. 在”参数化记忆”赛道内是碾压。同样把历史压进参数,Metis 是 Temp-LoRA 的 2.5 倍、δ-Mem 的 5.6 倍,且线上不需要梯度。自建测试集上均分 73.77,reflect 类操作到 93.44——“怎么记”确实是可以练出来的。
  2. 刚刚追平检索外挂。24.76 对 28.01,原生记忆第一次做到与 RAG 同一档,这是”可行性证明”级别的结果。
  3. 离完整上下文还差 3.5 倍。87.90 对 24.76 的鸿沟直说了根本代价:把任意长的历史压进固定大小的矩阵是有损压缩。四种操作里 forget 最弱(10.91)——往稠密矩阵里”删掉”一条信息,比写入难得多,删除操作会在潜空间里和相邻语义混叠。论文限制一节坦承了这两点:长程任务性能随信息压缩衰减,且存在语义混淆。

所以对”这数字也配叫突破?“的怀疑,我的回应是给它换个参照系:原生记忆今天的位置,约等于 o1 出现之前的推理。当年外挂推理(CoT 提示词)人人在用、效果尚可,内化推理(RL 练出来的思考)刚露头时在多数榜单上也不好看——直到数据配方和规模到位。作者自己的定位也克制:Metis 是”潜在路径”而非替代品,原生+外挂的混合记忆才是近期现实。灰度判断:高保真、可审计、需要精确删除的记忆(合规、用户数据)继续留在外挂;高频、模糊、跨轮次的工作记忆(偏好、任务状态、对话惯性)是原生记忆的地盘。

带走的模型:判断”下一个被内化的外挂”的三问

把 Metis 放回开头那条主线——Agent 能力的演化史就是一部外挂被内化的历史。从它身上可以提炼一个可复用的判断框架。一个挂在模型外面的能力,会不会被内化进基础模型?问三个问题:

  1. 它是否出现在几乎每次交互的热路径上? 是——内化的摊销收益才够大。记忆显然是。
  2. 能否为它构造大规模训练数据? Metis 的回答是合成 96 万条记忆操作数据。造不出数据的能力(比如依赖私有实时状态的)内化不了。
  3. 现有外挂管线是否阻断了学习信号? 是——那外挂版本将永远停留在”人写规则”时代,内化是让它变得可学习的唯一出路。这是三问里最硬的一条。

用它回看:多模态三问全中,已内化;推理三问全中,已内化;记忆三问全中,正在进行时。而权限控制、审计、账单这类能力在第三问上是反的——它们恰恰需要确定性规则、需要梯度进不去——所以它们不该也不会被内化,这与《概率内核、确定性外壳》的结论互为印证:往内核里搬的是需要学习的能力,留在外壳上的是需要保证的约束。

记忆正在从工程问题变成学习问题。做 Agent 记忆系统的人不必今天就换架构,但值得把 Metis 的四操作定义(remember/update/forget/reflect)拿来审一遍自己的外挂方案——尤其是 forget。

参考来源

论文与代码

机制谱系