文章目录


前言

最近阅读的几篇 Agent 记忆论文,分别从不同角度回答了长期记忆系统中的关键问题:

  • Mem0 关注如何提取事实,并对记忆执行新增、更新、删除和忽略;
  • Zep 使用时序知识图谱保存实体、关系及其历史变化;
  • GAM 通过层级图和语义边界控制记忆固化;
  • MemRL 根据环境奖励学习哪些任务经验真正有用。

这些方法让我逐渐意识到,Agent 记忆系统并不只是一个“把历史信息保存下来”的数据库。

一个完整的记忆系统至少需要回答三个问题:

写入阶段:
历史对话应该以什么粒度保存?

召回阶段:
面对当前问题,应该检索哪些记忆?

反馈阶段:
系统能否根据实际使用结果,继续改进记忆召回?

传统 RAG 通常将一轮对话、一个 Session,或者固定长度的文本块作为记忆单元。

但是,对话中的语义主题并不一定服从这些固定边界

例如,用户可能在三次不同的对话中陆续提到:

第一次:
最近总是下雨,我很难坚持户外跑步。

第二次:
我在考虑买一台跑步机。

第三次:
附近新开了一家健身房,我现在更倾向于去那里锻炼。

如果系统按照 Session 分别保存,这些信息会被拆成三条相互独立的记忆;如果按照整个 Session 保存,又可能把跑步、工作、饮食等多个主题混在一起。

更合理的做法是围绕“用户的运动方式选择”这一主题,将分散的信息持续合并,得到一条随对话演化的主题记忆。

记忆组织好之后,还有另一个问题:

语义上相关的记忆,不一定是生成回答时真正需要的记忆。

传统 Retriever 通常保持固定。即使某些检索结果长期没有被模型使用,检索器也不会从后续交互中学习。

这篇论文提出了 Reflective Memory Management,简称 RMM,从记忆写入和记忆召回两个方向同时改进长期个性化对话 Agent:

  1. Prospective Reflection,前瞻性反思
    在当前 Session 结束后,围绕不同语义主题分解和总结对话,为未来检索提前组织记忆。

  2. Retrospective Reflection,回顾性反思
    在生成回答后,根据 LLM 实际引用了哪些记忆,构造奖励信号,通过在线强化学习持续优化记忆重排器。

可以用一句话概括 RMM:

面向未来,提前把对话整理成便于召回的主题记忆;回看过去,根据记忆是否真正被回答使用,持续学习更好的召回策略。


零、论文基本信息


一、长期个性化对话需要什么样的记忆?

大语言模型本身通常是无状态的。

每次调用模型时,模型主要依赖当前输入的上下文,并不会自动保存之前所有 Session 中的用户信息。

但长期个性化对话需要模型记住:

  • 用户的兴趣和偏好;
  • 用户过去提到的经历;
  • 用户当前状态如何由过去状态演变而来;
  • 多个 Session 中相互关联的信息;
  • 之前已经讨论或解决过的问题。

论文 Figure 1 给出了一个个性化医疗 Agent 的例子。

个性化医疗Agent例子

图源:Tan et al., 2025,Figure 1。

用户在一周前提到自己对青霉素过敏,昨天又提到持续咳嗽和发烧。今天用户表示发烧已经消退,但出现了头痛。

为了生成可靠回答,Agent 不能只看今天的消息,还需要整合:

青霉素过敏
+
昨天的咳嗽和发烧
+
今天的症状变化

这说明长期个性化对话中的记忆并不是简单的历史复述,而是需要在当前情境下重新组合过去的信息。


二、现有方法面临的两个核心问题

论文将现有长期对话记忆的不足总结为两个问题:

  1. 固定的记忆粒度;
  2. 固定的记忆检索器。

1. 固定记忆粒度破坏语义结构

传统系统通常采用预先定义的记忆边界:

一句话作为一条记忆
一轮对话作为一条记忆
一个 Session 作为一条记忆
固定时间间隔作为一条记忆

但真实对话中的一个主题可能:

  • 只出现在一句话中;
  • 跨越多个连续 Turn;
  • 分散在同一 Session 的不同位置;
  • 跨越多个不同 Session。

例如,一个 Session 中可能同时包含:

用户的运动习惯
用户的饮食偏好
用户的工作安排
用户的旅行计划

如果把整个 Session 作为一条记忆,召回“运动习惯”时也会带入大量无关信息。

反过来,如果把每个 Turn 都独立存储,那么同一个主题又会被切成许多零散片段。

因此:

固定粒度过大:
记忆包含较多无关信息。

固定粒度过小:
完整主题被切割成碎片。

2. 固定 Retriever 无法适应不同用户

现有记忆系统通常直接使用预训练 Retriever,根据语义相似度返回 Top-K 记忆。

但是,不同对话领域和不同用户的检索需求并不相同。

例如,在医疗场景中,以下信息可能非常重要:

过敏史
慢性疾病
近期症状变化
正在使用的药物

在职业咨询场景中,更重要的可能是:

求职目标
城市偏好
项目经历
当前面试进展
职业选择标准

一个固定的通用检索器,未必能够自动适应这些差异。

传统解决方案是使用标注数据训练专门的 Retriever,但长期个性化场景中的用户级检索标注非常昂贵,也很难持续收集。

RMM 因此希望实现:

不依赖额外人工标注,而是利用 LLM 回答时自然产生的引用归因信号,持续改进检索结果。


三、相关工作

论文主要从两个方向梳理了相关研究:

  1. 大模型的长期会话;
  2. 基于记忆的个性化对话 Agent。

1. 大模型的长期会话

现有长上下文方法大致可以分为两类。

模型结构层面的改进

例如:

  • 扩展注意力机制;
  • 压缩或优化 KV Cache;
  • 改进位置编码;
  • 设计支持更长输入的模型结构。

这些方法可以提高模型能够直接处理的上下文长度,但通常需要访问模型内部结构。

因此,对于仅通过 API 使用的闭源模型,这类方法不容易直接采用。

基于总结或外部记忆的方法

另一类方法会将历史对话:

  • 总结成事件;
  • 压缩成用户画像;
  • 存入外部记忆库;
  • 在当前对话中检索相关历史。

RMM 属于这一方向,但它进一步指出:

仅仅进行总结还不够,还要解决记忆粒度固定和检索策略固定的问题。

2. 基于记忆的个性化对话 Agent

MemoryBank 使用对话总结和轮次信息构建长期记忆,并引入受艾宾浩斯遗忘曲线启发的记忆更新机制。

LD-Agent 使用长期、短期记忆库以及关键词匹配等方式管理对话历史。

Theanine 则将记忆按照时间和因果关系连接成 Timeline,以保留用户状态的变化过程。

这些方法提升了长期个性化能力,但通常仍然依赖:

