文章目录
- 前言
- 零、论文基本信息
- 一、背景与问题
-
- [1. Agent 记忆系统的三个阶段](#1. Agent 记忆系统的三个阶段)
-
- [1.1 记忆蒸馏](#1.1 记忆蒸馏)
- [1.2 记忆管理](#1.2 记忆管理)
- [1.3 记忆检索](#1.3 记忆检索)
- [2. 现有方法在什么时候判断记忆价值](#2. 现有方法在什么时候判断记忆价值)
- 二、相关工作与理论动机
-
- [1. 从启发式记忆到数据驱动记忆](#1. 从启发式记忆到数据驱动记忆)
- [2. Predictive Coding](#2. Predictive Coding)
- [3. Complementary Learning Systems](#3. Complementary Learning Systems)
- [4. 三个设计原则](#4. 三个设计原则)
-
- [4.1 保持事件完整性](#4.1 保持事件完整性)
- [4.2 将原始对话转换为叙事记忆](#4.2 将原始对话转换为叙事记忆)
- [4.3 可预测的信息通常是冗余信息](#4.3 可预测的信息通常是冗余信息)
- [三、Nemori 方法总览](#三、Nemori 方法总览)
- [四、模块一:Episodic Memory Integration](#四、模块一:Episodic Memory Integration)
- [五、模块二:Semantic Knowledge Distillation](#五、模块二:Semantic Knowledge Distillation)
- [六、Response Generation:Episodic 与 Semantic 并行检索](#六、Response Generation:Episodic 与 Semantic 并行检索)
- 七、实验设置
-
- [1. 数据集](#1. 数据集)
- [2. Baselines](#2. Baselines)
- [3. Metrics](#3. Metrics)
- [4. 超参数](#4. 超参数)
- [八、主实验:总体最强,但 Open Domain 是明确反例](#八、主实验:总体最强,但 Open Domain 是明确反例)
-
- [Table 2:LoCoMo 主结果](#Table 2:LoCoMo 主结果)
- [Open Domain 失败案例](#Open Domain 失败案例)
- [九、效率:Episode-centric pipeline 反而减少了调用](#九、效率:Episode-centric pipeline 反而减少了调用)
-
- [Table 3:Memory Construction Cost](#Table 3:Memory Construction Cost)
- [Table 4:Response Generation Cost](#Table 4:Response Generation Cost)
- [十、消融:prediction error 确实优于直接蒸馏](#十、消融:prediction error 确实优于直接蒸馏)
-
- [Table 5:核心消融](#Table 5:核心消融)
- [1. Prediction error vs direct distillation](#1. Prediction error vs direct distillation)
- [2. Native management 贡献很小](#2. Native management 贡献很小)
- [3. Episodic 与 Semantic 互补](#3. Episodic 与 Semantic 互补)
- [4. Adaptive partitioning 有贡献](#4. Adaptive partitioning 有贡献)
- 十一、超参数与表示分析
-
- [1. Observation Window 的影响](#1. Observation Window 的影响)
- [2. Top-K 的影响](#2. Top-K 的影响)
- [3. Narrative 与 Raw Episode 的选择](#3. Narrative 与 Raw Episode 的选择)
- 十二、第三方集成与长上下文扩展
-
- [Table 7:作为 A-MEM / MemoryOS 的入口层](#Table 7:作为 A-MEM / MemoryOS 的入口层)
- [Table 8:LongMemEvalS](#Table 8:LongMemEvalS)
- [十三、与 Agent Memory 系列方法比较](#十三、与 Agent Memory 系列方法比较)
-
- [Nemori vs HeLa-Mem](#Nemori vs HeLa-Mem)
- [Nemori vs A-MEM / MemoryOS](#Nemori vs A-MEM / MemoryOS)
- [Nemori vs CoM / ReMemR1](#Nemori vs CoM / ReMemR1)
- [Nemori vs Mem²Evolve](#Nemori vs Mem²Evolve)
- [十四、对 Coding Agent / Tool Agent / Multi-Agent 的启发](#十四、对 Coding Agent / Tool Agent / Multi-Agent 的启发)
-
- [1. Coding Agent:只保存超出现有 repo model 的变化](#1. Coding Agent:只保存超出现有 repo model 的变化)
- [2. Tool Agent:把异常 tool outcome 当成 memory signal](#2. Tool Agent:把异常 tool outcome 当成 memory signal)
- [3. Multi-Agent:保存协作预期被打破的地方](#3. Multi-Agent:保存协作预期被打破的地方)
- [4. 生产级改造](#4. 生产级改造)
- 十五、局限、反例与未解问题
-
- 论文明确承认
- 进一步分析
-
- [1. Prediction error 不等于 future utility](#1. Prediction error 不等于 future utility)
- [2. 预测者与裁判是同一个 LLM 家族](#2. 预测者与裁判是同一个 LLM 家族)
- [3. Cue leakage 与 cue quality](#3. Cue leakage 与 cue quality)
- [4. 形成时推理会固化错误](#4. 形成时推理会固化错误)
- [5. 单次运行与 LLM judge](#5. 单次运行与 LLM judge)
- [6. Open Domain 与 Knowledge Update 的不稳定](#6. Open Domain 与 Knowledge Update 的不稳定)
- [7. "Training-free"不等于低成本](#7. “Training-free”不等于低成本)
- [8. 缺少删除与隐私语义](#8. 缺少删除与隐私语义)
- 十六、我的理解与启发
-
- [1. Nemori 最重要的贡献是 memory 的"增量编码"视角](#1. Nemori 最重要的贡献是 memory 的“增量编码”视角)
- [2. Distillation 应该是相对的,而不是绝对的](#2. Distillation 应该是相对的,而不是绝对的)
- [3. 最值得借鉴的是"先预测再写入"协议](#3. 最值得借鉴的是“先预测再写入”协议)
- [4. Episodic 与 Semantic 不应互相替代](#4. Episodic 与 Semantic 不应互相替代)
- [5. Nemori 与 HeLa-Mem 可以形成更完整闭环](#5. Nemori 与 HeLa-Mem 可以形成更完整闭环)
- 十七、总结
- 参考资料
前言
随着 Agent 与用户持续交互,系统会不断接收新的对话、任务结果和环境反馈。
一个长期运行的 Agent 可能每天产生几百条消息。如果将所有内容完整保存,记忆库会迅速膨胀,检索时也会出现大量重复信息。
因此,记忆系统首先需要回答一个看似简单、实际上非常关键的问题:
一段新的交互发生后,哪些信息真正值得进入长期记忆?
早期的 Agent 记忆系统通常采用几种比较直接的判断方式:
- 为每条记忆计算重要性分数;
- 为带有明显情绪的信息添加标签;
- 根据事实、偏好、人物关系等固定模板抽取内容;
- 先保存所有内容,再根据访问频率或时间衰减进行清理。
这些方法实现简单,但它们存在一个共同问题:
什么值得记忆,通常由系统设计者提前规定,而不是由交互数据本身决定。
例如,用户连续几周都说:
text
我每周末都会跑步。
如果系统每次都将这句话重新写入记忆,记忆库中会积累大量重复内容。
但是,如果用户后来补充:
text
我的膝盖受伤了,医生建议未来三个月暂停跑步。
这条信息虽然只出现一次,却改变了系统对用户行为的原有认识。
传统的重要性评分很难稳定地区分这两种情况。Nemori 提出了一种不同的判断方式:
- 先根据系统已有的知识,预测这次交互中可能发生什么;
- 再比较预测内容与真实交互;
- 将预测不到的新增信息提取出来,作为值得保留的长期记忆。
其核心原则可以概括为:
text
能够被已有知识预测的内容
↓
大概率是重复信息
无法被已有知识预测的内容
↓
可能是值得记住的新经验
因此,Nemori 的关键并不是设计一种新的向量数据库、树结构或者知识图,而是重新定义记忆写入阶段的判断标准:
不再问"这条信息看起来重要吗",而是问"这段经历相对于我已经知道的内容,新增了什么?"
在 Agent Memory 系列中,Mem0 和 MemoryOS 更关注记忆的写入、更新和分层管理;A-MEM、MAGMA 和 HeLa-Mem 更关注记忆之间的关系;CoM 和 ReMemR1 更关注查询时如何组织或回看历史证据。
Nemori 研究的是这些步骤之前的问题:
在记忆刚刚形成时,什么内容应该被蒸馏出来,交给后续系统管理和检索?
零、论文基本信息
- 论文名称:What Deserves Memory: Adaptive Memory Distillation for LLM Agents
- 发表平台:ACL 2026 Long Paper,Proceedings of the 64th Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers),pp. 34789--34812
- 代码仓库 :https://github.com/nemori-ai/nemori
- 作者:Wenquan Ma, Jiayan Nan, Wenlong Wu
一、背景与问题
1. Agent 记忆系统的三个阶段
论文将一个完整的 Agent 记忆系统拆分为三个阶段。
1.1 记忆蒸馏
记忆蒸馏负责决定:
- 一段原始交互应该转换成什么形式;
- 哪些信息需要保留;
- 哪些重复内容可以舍弃;
- 是否需要生成事件、摘要、偏好或事实。
例如,一段十轮对话可以被保存为:
- 十条原始消息;
- 一个完整事件;
- 一段叙事摘要;
- 若干条结构化事实。
不同的入口形式会直接影响后面的管理和检索。
1.2 记忆管理
记忆管理负责处理已经进入系统的记忆,例如:
- 合并重复内容;
- 处理新旧事实冲突;
- 构建层级或者图关系;
- 根据时间和访问频率调整记忆;
- 删除过期信息。
1.3 记忆检索
当用户提出问题时,检索阶段负责从已有记忆中找到相关内容,并将其加入模型上下文。
完整流程可以表示为:
text
原始交互
↓
记忆蒸馏:决定保留什么、以什么形式保留
↓
记忆管理:合并、更新、组织和删除
↓
记忆检索:根据问题召回相关内容
↓
LLM 生成回答
这三个阶段中,蒸馏位于最前面。
如果有价值的信息在蒸馏时已经被删除,后面的知识图、层级管理和重排序都无法重新恢复它。
2. 现有方法在什么时候判断记忆价值
论文 Table 1 根据"系统在什么阶段判断记忆是否有用",对已有方法进行了分类。
| 判断阶段 | 代表方法 | 主要判断方式 | 可能的问题 |
|---|---|---|---|
| 检索阶段 | RAG、MemGPT | 到查询时再根据相似度或工具调用选择 | 记忆库容易持续膨胀 |
| 管理阶段 | MemoryOS、A-MEM | 访问频率、时间衰减、层级或关系更新 | 只能处理已经写入的内容 |
| 蒸馏阶段 | Generative Agents、Mem0 | 重要性、情绪、事实模板 | 依赖设计者预定义规则 |
| Nemori | Nemori | 根据预测误差提取新增信息 | 依赖预测和差异判断质量 |
表源:论文 Table 1。该表说明 Nemori 与 Mem0 等方法一样,在记忆进入系统时就进行筛选;区别在于 Nemori 使用预测误差,而不是固定的重要性或事实模板。
Nemori 并不是要替代后续的记忆管理和检索。
它解决的是一个更上游的问题:
先让进入记忆系统的内容更加干净,再交给 A-MEM、MemoryOS 或其他系统进行组织和使用。
二、相关工作与理论动机
1. 从启发式记忆到数据驱动记忆
现有蒸馏方法通常根据人工规则抽取记忆:
- Generative Agents 使用重要性评分;
- EmotionalRAG 添加情绪标签;
- Mem0 提取事实、偏好和关系;
- 其他方法使用主题、人物画像或固定摘要模板。
这些规则并非完全无效。问题在于,同一条信息对不同 Agent 的价值并不相同。
一个 Agent 已经知道的事实,再次出现时可能只是重复;另一个 Agent 从未见过同一事实,它就可能非常重要。
因此,记忆价值应该与系统当前已有的知识状态有关,而不是内容自身的固定属性。
2. Predictive Coding
Predictive Coding Theory 认为,高层系统会根据已有模型产生预测,底层主要向上传递与预测不一致的残差信息。
已经能够被系统解释的内容,不需要被反复完整保存;真正推动知识更新的,是预测与真实观察之间的差异。
Nemori 将这个直觉迁移到外部 Agent Memory:
Memory-worthy information ≈ Actual episode − Predicted episode \text{Memory-worthy information} \approx \text{Actual episode} - \text{Predicted episode} Memory-worthy information≈Actual episode−Predicted episode
这里需要注意,论文并不是对两个向量做数学减法。
Nemori 的实际做法是:
- 让 LLM 根据已有记忆生成一段自然语言预测;
- 再让 LLM 比较预测与真实经历;
- 提取真实经历中偏离或扩展预测的内容。
3. Complementary Learning Systems
论文还借鉴了 Complementary Learning Systems 的思想。
人类记忆可以粗略区分为:
- 情景记忆:保存具体发生过的经历;
- 语义记忆:从多个经历中形成稳定知识。
Nemori 因此没有使用一段摘要完全替代原始经历,而是同时维护:
- Episodic database:完整 narrative、cue、raw provenance;
- Semantic database:通过 prediction error 蒸馏出的可复用知识。
4. 三个设计原则
4.1 保持事件完整性
连续消息通常围绕若干完整事件展开。
如果简单地每 20 条消息或者每 4K Token 切分一次,可能会把同一个事件切成两半,也可能把两个无关话题放进同一个记忆块。
4.2 将原始对话转换为叙事记忆
原始对话通常包含省略、指代、重复和口语表达。
未来检索时,系统需要的是逻辑更加清晰、能够独立理解的事件描述。因此,Nemori 会把原始对话转换为叙事形式,同时保留原始消息作为证据。
4.3 可预测的信息通常是冗余信息
如果一段经历能够被已有记忆准确预测,它通常没有带来新的知识。
如果真实经历与预测不同,这个差异才可能值得进入长期语义记忆。
这三个先验分别回答:怎么分、怎么表示、怎么筛。
三、Nemori 方法总览
Nemori 包含两个连续执行的主要模块:
- Episodic Memory Integration:将原始交互整理为完整的情景记忆;
- Semantic Knowledge Distillation:根据预测误差提取值得长期保存的语义知识。
为了理解两个模块如何连接,可以先看论文 Figure 1。

图源:论文 Figure 1。上半部分负责将消息划分、叙事化并合并为情景记忆;下半部分先生成预测,再从预测误差中提取语义知识。右侧说明 Nemori 可以与自身管理模块、MemoryOS 或 A-MEM 组合。
整体流程如下:
text
Interaction sequence
↓
Local Message Partitioning
↓
Narrative Episode Generation
↓
Associative Memory Integration
↓
Episodic Database
↓ cue + existing knowledge
Anticipatory Schema Synthesis
↓ predicted episode
Prediction Error Distillation ← actual raw episode
↓ unexpected semantic insights
Agnostic Knowledge Consolidation
↓
Native / A-MEM / MemoryOS management
四、模块一:Episodic Memory Integration
1. Local Message Partitioning
动机
固定 chunk 可能把一个 episode 切成两半,也可能把不相关话题塞在一起。Nemori 先维护 message buffer:
B t = { m 1 , m 2 , ... , m z } , m i = ( r i , c i , τ i ) B_t=\{m_1,m_2,\dots,m_z\},\qquad m_i=(r_i,c_i,\tau_i) Bt={m1,m2,...,mz},mi=(ri,ci,τi)
其中 r i r_i ri 是 sender/role, c i c_i ci 是内容, τ i \tau_i τi 是时间戳。当 buffer 长度达到 observation window w w w 时触发 partition:
O ← f L L M ( P p a r ∥ B t ) O\leftarrow f_{\mathrm{LLM}}(P_{par}\Vert B_t) O←fLLM(Ppar∥Bt)
输出 O = { O 1 , ... , O n } O=\{O_1,\dots,O_n\} O={O1,...,On} 是消息索引集合的一个 partition:各组互不相交,合集覆盖当前窗口。映射回消息后得到 raw episodes:
P = { P 1 , ... , P n } \mathcal P=\{P_1,\dots,P_n\} P={P1,...,Pn}
随后清空 buffer,等待下一窗口。
例子
20 条消息可能同时包含旅行计划、Python 调试和工作安排。固定 20-message chunk 会把三件事混在一起;partition prompt 根据 topic change、intent transition、时间间隔和 concluding signal 分成三个 episode,甚至允许非连续索引归为同一主题。
风险
它仍由 LLM prompt 判断边界,不是真正无启发式。prompt 明确包含"topic relevance <30%""通常 2--15 messages"等设计者规则。因此论文所说 data-driven 更准确地适用于蒸馏选择信号,不意味着整个 pipeline 没有 heuristic。
2. Narrative Episode Generation
每个 raw episode P j P_j Pj 被转换成 narrative N j N_j Nj 和用于后续预测的 cue c j c_j cj:
( N j , c j ) ← f L L M ( P n a r ∥ P j ) (N_j,c_j)\leftarrow f_{\mathrm{LLM}}(P_{nar}\Vert P_j) (Nj,cj)←fLLM(Pnar∥Pj)
然后建立 embedding:
v j ← f e m b ( c j ∥ N j ) v_j\leftarrow f_{emb}(c_j\Vert N_j) vj←femb(cj∥Nj)
一个 episodic memory 表示为:
M j = ( c j , N j , P j , v j ) M_j=(c_j,N_j,P_j,v_j) Mj=(cj,Nj,Pj,vj)
- cue 是简短提示,用于让系统在不泄露真实 episode 的情况下预测;
- narrative 是便于检索和推理的结构化事件表征;
- raw episode 保留细节与 provenance;
- embedding 用于候选搜索。
论文的双模式 retrieval 很实用:普通情况返回 narrative 节省 token;精确性敏感场景可返回 raw。主实验中仅 top-2 episodic memories 额外附带 raw conversation。
3. Associative Memory Integration
仅在 observation window 内 partition 仍会把跨窗口的同一事件切开。为此,每个新 episode 先在 episodic database D e D_e De 中检索 top- K e K_e Ke 候选:
C = { U 1 , ... , U K e } ← Search ( D e , v j , K e ) C=\{U_1,\dots,U_{K_e}\}\leftarrow \operatorname{Search}(D_e,v_j,K_e) C={U1,...,UKe}←Search(De,vj,Ke)
再让 LLM 判断哪个候选具有 episodic continuity:
i d x ← f L L M ( P s e l ∥ ( c j , N j ) ∥ { ( c k , N k ) } k = 1 K e ) idx\leftarrow f_{\mathrm{LLM}} (P_{sel}\Vert(c_j,N_j)\Vert\{(c_k,N_k)\}_{k=1}^{K_e}) idx←fLLM(Psel∥(cj,Nj)∥{(ck,Nk)}k=1Ke)
- 若 i d x = k idx=k idx=k,将新旧 episode 合并、重写 narrative/cue,并拼接 raw provenance;
- 若 i d x = − 1 idx=-1 idx=−1,作为独立 episode 插入。
这一设计解释了为什么 observation window 从 5 到 40 改变时总体性能稳定:局部切错或切断的 episode,还有一次跨窗口 integration 机会。
五、模块二:Semantic Knowledge Distillation
这是全文唯一核心增量真正落地的地方。
1. Anticipatory Schema Synthesis
给定新形成或合并后的 episodic memory M i n M_{in} Min,系统先向任意下游 management system 请求相关旧知识:
S i n ← Evoke ( M i n , M ) S_{in}\leftarrow \operatorname{Evoke}(M_{in},\mathcal M) Sin←Evoke(Min,M)
native implementation 使用带阈值的相似度搜索:
S i n ← Top- K s ( S r ∈ D s ∣ sim ( v i n , u r ) > τ ) S_{in}\leftarrow \operatorname{Top-}K_s (S_r\in D_s\mid \operatorname{sim}(v_{in},u_r)>\tau) Sin←Top-Ks(Sr∈Ds∣sim(vin,ur)>τ)
关键防泄漏设计是:预测时只提供 incoming episode 的 cue c i n c_{in} cin,不提供真实 raw episode P i n P_{in} Pin。系统基于 cue 与旧知识合成 anticipatory schema:
P ^ i n ← f L L M ( P a n t ∥ c i n ∥ S i n ) \hat P_{in}\leftarrow f_{\mathrm{LLM}}(P_{ant}\Vert c_{in}\Vert S_{in}) P^in←fLLM(Pant∥cin∥Sin)
P ^ i n \hat P_{in} P^in 代表"根据我已经知道的内容,这次大概发生了什么"。
2. Prediction Error Distillation
随后才同时给出真实 episode 和预测,让 LLM 抽取偏差:
K i n = { k 1 , ... , k d } ← f L L M ( P d i s ∥ P i n ∥ P ^ i n ) K_{in}=\{k_1,\dots,k_d\} \leftarrow f_{\mathrm{LLM}}(P_{dis}\Vert P_{in}\Vert \hat P_{in}) Kin={k1,...,kd}←fLLM(Pdis∥Pin∥P^in)
K i n K_{in} Kin 只应包含真实 episode 对预测的 deviation 或 extension。
直观例子
旧知识已知"用户每周末跑步",新 episode 仍然说周末跑步,则预测吻合,不必重复存储。若新 episode 说"由于膝伤,医生要求未来三个月停止跑步",这部分强烈违背预测,应蒸馏为新的 semantic insight。
时间推理案例
LoCoMo 中 query 是 "When did Jon receive mentorship?" 原始对话只说 "yesterday"。Full Context 被相对时间干扰,回答了对话当天 6 月 16 日。Nemori 在 memory formation 时把 episode 与日期上下文整合,prediction error 中固化出 "Jon was mentored on June 15, 2023.",将回答时的复杂时间推理前置成简单事实检索。
这说明 Nemori 不只是压缩,而是 reasoning during memory formation。
3. 这是不是严格意义的 prediction error?
不是概率模型的负对数似然,也没有计算可校准的 surprise:
− log p ( P i n ∣ S i n ) -\log p(P_{in}\mid S_{in}) −logp(Pin∣Sin)
论文实现是两次 prompt:一次生成自然语言预测,一次让 LLM 比较差异。因此 prediction error 是语义操作而非标量统计量。它更灵活,但受 prompt、LLM hallucination 与表达差异影响;"说法不同"可能被误判为"知识新增"。
4. Agnostic Knowledge Consolidation
Distilled insight k q k_q kq 先嵌入并检索 top- K m K_m Km 相关旧知识:
S ~ q = { ( k h , u h ) } h = 1 K m ← Search ( D s , u q , K m ) \tilde S_q=\{(k_h,u_h)\}_{h=1}^{K_m} \leftarrow \operatorname{Search}(D_s,u_q,K_m) S~q={(kh,uh)}h=1Km←Search(Ds,uq,Km)
LLM 生成 consolidation directive:
( δ , i d x s , k μ ) ← f L L M ( P c o n ∥ k q ∥ { k h } h = 1 K m ) (\delta,idxs,k_\mu) \leftarrow f_{\mathrm{LLM}}(P_{con}\Vert k_q\Vert\{k_h\}_{h=1}^{K_m}) (δ,idxs,kμ)←fLLM(Pcon∥kq∥{kh}h=1Km)
其中 δ ∈ { n e w , m e r g e , c o n f l i c t } \delta\in\{new,merge,conflict\} δ∈{new,merge,conflict}:
- new:没有重叠,新增;
- merge:互补知识合并为统一 entry;
- conflict:新知识使旧知识失效,删除旧项后写入新项。
论文称其 management-agnostic,是因为 Evoke 和 Consolidate 是抽象接口;native database、naive RAG、A-MEM、MemoryOS 都可以实现这两个接口。
六、Response Generation:Episodic 与 Semantic 并行检索
对 query Q Q Q 计算 embedding v Q v_Q vQ,分别检索:
R ~ e = Search ( D e , v Q , k ) \tilde R_e=\operatorname{Search}(D_e,v_Q,k) R~e=Search(De,vQ,k)
R ~ s = Search ( D s , v Q , m ) \tilde R_s=\operatorname{Search}(D_s,v_Q,m) R~s=Search(Ds,vQ,m)
最终上下文由 narrative episodes R e R_e Re、top- r r r raw episodes R p R_p Rp 和 semantic knowledge R s R_s Rs 拼接:
a ← f L L M ( P a n s ∥ Q ∥ R e ∥ R p ∥ R s ) a\leftarrow f_{\mathrm{LLM}} (P_{ans}\Vert Q\Vert R_e\Vert R_p\Vert R_s) a←fLLM(Pans∥Q∥Re∥Rp∥Rs)
主实验取 k = 10 k=10 k=10、 m = 2 k = 20 m=2k=20 m=2k=20、 r = 2 r=2 r=2。这不是复杂 agentic retrieval,而是直接 dense Top-k;论文刻意把贡献限制在 distillation,而不把结果归功于复杂 retrieval。
七、实验设置
1. 数据集
- LoCoMo:10 段 dialogue,论文此处报告平均 24K tokens、1,540 questions,四类为 Temporal、Open Domain、Multi-Hop、Single-Hop;
- LongMemEvalS:500 个长对话样本,平均约 105K tokens,用于扩展性验证。
注意:LoCoMo 的数据规模在不同论文/预处理版本中常有不同统计。本文实验设置明确写 24K average tokens,效率表 Full Context 平均输入 23,653 tokens,应以本文预处理为准。
2. Baselines
Full Context、RAG-4096、LangMem、Zep、Mem0、A-MEM、MemoryOS。
Mem0 与 Zep 使用 commercial API 生成 memory context;其他方法用 gpt-4o-mini 或 gpt-4.1-mini 同时承担内部处理和回答。Nemori embedding 使用 text-embedding-3-small。
3. Metrics
- 主要指标:gpt-4o-mini LLM-judge score;
- 辅助指标:F1、BLEU-1;
- 所有指标缩放到 0--100;
- 论文遵循惯例只报告 single-run result,没有方差与显著性检验。
4. 超参数
τ = 0.70 \tau=0.70 τ=0.70, K e = K m = 5 K_e=K_m=5 Ke=Km=5, K s = 10 K_s=10 Ks=10,默认 observation window w = 20 w=20 w=20,默认 episodic retrieval k = 10 k=10 k=10,semantic retrieval m = 20 m=20 m=20。
八、主实验:总体最强,但 Open Domain 是明确反例
Table 2:LoCoMo 主结果
表源:论文 Table 2。表中下划线表示除 Nemori 外最强的记忆系统,Improv. 表示 Nemori 相对该系统的提升比例。
gpt-4.1-mini
| 方法 | Temporal LLM | Open LLM | Multi-Hop LLM | Single-Hop LLM | Average LLM |
|---|---|---|---|---|---|
| Full Context | 74.2 | 56.6 | 77.2 | 86.9 | 80.6 |
| LangMem | 50.8 | 59.0 | 71.0 | 84.5 | 73.4 |
| MemoryOS | 37.7 | 60.4 | 62.4 | 68.9 | 60.6 |
| Nemori | 77.3 | 56.3 | 74.8 | 87.0 | 80.8 |
Nemori 平均 80.8,略高于 Full Context 80.6,比最强 memory baseline LangMem 73.4 高 10.1%。Temporal 77.3 比 A-MEM 66.7 高 15.9%。但 Multi-Hop 74.8 低于 Full Context 77.2,Open Domain 56.3 低于 MemoryOS 60.4、LangMem 59.0,也略低于 Full Context 56.6。
gpt-4o-mini
| 方法 | Temporal LLM | Open LLM | Multi-Hop LLM | Single-Hop LLM | Average LLM |
|---|---|---|---|---|---|
| Full Context | 56.2 | 48.6 | 66.8 | 83.0 | 72.3 |
| Mem0 | 50.4 | 40.6 | 60.3 | 68.1 | 61.3 |
| Nemori | 67.6 | 45.8 | 61.7 | 81.9 | 73.0 |
Nemori 平均 73.0,高于最强 memory baseline Mem0 61.3,相对提升 19.1%,也略高于 Full Context 72.3。但 Full Context 在 Open、Multi-Hop、Single-Hop 三类都更高;Nemori 的平均胜出主要由 Temporal 67.6 对 56.2 的巨大优势拉动。
因此更准确的结论是:Nemori 的突出优势集中在需要 memory formation 阶段进行时间归一化和知识增量提取的任务,并非所有类别都优于完整上下文。
Open Domain 失败案例
问题描述一个"不同颜色卡牌、按颜色或数字匹配"的游戏,但对话从未说出 UNO。Nemori 可以保存完整描述,却不能从 memory 中创造缺失的 lexical label;最终是否回答 UNO 取决于 backbone world knowledge。这说明 memory quality 与 model prior knowledge 在 Open Domain 上不可分离。
九、效率:Episode-centric pipeline 反而减少了调用
Table 3:Memory Construction Cost
表源:论文 Table 3。该表比较 gpt-4o-mini 设置下不同方法构建 LoCoMo 记忆所需的 LLM 调用次数和 Token。
Nemori 使用 373.2 次 LLM calls、总计 322.9K tokens;相对最省的对比项 MemoryOS(1016.1 calls、526.5K tokens),calls 减少 59.5%,tokens 减少 38.7%。
原因不是 pipeline 简单,而是以 episode 为处理单位,避免每条 message 单独抽取、更新和调用 LLM。
Appendix Table 9 给出构建成本分解:
- Partition:49.3K,15.3%;
- Narration:123.6K,38.3%;
- Integration:52.2K,16.2%;
- Distillation:97.7K,30.3%。
主要成本其实是 narrative generation,其次才是 prediction-error distillation。
Table 4:Response Generation Cost
表源:论文 Table 4。Search 表示检索时间,Total 表示从收到问题到生成答案的端到端延迟。
| 方法 | LLM | Tokens | Search ms | Total ms |
|---|---|---|---|---|
| Full Context | 72.3 | 23,653 | - | 5,806 |
| RAG-4096 | 30.2 | 3,430 | 544 | 2,884 |
| A-MEM | 52.5 | 2,614 | 947 | 2,867 |
| MemoryOS | 54.5 | 1,560 | 9,910 | 15,220 |
| Nemori | 73.0 | 2,745 | 787 | 3,053 |
Nemori 比 Full Context 少约 88% 回答上下文 token,总延迟低约 47%,且分数略高。但它不是 table 中绝对最低 latency:RAG-4096 与 A-MEM 都略快,只是性能明显更低。
十、消融:prediction error 确实优于直接蒸馏
Table 5:核心消融
表源:论文 Table 5。Nemori-s 表示直接蒸馏语义记忆;
w/o e、w/o s和w/o p分别表示移除情景检索、语义检索和自适应消息划分;Mgmt 表示是否使用原生管理模块。
| 配置 | gpt-4o-mini LLM | gpt-4.1-mini LLM | 含义 |
|---|---|---|---|
| Nemori-s,无 management | 52.0 | 65.5 | 每个 episode 直接蒸馏 semantic memory |
| w/o e,无 management | 65.0 | 74.9 | prediction-error semantic memory,但回答时不取 episodic |
| w/o s | 54.7 | 76.9 | 只取 episodic,不取 semantic |
| w/o p | 68.0 | 75.7 | 固定 20-message chunk |
| Nemori Full | 73.0 | 80.8 | 完整框架 |
1. Prediction error vs direct distillation
为了公平比较语义蒸馏,论文比较 Nemori-s 与 w/o e:两者回答时都不使用 episodic database,区别只在 semantic memory 如何形成。
- gpt-4o-mini:52.0 → 65.0,提升 25.0%;
- gpt-4.1-mini:65.5 → 74.9,提升 14.4%。
Appendix Table 10 显示最大收益在 Temporal:gpt-4o-mini 从 33.3 到 57.9(+73.9%);gpt-4.1-mini 从 46.4 到 63.2(+36.2%)。这直接支持论文唯一核心主张:与预测比较后再蒸馏,比对每个 episode 直接抽取事实更有效。
2. Native management 贡献很小
对 w/o e,启用/禁用 native management 几乎不变:64.6 vs 65.0、74.7 vs 74.9。这符合 management-agnostic 声明,也说明 LoCoMo 缺少足够 knowledge update,无法验证 new/merge/conflict 管理逻辑。
3. Episodic 与 Semantic 互补
- 去 episodic:73.0 → 65.0;80.8 → 74.9;
- 去 semantic:73.0 → 54.7;80.8 → 76.9。
semantic memory 在 gpt-4o-mini 上尤其关键;但 gpt-4.1-mini 对 narrative episode 的利用能力更强,因此去 semantic 的降幅较小。不同 backbone 对两类 memory 的依赖不相同。
4. Adaptive partitioning 有贡献
固定 20-message chunk 使分数从 73.0 降至 68.0、从 80.8 降至 75.7,说明 episode integrity 不只是美学设计。但由于 full system 同时包含 partition 和跨窗口 integration,论文没有单独消融 integration,无法分离两者贡献。
十一、超参数与表示分析
1. Observation Window 的影响
为了观察局部消息窗口是否会影响事件划分,论文将窗口长度从 5 条消息增加到 40 条消息。

图源:论文 Figure 2。窗口长度为 5、10、20、30 和 40 时,LLM Score 分别为 80.4、80.7、80.8、81.2 和 80.7。
结果整体只在约 1 分范围内波动。
这说明 Local Message Partitioning 与后续 Associative Memory Integration 能够相互补偿:窗口较小时,被分开的连续事件可以在后续重新合并;窗口较大时,分区模型仍可以将不同话题拆开。
不过,默认设置 w = 20 w=20 w=20 并不是最高分点, w = 30 w=30 w=30 的 81.2 略高。论文选择 20 更接近效果和处理成本之间的折中。
2. Top-K 的影响
Nemori 在回答问题时默认检索 10 条情景记忆和 20 条语义记忆。论文进一步观察了不同检索数量的影响。

图源:论文 Figure 3。蓝线表示 Nemori,红色虚线表示 Full Context;标注点是主实验使用的 k = 10 k=10 k=10。
当 k k k 从 2 增加到 10 时,性能快速提高。这说明检索条目太少会遗漏关键证据。
当 k k k 超过 10 后,曲线逐渐进入平台区。Appendix Table 12 仍显示 gpt-4.1-mini 在 k = 20 k=20 k=20 时达到 83.4,高于默认设置的 80.8。
因此,这里所说的"趋于饱和"并不是继续增加 Top-K 完全没有收益,而是单位检索成本带来的收益开始下降。
3. Narrative 与 Raw Episode 的选择
论文 Table 6 比较了两种索引和返回形式:
N:结构化的 narrative episode;P:原始 partitioned episode。
Narrative index 在保持 retrieve content 相同时优于 raw index:N→N 76.9 vs P→N 76.4;N→P 77.0 vs P→P 75.3。说明结构化 narrative 更适合作为 embedding index。但 N→P 的 LLM 分数 77.0 略高于默认 N→N 76.9,raw text 对精确细节仍有价值。
十二、第三方集成与长上下文扩展
Table 7:作为 A-MEM / MemoryOS 的入口层
表源:论文 Table 7。
P表示将原始消息交给第三方系统,K表示改为输入 Nemori 蒸馏后的语义知识;Core 是排除 Temporal 后的加权平均分。
用 Nemori semantic knowledge 代替 raw messages 输入第三方系统:
- A-MEM storage 减少 64.3% / 51.3%;Core score 均提升 6.1%;
- MemoryOS storage 减少 53.1% / 45.3%;Core score提升 1.9% / 3.4%。
但 Average score 并非总是保持:A-MEM 分别下降 3.0% 和 3.9%;MemoryOS 在 gpt-4o-mini 下降 1.1%,gpt-4.1-mini 提升 1.2%。下降主要来自 Temporal,而作者用排除 Temporal 的 Core 指标展示 semantic input 的优势。这是合理诊断,但 Core 不是预先定义的标准 benchmark metric,应避免只报 Core。
Table 8:LongMemEvalS
表源:论文 Table 8。该表比较 Nemori 与 Full Context 在 LongMemEvalS 各问题类型上的准确率和上下文用量。
gpt-4o-mini
Nemori 平均 64.2 vs Full Context 55.0;在 Preference、Temporal、Multi-session、User 上领先,但 Knowledge Update 61.5 低于 78.2,Single-session Assistant 83.9 低于 89.3。
gpt-4.1-mini
Nemori 平均 74.6 vs Full Context 65.6;除 Single-session Assistant 92.9 低于 98.2 外,其余多类领先,包括 Knowledge Update 79.5 vs 76.9。
更长 context 上差距扩大,支持 selective distillation 能缓解 attention dilution。但这仍是 Nemori 与 Full Context 的比较,不是与所有 memory baseline 的完整 LongMemEvalS 对照。
十三、与 Agent Memory 系列方法比较
| 方法 | 首要问题 | Memory utility 信号 | 发生阶段 | 核心产物 |
|---|---|---|---|---|
| Mem0 | 抽取哪些事实/偏好 | 事实模板、冲突规则 | Distillation/management | 精炼事实 |
| A-MEM | notes 如何链接演化 | LLM 生成链接与更新 | Management | note network |
| MAGMA | 多种关系如何并存 | typed relation / multi-graph | Construction/retrieval | 多关系图 |
| CoM | query 时如何组织证据 | query relevance + chain coherence | Retrieval | 动态 memory chain |
| ReMemR1 | 顺序压缩如何回看 | callback policy | Reading/update | revisitable state |
| Mem²Evolve | 经验如何变成能力 | task outcome / evolution | Cross-task | experience + assets |
| HeLa-Mem | 使用历史如何塑造关系 | retrieval co-activation | Management/retrieval | Hebbian graph + semantic store |
| Nemori | 新经验什么值得保存 | semantic prediction error | Distillation | narrative episode + unexpected semantic insight |
Nemori vs HeLa-Mem
HeLa-Mem 认为"反复共同被检索"的关系值得增强;Nemori 认为"无法被既有知识预测"的内容值得保存。前者学习 memory 之间的 usage relation,后者学习 incoming experience 的 novelty。两者可以组合:Nemori 决定节点内容,HeLa-Mem 决定节点间边权。
Nemori vs A-MEM / MemoryOS
A-MEM、MemoryOS 主要在 entry 已经存在后管理它;Nemori 改善进入这些系统的 input form。Table 7 的价值正在于证明两者不是替代关系,而是 distillation layer 与 management layer 的组合。
Nemori vs CoM / ReMemR1
CoM、ReMemR1 主要解决"需要时如何重新找到或回看";Nemori 解决"最初留下什么"。检索能力不能恢复 distillation 阶段已经丢掉的信息,因此 Nemori 位于更上游。
Nemori vs Mem²Evolve
Mem²Evolve 的 experience distillation 最终服务于 capability expansion;Nemori 可以提供更干净的 experience input:只有超出现有 capability/policy 可预测范围的失败、新约束和新策略才进入 evolution loop。
十四、对 Coding Agent / Tool Agent / Multi-Agent 的启发
1. Coding Agent:只保存超出现有 repo model 的变化
Coding Agent 已经知道大量稳定规律:测试命名、目录结构、常规 lint 修复。继续记录这些重复操作只会增加 retrieval noise。Nemori 式流程可以:
- 从 issue + code inspection + patch + test 形成完整 episode;
- 根据 repo memory 预测"这个问题通常如何修";
- 抽取实际轨迹对预测的偏差;
- 只保存新的 hidden dependency、反直觉约束、失败修复原因或新 API contract。
例如系统预测"修改 parser 后只需更新 parser tests",真实结果却发现 snapshot generator 和 serialization schema 同时变化;这个 prediction error 比整段工具日志更值得长期保存。
2. Tool Agent:把异常 tool outcome 当成 memory signal
不要保存每一次成功调用。应保存:
- 参数正确但 API 返回反常错误;
- 工具文档承诺与实际行为不同;
- 某工具组合产生新 side effect;
- 用户策略或权限与旧预测不一致。
同时,prediction 应基于 tool schema + 历史轨迹,error 应由实际 structured result 验证,而不能只让 LLM凭自然语言主观判断。
3. Multi-Agent:保存协作预期被打破的地方
主 Agent 通常可以预测子 Agent 的产出。真正有价值的是:某类子任务反复需要额外证据、某 agent 擅长领域与声明不符、交接信息不足导致返工。将这些 residual 蒸馏为 orchestration memory,可以直接改进未来 delegation policy。
4. 生产级改造
Nemori 的语义 prediction error 可以进一步结构化为:
U ( x ) = S u r p r i s e ( x ) ⏟ 不可预测 × O u t c o m e I m p a c t ( x ) ⏟ 影响结果 × C o n f i d e n c e ( x ) ⏟ 证据可靠 − S t o r a g e C o s t ( x ) ⏟ 长期成本 U(x)=\underbrace{Surprise(x)}{不可预测} \times\underbrace{OutcomeImpact(x)}{影响结果} \times\underbrace{Confidence(x)}{证据可靠} -\underbrace{StorageCost(x)}{长期成本} U(x)=不可预测 Surprise(x)×影响结果 OutcomeImpact(x)×证据可靠 Confidence(x)−长期成本 StorageCost(x)
论文主要实现 Surprise;Coding/Tool Agent 还需要 outcome 与 verification,否则"意外"可能只是噪声或工具故障。
十五、局限、反例与未解问题
论文明确承认
- 重点在 distillation,management 和 retrieval 都较朴素;复杂 memory reasoning 可能受限;
Evoke/Consolidate接口仍是概念性抽象,没有标准协议,接入第三方系统需逐个实现。
进一步分析
1. Prediction error 不等于 future utility
意外信息可能只是随机噪声、口误或一次性异常;高度可预测的信息也可能非常重要,例如用户反复强调的安全约束。Novelty 与 utility 相关,但不等价。
2. 预测者与裁判是同一个 LLM 家族
LLM 先预测、再比较、再抽取,系统误差可能相关。模型没预测到某事实,可能是 context assembly 失败,而不是事实真正新颖;模型错误预测也会制造虚假 residual。
3. Cue leakage 与 cue quality
若 cue 已经包含关键新信息,anticipatory schema 可能"预测"出真实内容,导致真正 novelty 被误判为 redundant;若 cue 太抽象,任何细节都会显得 unexpected。论文未系统消融 cue granularity。
4. 形成时推理会固化错误
时间归一化是优势,也可能把错误推理固化成长期事实。相比回答时错误,一条错误 semantic memory 会影响未来多个 query,因此需要 evidence link 和可撤销机制。
5. 单次运行与 LLM judge
论文只报 single run,主要指标又是 gpt-4o-mini judge;没有方差、显著性或人工复核。Nemori 相对 Full Context 的 LoCoMo 平均优势只有 0.2/0.7 分,不能据此声称稳定超越。
6. Open Domain 与 Knowledge Update 的不稳定
Open Domain 明确不领先;LongMemEvalS 上 gpt-4o-mini 的 Knowledge Update 也显著低于 Full Context。说明 semantic distillation 会受 backbone 能力和冲突处理质量影响。
7. "Training-free"不等于低成本
无需训练参数,但 memory formation 包含 partition、narration、integration、prediction、distillation、consolidation 多次 LLM 调用。论文证明它比逐 message baseline 省,但不是无成本。
8. 缺少删除与隐私语义
raw episode、narrative、semantic insight 三层存在派生关系。用户要求删除某条原始消息时,需要级联定位并重算相关 narrative/knowledge;论文没有讨论 provenance-based deletion。
十六、我的理解与启发
1. Nemori 最重要的贡献是 memory 的"增量编码"视角
普通 summarization 问"这段话讲了什么";Nemori 问"相对旧知识,这段话新在哪里"。后者更接近数据库 delta、event sourcing 和模型 residual learning,天然适合持续交互。
2. Distillation 应该是相对的,而不是绝对的
同一条消息对不同 Agent 的价值不同。新手 Agent 不知道的 API 规则值得记,已经掌握该规则的 Agent 再存一遍就是冗余。Memory utility 不是内容的固定属性,而是内容相对于当前 memory state 的函数:
U t i l i t y ( x ∣ M t ) Utility(x\mid M_t) Utility(x∣Mt)
这是论文比 importance score 更深的一步。
3. 最值得借鉴的是"先预测再写入"协议
它可以成为所有 memory writer 的前置协议:
text
Retrieve old memory
→ predict incoming episode
→ observe actual outcome
→ compute semantic residual
→ verify residual
→ consolidate
真正生产化时还应增加 verify 和 outcome gating。
4. Episodic 与 Semantic 不应互相替代
Semantic memory 提供可复用结论,episodic memory 提供证据、上下文和纠错入口。消融证明仅保留任一侧都会下降。好的 memory 系统应允许 semantic conclusion 回链 raw provenance,而不是用摘要永久覆盖原始证据。
5. Nemori 与 HeLa-Mem 可以形成更完整闭环
Nemori 回答"节点里写什么",HeLa-Mem 回答"节点间关系如何随使用变化",CoM/ReMemR1 回答"query 时沿什么路径回看"。组合后可形成:
text
Prediction-error distillation
↓
高信息密度 memory nodes
↓
usage-conditioned association
↓
query-time dynamic traversal / callback
这可能比继续堆叠某一种单一 memory structure 更接近完整生命周期。
十七、总结
Nemori 把 Agent Memory 中最容易被忽略的入口问题提到中心:memory 不应因为"看起来重要"而保存,而应因为它改变了系统对未来交互的预测而保存。
其完整链条是:
text
自适应 episode partition
→ narrative representation
→ 跨窗口 episode integration
→ 旧知识预测 incoming episode
→ 从真实 episode 与预测的差异中提取 insight
→ new / merge / conflict consolidation
→ episodic + semantic 双路检索回答
实验证据最有力的部分是 prediction-error distillation 对 direct distillation 的显著提升,尤其在 Temporal Reasoning;最值得克制的部分是总体略超 Full Context 的幅度很小、Open Domain 存在明确落后、主要结果是 single run LLM-judge,且"prediction error"仍由自然语言 prompt 近似。
最后一句话:Nemori 的意义不在于发明一种新的 memory store,而在于把"是否值得记住"从内容的绝对重要性,改写成相对于既有知识的语义增量------Memory 开始保存世界对自身预期的修正,而不只是保存世界本身。
参考资料
- Ma, Wenquan, Jiayan Nan, and Wenlong Wu. What Deserves Memory: Adaptive Memory Distillation for LLM Agents. ACL 2026. ACL Anthology|正式 PDF
- Nemori official repository: https://github.com/nemori-ai/nemori
- Rao, R. P. N. and Ballard, D. H. Predictive coding in the visual cortex. Nature Neuroscience, 1999.
- Friston, K. The free-energy principle: a unified brain theory? Nature Reviews Neuroscience, 2010.
- McClelland, J. L., McNaughton, B. L., and O'Reilly, R. C. Why there are complementary learning systems in the hippocampus and neocortex. Psychological Review, 1995.