预先定义的记忆粒度
+
固定的检索规则或 Retriever

RMM 的不同之处在于:

  • 写入端根据语义主题动态确定粒度;
  • 召回端根据 LLM 的实际引用情况在线更新重排器。

需要注意的是,这篇论文中的“Reflection”与 Reflexion 中对任务失败进行语言反思并不完全相同。

RMM 的反思主要指:

Prospective Reflection:
为了未来召回,重新组织当前历史。

Retrospective Reflection:
根据刚刚生成回答时的记忆使用情况,反过来优化检索。

四、问题定义

论文考虑的是多 Session 个性化对话场景。

一个用户会与 Agent 进行多次独立会话。每个 Session 中又包含多个 Turn,每个 Turn 由用户问题和 Agent 回答组成。

系统包含:

  • 当前用户查询 q q q
  • 当前 Session 中已经出现的消息 S S S
  • 外部记忆库 B B B
  • Retriever f θ f_\theta fθ
  • Reranker g ϕ g_\phi gϕ
  • 用于生成回答的 LLM。

首先,Retriever 从记忆库中召回 Top-K 候选记忆:

M K = f θ ( q , B ) M_K=f_\theta(q,B) MK=fθ(q,B)

其中:

  • q q q 是当前用户查询;
  • B B B 是外部记忆库;
  • M K M_K MK 是 Retriever 返回的 K 条候选记忆。

然后,Reranker 从 K 条候选中进一步选择 Top-M:

M M = g ϕ ( q , M K ) M_M=g_\phi(q,M_K) MM=gϕ(q,MK)

其中:

  • g ϕ g_\phi gϕ 是参数为 ϕ \phi ϕ 的轻量级重排器;
  • M M M_M MM 是最终送入 LLM 的 M 条记忆;
  • 一般有 M < K M<K M<K

LLM 综合当前查询、Session 上下文和记忆生成回答:

a , R M = LLM ⁡ ( q , S , M M ) a,R_M=\operatorname{LLM}(q,S,M_M) a,RM=LLM(q,S,MM)

其中:

  • a a a 是最终回答;
  • R M R_M RM 表示 LLM 对各条记忆生成的引用归因结果。

系统需要解决两个问题。

1. 应该向记忆库写入什么?

Session 中可能包含大量闲聊和重复内容。

系统需要主动找出:

  • 哪些信息值得长期保存;
  • 哪些信息属于同一个主题;
  • 哪些新信息应该与旧记忆合并。

2. 应该从记忆库召回什么?

检索过少可能遗漏重要历史,检索过多又可能引入噪声。

系统需要在:

完整保存

与:

精确召回

之间取得平衡。


五、RMM 框架总览

RMM 包含四个主要组件:

  1. Memory Bank;
  2. Retriever;
  3. Reranker;
  4. LLM Generator。

其完整流程可以概括为:

当前用户问题
    ↓
Retriever 从记忆库召回 Top-K
    ↓
Reranker 选择 Top-M
    ↓
LLM 结合当前 Session 和记忆生成回答
    ↓
LLM 同时标记回答引用了哪些记忆
    ↓
引用结果作为奖励更新 Reranker
    ↓
Session 结束
    ↓
按主题抽取当前 Session 中的记忆
    ↓
将新主题记忆添加或合并到 Memory Bank

整个流程实际上包含两个时间方向。

1. 面向未来:Prospective Reflection

在一个 Session 结束后,对刚刚发生的对话进行分解和总结。

它考虑的是:

为了让未来的查询更容易找到这些信息,现在应该怎样组织记忆?

2. 回看过去:Retrospective Reflection

在当前回答生成后,检查模型实际使用了哪些召回结果。

它考虑的是:

刚才召回的记忆中,哪些真正帮助了回答,哪些只是无用噪声?

两种反思组成了一个持续闭环:

整理记忆
→ 召回记忆
→ 使用记忆
→ 评价记忆
→ 优化召回
→ 继续整理新记忆

六、Prospective Reflection:基于主题的记忆组织

Prospective Reflection 可以翻译为“前瞻性反思”。

所谓“前瞻”,是指系统在 Session 结束后,不只是压缩过去的内容,而是考虑:

这些内容将来以什么形式保存,才更容易被准确召回?

论文 Figure 2 展示了该过程。

基于主题的记忆

图源:Tan et al., 2025,Figure 2。

每条记忆由一对内容组成:

Topic Summary
+
Raw Dialogue

其中:

  • Topic Summary 是主题摘要,作为主要检索键;
  • Raw Dialogue 保存该主题对应的原始对话片段。

这样的设计兼顾了:

摘要:
适合高效语义检索。

原始对话:
保留完整证据和表达细节。

1. 什么是 Topic?

论文中的 Topic 指一个语义连贯的讨论单元。

它既可以是细粒度意图:

询问纯素食谱

也可以是较宽泛主题:

旅行规划

一个 Topic 可以跨越一个或多个 Turn,并不受固定对话边界限制。

2. 第一步:Memory Extraction

一个 Session 结束后,系统让 LLM 分析完整对话,并按不同主题抽取:

  • 主题摘要;
  • 对应的原始 Turn 编号或对话片段。

例如,原始 Session 包含:

用户最近经常跑步;
因为经常下雨,用户在考虑去健身房;
用户对鸡蛋过敏;
用户是一名本科生。

系统可能生成:

{
  "summary": "用户经常跑步,并因为天气原因考虑去附近的健身房。",
  "reference": [0, 1, 2]
}
{
  "summary": "用户对鸡蛋过敏。",
  "reference": [3]
}
{
  "summary": "用户目前是一名本科生。",
  "reference": [4]
}

这里不是把整个 Session 压缩成一条总摘要,而是根据语义拆成多个相对完整的主题记忆。

3. 第二步:Memory Update

对于每条新抽取的记忆,系统先从现有 Memory Bank 中检索 Top-K 条语义相似的旧记忆。

然后,LLM 在两种操作中作出选择:

Add

如果新记忆属于一个此前没有出现过的新主题,就直接加入记忆库。

例如:

旧记忆库没有记录用户过敏史。

新记忆:
用户对鸡蛋过敏。

操作:
Add。

Merge

如果新记忆是在补充或更新已有主题,就与旧记忆合并。

例如:

旧记忆:
用户喜欢徒步。

新记忆:
用户最近也开始跑步,并计划参加越野活动。

合并后:
用户喜欢徒步和跑步,并计划参加越野活动。

最终,Memory Bank 中同一主题的相关信息被逐步整合,而不是不断堆积成相互割裂的文本片段。

4. 为什么不直接保存整个 Session?

假设一个 Session 包含:

用户讨论了跑步;
用户询问了工作面试;
用户提到对鸡蛋过敏。

整个 Session 作为记忆时,查询“用户有什么过敏史”会同时返回运动和面试信息。

主题分解后则变成:

主题一:运动习惯
主题二:求职准备
主题三:过敏史

这样能够降低记忆内部的噪声。

5. 为什么不只保存主题摘要?

摘要可能丢失:

  • 时间信息;
  • 语气;
  • 条件限制;
  • 因果关系;
  • 具体说法。

例如:

用户说:
如果未来工作地点在北京,我可以接受较长通勤;如果在上海,我更倾向住在公司附近。

如果只总结成:

用户关心通勤距离。

就会丢失重要条件。

因此,RMM 同时保存主题摘要和原始对话,使系统可以先用摘要检索,再将原始证据提供给生成模型。


七、Retrospective Reflection:通过 LLM 归因优化召回

Retrospective Reflection 可以翻译为“回顾性反思”。

其核心问题是:

刚刚召回的 Top-M 条记忆中,哪些真正被 LLM 用于生成回答?

普通 RAG 在回答结束后不会继续利用这一信息。

RMM 则将其转化为在线强化学习奖励,用于持续更新 Reranker。

论文 Figure 3 展示了完整过程。

优化召回

图源:Tan et al., 2025,Figure 3。

需要强调的是,论文这里使用的是 LLM Attribution,即 LLM 归因或引用信号,而不是“大模型属性”。

完整流程为:

Retriever 返回 Top-K
→ Reranker 选择 Top-M
→ LLM 生成回答并引用使用过的记忆
→ 被引用记忆奖励 +1
→ 未引用记忆奖励 -1
→ 使用 REINFORCE 更新 Reranker

八、Reranker 的设计

论文没有直接大规模微调 Retriever,而是在其后添加一个轻量级 Reranker。

原因是:

  • Retriever 参数量可能较大;
  • 用户级标注数据有限;
  • 在线完整微调成本高;
  • 小规模数据可能破坏 Retriever 原有能力;
  • 轻量重排器更适合持续适应。

1. Embedding Adaptation

设当前查询的 embedding 为 q q q,第 i i i 条候选记忆的 embedding 为 m i m_i mi

Reranker 首先通过带残差连接的线性变换进行适配:

q ′ = q + W q q , m i ′ = m i + W m m i q'=q+W_q q,\quad m_i'=m_i+W_m m_i q=q+Wqq,mi=mi+Wmmi

其中:

  • W q W_q Wq 是查询 embedding 的变换矩阵;
  • W m W_m Wm 是记忆 embedding 的变换矩阵;
  • 残差连接保留原始 Retriever 的语义空间;
  • 新增变换用于学习当前对话场景中的检索偏好。

之后,通过点积计算相关性:

s i = q ′ ⊤ m i ′ s_i={q'}^\top m_i' si=qmi

其中, s i s_i si 是第 i i i 条记忆经过重排器计算的相关性分数。

直观来看:

原始 Retriever:
提供通用语义相关性。

Reranker:
在原始语义空间上进行小幅调整,
使排序逐渐适应当前任务和用户。

九、使用 Gumbel Trick 进行随机采样

如果每次都确定性地选择当前得分最高的记忆,系统很容易过早固定在已有策略上。

为了在强化学习中保留探索能力,论文使用 Gumbel Trick。

首先为每条候选记忆的分数加入 Gumbel 噪声:

s i ~ = s i + g i , g i = − log ⁡ ( − log ⁡ u i ) , u i ∼ U ( 0 , 1 ) \tilde{s_i}=s_i+g_i,\quad g_i=-\log(-\log u_i),\quad u_i\sim U(0,1) si~=si+gi,gi=log(logui),uiU(0,1)

其中:

  • s i s_i si 是原始相关性分数;
  • g i g_i gi 是 Gumbel 噪声;
  • u i u_i ui 从 0 到 1 的均匀分布中采样;
  • s i ~ \tilde{s_i} si~ 是加入探索噪声后的分数。

然后,通过 Softmax 得到采样概率:

p i = exp ⁡ ( s i ~ / τ ) ∑ j = 1 K exp ⁡ ( s j ~ / τ ) p_i=\frac{\exp(\tilde{s_i}/\tau)}{\sum_{j=1}^{K}\exp(\tilde{s_j}/\tau)} pi=j=1Kexp(sj~/τ)exp(si~/τ)

其中:

  • K K K 是 Retriever 返回的候选数量;
  • τ \tau τ 是温度参数;
  • p i p_i pi 是第 i i i 条记忆被选择的概率。

温度越低:

分布越尖锐
→ 更倾向选择当前最高分记忆
→ 更偏向利用

温度越高:

分布越平滑
→ 更多低排名记忆有机会被选择
→ 更偏向探索

论文默认将温度设置为:

τ = 0.5

十、LLM 引用归因如何形成奖励?

高质量用户级检索标注很难获得。

RMM 的解决方案是让生成 LLM 在一次调用中同时输出:

  1. 最终回答;
  2. 回答使用了哪些记忆的引用信息。

例如,系统提供了三条记忆:

Memory 1:
用户对青霉素过敏。

Memory 2:
用户昨天发烧并持续咳嗽。

Memory 3:
用户喜欢周末徒步。

当前问题是:

我的发烧已经消退,但开始头痛,我应该注意什么?

如果最终回答使用了 Memory 1 和 Memory 2,而没有使用 Memory 3,则奖励为:

Memory 1:+1
Memory 2:+1
Memory 3:-1

论文将:

  • 被引用的记忆视为 Useful;
  • 未被引用的记忆视为 Not Useful。

这种设计的优势在于:

  • 不需要额外人工逐条标注;
  • 回答和引用可以在一次 LLM 调用中生成;
  • 引用与最终回答联合生成,而不是事后再独立判断;
  • 系统可以在实际对话过程中持续积累反馈。

需要注意的是,这里的奖励衡量的是:

该记忆是否被生成模型显式引用。

它并不一定完全等价于这条记忆对回答的真实因果贡献,这一点将在局限性中继续讨论。


十一、使用 REINFORCE 更新 Reranker

RMM 使用 REINFORCE 算法优化 Reranker:

Δ ϕ = η ( R − b ) ∇ ϕ log ⁡ P ( M M ∣ q , M K ; ϕ ) \Delta\phi=\eta(R-b)\nabla_\phi\log P(M_M\mid q,M_K;\phi) Δϕ=η(Rb)ϕlogP(MMq,MK;ϕ)

其中:

  • ϕ \phi ϕ 表示 Reranker 参数;
  • η \eta η 表示学习率;
  • R R R 表示引用奖励,取值为 +1 或 -1;
  • b b b 是用于降低梯度方差的基线值;
  • M K M_K MK 是 Retriever 返回的 K 条候选;
  • M M M_M MM 是 Reranker 选出的 M 条记忆;
  • P ( M M ∣ q , M K ; ϕ ) P(M_M\mid q,M_K;\phi) P(MMq,MK;ϕ) 表示当前策略选择这些记忆的概率。

如果奖励高于基线:

R - b > 0

系统会提高当前记忆选择行为的概率。

如果奖励低于基线:

R - b < 0

系统会降低类似选择在未来出现的概率。

论文使用的主要超参数包括:

参数 数值
Batch Size 4
Top-K 20
Top-M 5
Gumbel Temperature 0.5
正奖励 +1
负奖励 -1
Baseline 0.5
Learning Rate 1 × 10 − 3 1\times10^{-3} 1×103

因此,RMM 的学习对象不是生成 LLM,也不是完整 Retriever,而是中间的轻量级 Reranker。


十二、用一个完整例子理解 RMM

假设一个用户先后进行了三个 Session。

1. Session A

用户:
最近经常下雨,我很难在户外跑步,正在考虑买一台跑步机。

Prospective Reflection 提取:

Topic Summary:
用户因为天气原因难以户外跑步,正在考虑购买跑步机。

Raw Dialogue:
保存对应原始对话。

2. Session B

用户:
附近新开了一家健身房,我觉得去健身房可能比在家买跑步机更合适。

系统检索到 Session A 的主题记忆,并执行 Merge:

用户原本考虑购买跑步机,但在附近新健身房开业后,
更倾向于去健身房锻炼。

3. Session C

用户问:

你觉得我现在还需要买跑步机吗?

Retriever 可能返回:

Memory 1:
用户的跑步机和健身房选择。

Memory 2:
用户喜欢户外徒步。

Memory 3:
用户所在地区经常下雨。

Memory 4:
用户最近在准备面试。

Memory 5:
用户喜欢力量训练。

Reranker 从中选择 Top-M。

LLM 最终回答:

根据你之前的想法,你已经更倾向使用附近的新健身房,
而且那里也有跑步机,所以目前没有必要急着购买家用跑步机。
可以先使用一段时间,再根据到店频率决定。

回答可能引用:

Memory 1:+1
Memory 3:+1
Memory 5:+1
Memory 2:-1
Memory 4:-1

Reranker 根据这些奖励更新参数。

未来面对类似的运动选择问题时,它会更倾向于召回:

  • 用户当前选择状态;
  • 天气条件;
  • 健身房设施和运动习惯;

而减少对求职等无关主题的召回。

这体现了 RMM 的完整闭环:

主题组织
→ 记忆合并
→ 候选召回
→ 动态重排
→ 回答引用
→ 在线学习

十三、实验设置

1. 生成模型

论文主要使用:

Gemini-1.5-Flash

作为生成模型,并在部分实验中比较:

Gemini-1.5-Pro

LLM 参数设置为:

Context Window:128k
Temperature:0.0

2. Retriever

论文使用三种 Dense Retriever:

Contriever

facebook/contriever

通过对比学习训练的通用语义检索模型,也是论文默认 Retriever。

Stella

dunzhang/stella_en_1.5B_v5

基于语言模型构建的大规模文本向量模型。

GTE

Alibaba-NLP/gte-Qwen2-7B-instruct

面向指令式查询训练的向量检索模型。

在没有 Reranker 的实验中:

Top-K = 5

加入 Reranker 后,默认设置为:

Retriever Top-K = 20
Reranker Top-M = 5

也就是先广泛召回 20 条候选,再精选 5 条送入生成模型。


十四、数据集与评测指标

论文使用两个长期个性化对话数据集:

  1. MSC;
  2. LongMemEval。

1. MSC

MSC 是一个多 Session 对话数据集。

论文关注的是:

模型能否利用此前多个 Session 中的历史信息,生成接近人工参考答案的个性化回复。

评测指标包括:

METEOR

主要衡量生成回答与参考回答之间的词汇匹配程度。

BERTScore

通过上下文语义表示衡量生成回答与参考答案的语义相似度。

论文按照已有工作构造实验数据,将前 1000 个 Session 作为聊天历史,其余部分用于评估。

2. LongMemEval

LongMemEval 专门评估长期对话记忆能力。

系统需要从很长的历史中找到特定个人信息,并回答人工设计的问题,例如:

Mary 去年夏天买了什么车?
用户先参加了哪一个活动?
用户当前的偏好和之前相比发生了什么变化?

评测指标包括:

Recall@K

判断系统是否从历史中召回了回答问题所需的 Ground-truth 对话片段。

Accuracy

使用 Gemini-1.5-Pro 作为 Judge,判断模型回答是否与人工 Ground-truth 一致。


十五、对比方法

论文比较了四类方法。

1. No History

不提供任何历史 Session,只依赖当前上下文回答。

它用于衡量:

如果没有长期记忆,模型能够做到什么程度?

2. Long Context

尽可能将历史对话直接放入 LLM 上下文。

如果超出上下文窗口,则截断更早的 Turn。

3. RAG

使用 Contriever、Stella 或 GTE 检索相关 Turn 或 Session,再将结果提供给 LLM。

论文默认使用 Turn 作为 RAG 的检索粒度,因为其整体表现更好。

4. 个性化对话 Agent

包括:

  • MemoryBank;
  • LD-Agent。

MemoryBank 使用对话摘要、轮次内容和遗忘曲线启发式机制。

LD-Agent 使用长期和短期记忆,并通过关键词等方法调节召回。


十六、主要实验结果

论文 Table 1 给出了主要结果,所有分数均为三次运行的平均值。

方法 Retriever MSC METEOR MSC BERTScore LongMemEval Recall@5 LongMemEval Accuracy
No History 5.2 10.6 0.0
Long Context 14.8 31.9 57.4
RAG Contriever 24.8 50.8 54.3 58.8
RAG Stella 26.2 51.6 59.2 61.4
RAG GTE 27.5 52.1 62.4 63.6
MemoryBank 特定检索策略 20.1 40.3 58.6 59.6
LD-Agent 特定检索策略 25.4 51.5 56.8 59.2
RMM Contriever 30.8 55.4 60.4 61.2
RMM Stella 31.9 56.3 65.9 64.8
RMM GTE 33.4 57.1 69.8 70.4
RAG Oracle 100.0 90.2

表源:Tan et al., 2025,Table 1。表中数值均为百分数。

1. 历史信息非常重要

不使用历史时:

MSC METEOR:5.2%
LongMemEval Accuracy:0.0%

尤其是 LongMemEval 中的问题本来就是围绕历史信息设计的,没有历史记录几乎无法回答。

2. 长上下文并不能代替记忆管理

Long Context 在 LongMemEval 上达到:

57.4%

虽然明显优于完全没有历史,但仍然低于 GTE-RAG 的 63.6% 和 GTE-RMM 的 70.4%。

在 MSC 上,Long Context 的 METEOR 只有:

14.8%

远低于 RMM 的 33.4%。

这说明完整历史中包含大量无关内容,模型并不一定能自动定位和利用关键信息。

历史信息更多
≠
有效信息更多

3. RAG 明显优于直接输入长上下文

以 GTE 为例:

MSC METEOR:
14.8% → 27.5%

LongMemEval Accuracy:
57.4% → 63.6%

说明先检索再生成能够减少历史噪声。

同时,不同 Retriever 的结果差异明显:

Contriever < Stella < GTE

这表明基础 Retriever 的质量仍然非常重要。

4. 基于启发式规则的对话 Agent 并未领先强 RAG

MemoryBank 和 LD-Agent 虽然比 Long Context 在部分指标上更好,但整体低于使用强 Retriever 的 RAG。

例如 LongMemEval Accuracy:

MemoryBank:59.6%
LD-Agent:59.2%
GTE-RAG:63.6%

论文认为,固定启发式策略限制了这些方法对复杂检索需求的适应能力。

5. RMM 在所有 Retriever 上都带来稳定提升

使用同一 Retriever 比较:

Contriever

RAG → RMM

METEOR:24.8 → 30.8
BERTScore:50.8 → 55.4
Recall@5:54.3 → 60.4
Accuracy:58.8 → 61.2

Stella

METEOR:26.2 → 31.9
BERTScore:51.6 → 56.3
Recall@5:59.2 → 65.9
Accuracy:61.4 → 64.8

GTE

METEOR:27.5 → 33.4
BERTScore:52.1 → 57.1
Recall@5:62.4 → 69.8
Accuracy:63.6 → 70.4

这说明 RMM 并不是依赖某一个特定 Retriever 才有效,而是能够作为一个通用的记忆组织和重排层。

6. 与 Long Context 相比提升超过 10 个百分点

在 LongMemEval 上:

Long Context:57.4%
GTE-RMM:70.4%

绝对提升为:

13.0 个百分点

7. Oracle 结果说明仍有较大改进空间

Oracle Retriever 能够直接召回 Ground-truth 历史片段,其 Recall 为 100%,最终 Accuracy 达到 90.2%。

而 GTE-RMM 的 Accuracy 为 70.4%。

这说明当前系统仍有两类瓶颈:

检索瓶颈:
没有召回全部正确证据。

生成与推理瓶颈:
即使给出正确证据,模型也不一定能完全答对。

8. 记忆在多少样本上真正改善了回答?

论文还统计了记忆使回答质量提高的样本比例:

MSC:86%
LongMemEval:100%

LongMemEval 本身专门测试历史记忆,因此所有样本都能从记忆中获益。


十七、消融实验

论文 Table 2 分析了 Prospective Reflection、Retrospective Reflection 和 Reranker 的作用。

方法 MSC METEOR MSC BERTScore LongMemEval Recall@5 LongMemEval Accuracy
RAG 24.8 50.8 54.3 58.8
+ PR 28.6 53.3 57.4 59.6
+ RR,直接微调 Retriever 20.3 31.8 34.2 31.0
+ RR,使用 Reranker 27.5 52.2 58.8 60.2
完整 RMM 30.8 55.4 60.4 61.2

表源:Tan et al., 2025,Table 2。实验使用 Contriever 和 Gemini-1.5-Flash。

1. Prospective Reflection 单独有效

加入 PR 后:

METEOR:24.8 → 28.6
Recall@5:54.3 → 57.4

说明主题化组织能够:

  • 合并碎片信息;
  • 降低冗余;
  • 提供语义更完整的检索单位。

2. 直接在线微调 Retriever 会严重下降

如果不用轻量 Reranker,而是直接使用 RL 奖励更新 Retriever:

LongMemEval Accuracy:58.8 → 31.0

性能出现大幅下降。

论文认为,完整 Retriever 需要大量数据才能稳定训练,而个性化长期对话中的在线反馈较少。

在少量数据上直接调整 Retriever,可能造成:

  • 原始语义空间被破坏;
  • 训练不稳定;
  • 灾难性遗忘;
  • 新用户反馈过度影响全局检索能力。

3. 轻量 Reranker 是在线适应的关键

引入独立 Reranker 后:

Recall@5:54.3 → 58.8
Accuracy:58.8 → 60.2

它在保留 Retriever 通用能力的同时,提供了一个较小、较容易在线更新的适应层。

4. 两种反思相互补充

完整 RMM 的结果最好:

PR:
改善记忆的组织形式。

RR:
改善记忆的召回排序。

这说明只优化写入或只优化召回都不够。


十八、引用奖励是否可靠?

RMM 的在线学习依赖一个关键假设:

LLM 输出的引用能够较准确地反映一条记忆是否真正有用。

论文使用 Gemini-1.5-Pro 作为 Judge,在 LongMemEval 上验证引用标签。

类别 Precision Recall F1
Useful Memory 89.4 91.1 90.2
Not Useful Memory 87.2 84.6 85.9
Overall 87.6 85.8 86.7

表源:Tan et al., 2025,Table 3。

对于 Useful Memory:

Precision:89.4%
Recall:91.1%
F1:90.2%

说明引用信号具有较高准确性,可以作为低成本的弱监督奖励。

但它并不是完全可靠的人工真值。

整体 F1 仍然只有:

86.7%

因此,在线学习中仍然会存在一定比例的奖励噪声。


十九、不同生成 LLM 的影响

论文比较了 Gemini-1.5-Flash 和 Gemini-1.5-Pro。

方法 LLM MSC METEOR MSC BERTScore LongMemEval Accuracy
Long Context Gemini-1.5-Flash 14.8 31.9 57.4
Long Context Gemini-1.5-Pro 17.4 36.1 56.6
RMM Gemini-1.5-Flash 30.8 55.4 61.2
RMM Gemini-1.5-Pro 24.6 50.6 58.6

表源:Tan et al., 2025,Table 4。Retriever 为 Contriever。

1. Long Context 下,Pro 在 MSC 上更好

在不使用 RMM 时,Gemini-1.5-Pro 的:

  • METEOR;
  • BERTScore;

都高于 Gemini-1.5-Flash。

说明更强的模型在直接处理长上下文时具有一定优势。

2. RMM 下,Flash 反而表现更好

加入 RMM 后,Gemini-1.5-Flash 在三个指标上都高于 Gemini-1.5-Pro。

论文认为,一个可能原因是:

更强、对齐程度更高的模型,在涉及个人信息的问题上可能更容易拒答或保持谨慎,从而降低个性化问答得分。

这只是作者对实验现象的解释,并不意味着较强模型通常都不适合记忆系统。

它反而说明:

记忆系统效果不仅受 Retriever 影响,也受生成模型的隐私对齐和回答策略影响。


二十、不同记忆粒度的影响

论文在 LongMemEval 的 100 个随机样本上比较了五种粒度:

  • Turn;
  • Session;
  • Mix;
  • PR;
  • Best。

其中:

  • Turn:每个 Turn 作为检索单元;
  • Session:每个完整 Session 作为检索单元;
  • Mix:同时从 Turn 和 Session 池中检索;
  • PR:Prospective Reflection 生成的主题粒度;
  • Best:对每个样本事先选择 Turn 或 Session 中表现更好的一个,是一种 Oracle 设置。

不同记忆粒度的影响

图源:Tan et al., 2025,Figure 4。

粒度 Recall@5 Accuracy
Turn 47 29
Session 69 34
Mix 38 17
PR 78 49
Best Oracle 86 58

1. Session 优于 Turn

Session 包含更完整的上下文,因此 Recall 为:

69% vs 47%

但是,其 Accuracy 只从 29% 提升到 34%,说明更大粒度也会带入更多无关信息。

2. 简单混合两种粒度效果最差

Mix 的结果为:

Recall@5:38%
Accuracy:17%

这说明把 Turn 和 Session 全部放进同一个检索池,并不会自动获得两者优势。

相反,更大的候选空间可能增加噪声,使相似度排序更加困难。

3. Prospective Reflection 接近 Oracle 粒度

PR 达到:

Recall@5:78%
Accuracy:49%

虽然低于 Oracle 的 86% 和 58%,但明显优于固定粒度。

它说明:

根据对话语义动态形成主题,是逼近“每个问题都使用最佳记忆粒度”的一种可实现方案。


二十一、离线监督训练的作用

RMM 主要强调不依赖大量标注数据的在线优化。

但如果系统能够获得少量人工检索标签,也可以先进行离线监督训练,再在线强化学习。

论文使用 GTE Retriever,在 LongMemEval 中随机抽取 100 条作为测试集,其余作为训练和验证数据。

离线监督训练的作用

图源:Tan et al., 2025,Figure 5。

离线训练后,不同粒度的 Recall 分别提升:

Turn:+7
Session:+8
Mix:+11
PR:+7
Best:+5

Accuracy 分别提升:

Turn:+3
Session:+4
Mix:+6
PR:+6
Best:+2

这表明 RMM 并不排斥监督训练。

更合理的部署方式可以是:

离线监督训练:
提供较好的通用冷启动能力。

在线 Retrospective Reflection:
继续适应具体领域和用户。

二十二、Top-K 和 Top-M 的影响

论文比较了两种配置:

配置一:
Retriever Top-K = 20
Reranker Top-M = 5

配置二:
Retriever Top-K = 50
Reranker Top-M = 10
Retriever Recall@5 Accuracy Recall@10 Accuracy
Contriever 60.4 61.2 67.2 66.8
Stella 65.9 64.8 70.6 71.0
GTE 69.8 70.4 74.4 73.8

表源:Tan et al., 2025,Table 5。

在论文测试的范围内,增加候选和最终记忆数量能够提升结果。

以 GTE 为例:

Recall:69.8 → 74.4
Accuracy:70.4 → 73.8

但不能据此推断记忆数量越多越好。

论文只比较了两组配置,而且加入过多记忆仍可能:

  • 增加上下文成本;
  • 引入重复信息;
  • 干扰生成模型;
  • 降低在线延迟。

更准确的结论是:

当基础 Retriever 较强、Reranker 能有效过滤候选时,适当扩大候选池可以减少遗漏。


二十三、LLM-as-a-Judge 和人工评估

论文还在 MSC 上使用 Gemini-1.5-Pro 作为 Judge,判断模型回答是否与 Ground-truth 匹配。

方法 LLM METEOR BERTScore LLM Judge Yes
Long Context Gemini-1.5-Flash 14.8 31.9 25.4
Long Context Gemini-1.5-Pro 17.4 36.1 22.8
RMM Gemini-1.5-Flash 30.8 55.4 69.7
RMM Gemini-1.5-Pro 24.6 50.6 65.4

表源:Tan et al., 2025,Table 6。

使用 Gemini-1.5-Flash 时:

Long Context:25.4%
RMM:69.7%

说明 RMM 的优势并不只体现在词汇重合指标中,在 LLM 语义判断下同样明显。

1. LLM Judge 是否可信?

论文从 MSC 中随机抽取 100 个样本,由两名 NLP 研究人员独立判断。

比较对象 Cohen’s Kappa
Human A vs. Human B 0.82
LLM vs. Human A 0.71
LLM vs. Human B 0.69

表源:Tan et al., 2025,Table 7。

两名人工标注者之间的一致性为:

κ = 0.82

LLM 与两名人工标注者之间分别为:

κ = 0.71
κ = 0.69

说明 LLM Judge 与人工判断有较高一致性,但仍不能完全代替人工评估。


二十四、在线强化学习是否逐渐收敛?

论文附录 Figure 6 展示了随着 RL 训练进行,被 LLM 引用的 Useful Memory 比例变化。

有用性得分的收敛

图源:Tan et al., 2025,Figure 6。

初始阶段,Useful Memory 比例大约为:

0.2

经过约 1000 个训练 Step 后,提高并逐渐稳定在:

0.4

这说明 Reranker 确实逐渐学会将生成模型会使用的记忆排在前面。

但这个结果也反映出一个问题:

即使训练收敛,最终被选择的记忆中也只有约 40% 被显式引用。

因此,当前重排结果仍包含较多未被使用的候选记忆,还有明显优化空间。


二十五、RMM 的优势

1. 同时改进写入与召回

很多记忆方法只优化其中一个环节。

RMM 同时考虑:

如何形成适合未来检索的记忆
+
如何根据实际使用情况持续优化召回

2. 记忆粒度由语义决定

它不再强制使用:

  • 固定 Turn;
  • 固定 Session;
  • 固定长度 Chunk。

而是根据对话中的语义主题形成记忆单元。

3. 同时保存摘要和原始证据

Topic Summary 适合检索,Raw Dialogue 适合保留完整上下文和事实来源。

4. 不需要大量人工检索标签

RMM 使用 LLM 回答时的引用归因作为弱监督信号。

这使系统能够在真实交互中持续收集训练反馈。

5. 只更新轻量 Reranker

基础 Retriever 和生成 LLM 可以保持冻结。

相较于完整微调 Retriever:

  • 成本更低;
  • 更容易部署;
  • 更适合少量用户级反馈;
  • 降低破坏原始能力的风险。

6. 能与多种 Retriever 结合

Contriever、Stella 和 GTE 上都取得了稳定提升,说明其框架具有一定通用性。

7. 支持离线训练与在线适应结合

可以先用少量标注数据完成冷启动,再通过用户交互持续优化。


二十六、RMM 的局限性

1. 在线强化学习仍然存在计算成本

论文明确指出,持续训练 Reranker 会带来额外开销。

在大规模用户场景中,需要考虑:

  • 是否为每个用户维护独立 Reranker;
  • 多久更新一次;
  • 如何批量处理在线反馈;
  • 如何保存和部署大量个性化参数;
  • 在线更新是否影响响应延迟。

2. 当前主要处理文本记忆

RMM 尚未覆盖:

  • 图片;
  • 音频;
  • 视频;
  • 多模态用户行为。

对于语音助手或多模态 Agent,仅保存文本主题可能无法完整表示用户交互。

3. Memory Update 只有 Add 和 Merge

论文中的主题记忆更新主要包含:

Add
Merge

但长期运行还可能需要:

  • Split:一个主题逐渐分裂成不同主题;
  • Delete:删除错误或用户要求忘记的信息;
  • Invalidate:标记旧信息已经失效;
  • Version:保留主题状态变化;
  • Conflict:处理相互矛盾的用户陈述。

如果只进行 Add 和 Merge,记忆摘要可能不断增长,或者把不同时期的冲突信息压缩在一起。

4. 引用不完全等于真实贡献

这一点属于基于方法设计的进一步分析。

一条记忆没有被显式引用,不代表它完全没有作用。它可能:

  • 帮助模型理解背景;
  • 改变回答语气;
  • 辅助模型排除某个选项;
  • 与另一条记忆共同产生作用。

反过来,一条被引用的记忆也可能只是模型事后生成了引用,并不一定真正导致回答变好。

因此:

Citation
≈
低成本的记忆使用代理信号

Citation
≠
严格的因果贡献

5. 二元奖励过于粗糙

当前只有:

引用:+1
未引用:-1

它无法区分:

  • 核心证据;
  • 辅助信息;
  • 部分有用;
  • 重复但正确;
  • 与回答冲突;
  • 被错误引用。

未来可以引入更细粒度奖励,例如:

核心证据:+1.0
辅助证据:+0.5
重复信息:0
无关信息:-0.5
错误或冲突信息:-1.0

6. 主题抽取和合并依赖 LLM

LLM 可能出现:

  • 漏掉重要主题;
  • 错误拆分主题;
  • 将不相关信息合并;
  • 生成过于宽泛的摘要;
  • 丢失时间和条件约束;
  • 错误更新用户状态。

一旦摘要出错,后续 Retriever 和 Reranker 都只能基于错误记忆工作。

7. 个性化在线训练存在数据稀疏问题

一个新用户可能只有少量 Session。

此时,在线 RL 奖励不足以训练稳定的个性化 Reranker。

论文的离线监督实验说明,实际部署可能仍然需要:

通用离线模型
+
领域级适应
+
用户级轻量在线更新

8. 用户信息涉及隐私风险

长期记忆可能保存:

  • 健康信息;
  • 工作经历;
  • 家庭关系;
  • 兴趣偏好;
  • 行程安排;
  • 个人身份信息。

论文提出未来应探索:

  • 数据加密;
  • 差分隐私;
  • 联邦学习;
  • 明确用户授权;
  • 透明的数据使用政策。

此外,实际系统还应该支持:

查看记忆
修改记忆
删除记忆
关闭记忆
设置记忆有效期

二十七、RMM 和 MemRL 的区别

RMM 和刚刚阅读的 MemRL 都使用反馈优化记忆选择,但它们并不是同一种方法。

维度 RMM MemRL
主要场景 长期个性化对话 代码、工具调用和环境任务
记忆类型 用户主题与原始对话 Intent-Experience-Utility 经验
反馈来源 LLM 是否引用记忆 环境任务奖励
学习对象 轻量级 Reranker 参数 每条经验的 Q 值
是否更新参数 更新 Reranker 参数 不更新模型参数
核心目标 让召回结果更符合生成模型需求 选择历史上任务效用更高的经验

可以简单理解为:

RMM:
哪些用户记忆会被当前回答使用?

MemRL:
哪些历史经验能够提高任务成功率?

RMM 的反馈更容易获得,但引用信号相对间接。

MemRL 的环境奖励更接近最终任务结果,但只适用于具有明确成功标准的场景。


二十八、RMM 和 Mem0、Zep、A-Mem 的区别

方法 主要表示 核心关注点
Mem0 自然语言事实 事实如何新增、更新和删除
Zep 双时间知识图谱 实体关系和历史状态如何变化
A-Mem 动态链接的记忆卡片 记忆如何关联和自进化
RMM 主题摘要与原始对话 如何形成合适粒度并在线优化召回

1. RMM 和 Mem0

Mem0 主要围绕事实进行操作:

用户喜欢跑步。
用户现在住在上海。
用户准备参加秋招。

RMM 的记忆更接近完整主题:

用户近期的运动方式选择:
由于天气影响,用户从考虑购买跑步机逐渐转向使用附近健身房。

Mem0 更适合维护原子事实。

RMM 更适合保留一个话题中的上下文和演变过程。

2. RMM 和 Zep

Zep 使用实体、关系和时间字段显式构建图:

用户 --LIVES_IN--> 北京
用户 --LIVES_IN--> 上海

RMM 不构建正式知识图,而是以自然语言主题摘要组织记忆。

因此:

Zep:
结构更明确,关系和时间推理能力更强。

RMM:
结构更轻量,更适合开放式对话主题。

3. RMM 和 A-Mem

A-Mem 强调记忆节点之间自动建立链接,并通过新信息更新已有节点属性。

RMM 则重点解决:

  • 记忆粒度;
  • Retriever 结果的在线适应。

二者可以组合:

RMM 负责形成主题记忆;
A-Mem 负责在主题之间建立关联;
RMM Reranker 再根据使用反馈优化召回。

二十九、我的理解和启发

这篇论文给我的最大启发是:

记忆系统的“反思”不仅可以发生在任务执行失败后,也可以发生在记忆写入前和回答生成后。

1. 记忆粒度不应该完全固定

自己目前的记忆系统主要以一条结构化 Memory 为基本单位。

但真实对话中可能同时存在三种情况:

一句话就能表达完整事实;
多个 Turn 才能形成完整主题;
同一主题跨越多个 Session 持续变化。

因此,可以采用动态记忆粒度:

原子事实:
适合明确、独立的信息。

主题记忆:
适合多个相关事实和上下文。

事件记忆:
适合包含时间演变的完整经历。

2. 保存摘要时必须保留来源

可以将记忆结构改为:

{
  "topic": "秋招与实习选择",
  "summary": "用户计划先集中准备项目和算法,再开始投递实习,并优先考虑北京岗位。",
  "source_message_ids": ["m102", "m118", "m132"],
  "raw_dialogue_path": "memory/dialogue/session_12.json",
  "created_at": "2026-07-17",
  "updated_at": "2026-07-17"
}

这样既能使用 Summary 检索,也能回溯原始对话。

3. 记忆更新不能只有相似度判断

在决定是否 Merge 时,还应该考虑:

  • 是否是同一主题;
  • 新旧信息是否冲突;
  • 是否描述不同时间状态;
  • 是否需要保留历史;
  • 是否应该拆分为子主题。

例如:

旧记忆:
用户倾向去上海实习。

新记忆:
用户决定优先留在北京准备秋招。

不能简单合并成:

用户倾向在上海和北京发展。

更合理的是:

历史状态:
曾考虑上海实习。

当前状态:
现阶段优先留在北京准备秋招。

4. 两阶段召回值得借鉴

可以把现有检索流程设计为:

第一阶段:
BM25 + 向量检索获得 Top-20。

第二阶段:
轻量 Reranker 或 Cross-Encoder 选 Top-5。

第三阶段:
LLM 只读取最终结果。

这样既保留较高召回率,也控制最终上下文噪声。

5. 输出记忆引用可以形成闭环

可以要求 Agent 在内部结构化输出中标记:

{
  "answer": "……",
  "used_memory_ids": ["mem_12", "mem_37"],
  "memory_roles": {
    "mem_12": "core_evidence",
    "mem_37": "supporting_context"
  }
}

任务结束后,根据这些字段更新:

usage_count
citation_count
last_used_at
utility_score

不过,不应该只依赖模型自报引用,还可以结合:

  • 最终任务是否成功;
  • 用户是否接受回答;
  • 引用内容与回答之间的文本蕴含关系;
  • 删除该记忆后回答是否发生明显变化。

6. 可以采用离线和在线两级优化

对于自己的 Agent 项目,可以先利用已有评测数据离线训练通用 Reranker。

上线后再使用:

  • 工具执行结果;
  • 自动测试;
  • 用户反馈;
  • LLM 引用;

进行轻量更新。

即:

离线学习通用相关性
+
在线学习当前用户和任务偏好

7. 不同记忆类型需要不同反馈

事实记忆、经验记忆和主题记忆的价值判断方式不同。

事实记忆

应关注:

是否正确
是否仍然有效
是否与用户有关

经验记忆

应关注:

是否提高任务成功率
是否能迁移到相似任务

主题记忆

应关注:

是否帮助形成连贯、个性化的回答
是否被当前回答使用

因此,可以分别借鉴:

Mem0:
管理事实生命周期。

MemRL:
学习经验任务效用。

RMM:
学习主题记忆的回答效用。

8. RMM 可以和现有方法组合

结合此前阅读的论文,可以形成一套更完整的记忆架构:

GAM:
使用缓冲区和语义边界控制什么时候固化。

RMM Prospective Reflection:
按主题组织固化后的对话。

Mem0:
维护其中的原子事实及其增删改。

Zep:
对关系密集、时间敏感的信息建立时序图。

A-Mem:
建立主题和事实之间的动态链接。

RMM Retrospective Reflection:
根据回答中的实际使用情况优化召回。

MemRL:
根据环境成功率优化程序性经验。

这说明不同 Agent Memory 方法并不一定互相替代,而是可以作用于不同生命周期阶段。


三十、可以如何改造自己的 Agent 项目?

结合 RMM,可以将当前记忆流程改为以下结构。

1. Session 结束时进行主题抽取

完整 Session
→ LLM 识别不同主题
→ 每个主题生成 Summary
→ 绑定原始 Message ID

2. 对每条主题记忆执行更新判断

建议不只支持 Add 和 Merge,而是扩展为:

ADD
MERGE
UPDATE
SPLIT
INVALIDATE
NOOP

3. 建立两阶段召回

Query
→ BM25 + Vector Top-20
→ Reranker Top-5
→ 多跳扩展或相邻记忆补充

4. 生成回答时要求内部引用

回答
+
used_memory_ids
+
每条记忆的作用

5. 综合多个信号更新记忆价值

可以定义:

U = w 1 C + w 2 S + w 3 F + w 4 R U=w_1C+w_2S+w_3F+w_4R U=w1C+w2S+w3F+w4R

其中:

  • C C C:记忆是否被引用;
  • S S S:任务是否成功;
  • F F F:用户反馈;
  • R R R:记忆与回答的相关性;
  • w 1 w_1 w1 w 4 w_4 w4:不同信号权重。

相比单纯的 +1/-1 引用奖励,这种方式能更全面地估计记忆价值。

6. 设置记忆治理机制

长期运行还需要:

低价值记忆压缩;
重复主题合并;
过期记忆失效;
敏感记忆加密;
用户主动删除;
周期性重新构建索引。

三十一、总结

本文提出了 Reflective Memory Management,RMM,用于改善长期个性化对话 Agent 的记忆组织和召回能力。

论文指出,现有方法主要存在两个问题:

  1. 固定的记忆粒度无法匹配对话中的自然语义主题;
  2. 固定 Retriever 无法适应不同领域和用户的检索需求。

为此,RMM 提出了两种相互补充的反思机制。

1. Prospective Reflection

在 Session 结束后,系统:

  • 按语义主题分解对话;
  • 为每个主题生成 Summary;
  • 保留对应 Raw Dialogue;
  • 将新主题直接添加;
  • 将相关主题与已有记忆合并。

它解决的是:

为了未来更容易检索,现在应该如何组织记忆?

2. Retrospective Reflection

在回答生成后,系统:

  • 检查 LLM 引用了哪些召回记忆;
  • 为被引用记忆分配 +1;
  • 为未引用记忆分配 -1;
  • 使用 REINFORCE 在线更新轻量 Reranker。

它解决的是:

刚才召回的记忆哪些真正被使用,未来应该如何调整排序?

实验结果表明:

  • RMM 在 Contriever、Stella 和 GTE 上均能带来稳定提升;
  • GTE-RMM 在 MSC 上达到 33.4% METEOR 和 57.1% BERTScore;
  • 在 LongMemEval 上达到 69.8% Recall@5 和 70.4% Accuracy;
  • 相比 Long Context,LongMemEval Accuracy 提升 13.0 个百分点;
  • 主题粒度明显优于固定 Turn、Session 和简单混合粒度;
  • LLM 引用信号识别 Useful Memory 的 F1 达到 90.2%;
  • 在线 RL 训练使 Useful Memory 比例从约 0.2 提升至约 0.4;
  • 离线监督训练可以与在线优化进一步结合。

RMM 的核心价值不只是增加了一个 Reranker,而是构建了一个记忆闭环:

面向未来组织记忆
→ 面向当前召回记忆
→ 回顾回答中的实际使用
→ 根据反馈继续改进召回

它代表了 Agent Memory 的一个重要发展方向:

记忆系统不应只是被动保存和静态检索历史,而应该根据未来需求组织信息,并根据实际使用结果持续学习。


参考资料

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