In Prospect and Retrospect: Reflective Memory Management for Long-term Personalized Dialogue Agents

论文阅读:面向长期个性化对话智能体的反思式记忆管理 RMM

论文标题:In Prospect and Retrospect: Reflective Memory Management for Long-term Personalized Dialogue Agents
作者:Zhen Tan, Jun Yan, I-Hung Hsu, Rujun Han, Zifeng Wang, Long T. Le, Yiwen Song, Yanfei Chen, Hamid Palangi, George Lee, Anand Iyer, Tianlong Chen, Huan Liu, Chen-Yu Lee, Tomas Pfister
发表位置:ACL 2025 Long Papers,Proceedings of the 63rd Annual Meeting of the Association for Computational Linguistics, Volume 1
页码:8416–8439
DOI:10.18653/v1/2025.acl-long.413
原文链接:https://aclanthology.org/2025.acl-long.413/
PDF:https://aclanthology.org/2025.acl-long.413.pdf
主题:长期个性化对话、外部记忆、检索增强生成、记忆管理、在线强化学习
核心问题:长期个性化对话智能体如何在多轮、多会话交互中更好地组织历史记忆,并根据当前问题检索真正有用的用户历史信息?


1. 论文要解决什么问题?

大语言模型在开放域对话中已经表现出较强能力,但它们本身通常是“无状态”的:一次调用结束后,模型不会天然保留用户过去说过什么、偏好是什么、之前发生过什么。对于需要长期个性化的场景,例如客服、虚拟助手、教育平台或健康咨询,这会带来明显限制。

论文用一个医疗对话例子说明这个问题:用户今天说“我现在头疼,烧退了”,如果系统记得用户昨天说过“持续咳嗽和发烧”,以及一周前说过“对青霉素过敏”,就能给出更连续、更个性化的回答。这里真正需要的不是把所有历史都塞进上下文,而是能够在当前问题出现时,从过去大量交互中找到相关历史。

image

现有外部记忆机制已经尝试让 LLM 保存和检索长期历史,但论文指出它们主要有两个问题:

  1. 记忆粒度固定
    很多系统按照 turn、session 或固定时间间隔切分历史。问题在于,对话的语义主题不一定正好落在这些边界上。一个主题可能横跨多个 turn,也可能一个 session 中包含多个主题。固定粒度容易造成记忆碎片化或表示不完整。

  2. 检索器固定
    很多系统使用预训练检索器或固定规则来找历史记忆,但不同用户、不同领域、不同问题对“相关记忆”的要求并不一样。固定检索器难以适应这些变化。若要重新训练个性化检索器,又需要昂贵的标注数据。

针对这两个问题,论文提出 Reflective Memory Management(RMM)。它的核心思想是把“反思”分成两个方向:

  • Prospective Reflection(前瞻式反思):面向未来检索,主动把历史会话整理成更适合检索的主题化记忆。
  • Retrospective Reflection(回顾式反思):面向过去检索结果,根据 LLM 生成回答时实际引用了哪些记忆,在线调整检索排序策略。

这两个机制分别对应“怎么存”和“怎么取”:前者优化记忆组织,后者优化记忆检索。


2. 相关工作背景

论文将相关工作主要放在两个方向下讨论。

2.1 长期对话中的 LLM

长期对话要求模型在多个会话之间维持上下文、人物设定和事实一致性。已有方法大致可以分成两类:

方向 代表思路 局限
改模型结构 改进注意力机制、KV cache、位置编码等 通常需要访问模型内部,对闭源 API 模型不现实
摘要或检索式方法 将长上下文压缩为事件、主题或记忆,再用于生成 记忆粒度和检索方式容易固定化

RMM 属于第二类,也就是外部记忆和检索式方法。但它特别关注两个细节:
一是历史内容应该按照语义主题组织,而不只是按照 turn 或 session;二是检索策略应该能在对话过程中根据反馈动态调整。

2.2 基于记忆的个性化对话智能体

已有个性化对话系统包括 MemoryBank、LD-Agent、Theanine 等。它们通常会保存用户画像、历史摘要、对话片段或时间线信息,用于后续对话。但论文认为,这些方法往往仍然依赖固定粒度和固定检索策略。

例如:

方法 记忆/检索特点 论文指出的对比点
MemoryBank 使用受遗忘曲线启发的记忆更新机制,检索时考虑近因等因素 检索策略偏启发式
LD-Agent 使用长短期记忆库,并通过关键词等策略调节检索 仍依赖固定结构和检索方式
Theanine 使用时间线增强检索,并引入额外 LLM 做 refine 仍未重点解决粒度和在线适应问题
RMM 主题化记忆组织 + 基于引用信号的在线重排 同时处理“存储粒度”和“检索自适应”

3. 问题定义

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

一个用户会和智能体进行多个 session。每个 session 由若干 turn 组成,每个 turn 包含用户问题和智能体回答。智能体拥有一个外部记忆库,用来保存过去会话中的信息。当前会话生成回答时,模型既可以使用当前 session 的上下文,也可以从外部记忆库中检索相关历史。

任务目标是:在当前用户问题出现时,生成既符合当前上下文、又能利用历史个性化信息的回答。

论文强调,这里有两个关键挑战:

  1. 存储侧挑战:系统需要主动识别每个 session 中哪些信息未来可能有用,并以合适形式保存。
  2. 检索侧挑战:系统需要准确找回相关历史信息,因为无关历史会干扰 LLM,降低回答质量。

也就是说,长期记忆不是“存得越多越好”,也不是“上下文越长越好”。真正重要的是:存储时能形成有意义的记忆单元,检索时能把有用的记忆排到前面。


4. RMM 框架总览

RMM 的整体流程可以概括为:

  1. 当前用户提出 query。
  2. 检索器从记忆库中取出 Top-K 条候选记忆。
  3. 轻量级 reranker 对候选记忆重新排序,选出 Top-M 条。
  4. LLM 使用当前 query、当前 session 上下文和 Top-M 记忆生成回答。
  5. LLM 同时给出引用信号,表示哪些记忆在回答中被使用。
  6. 系统把这些引用信号转化为奖励,用强化学习更新 reranker。
  7. 当前 session 结束后,系统用 LLM 提取本次会话中的主题化记忆,并更新记忆库。

论文中的 Algorithm 1 展示了这个流程。RMM 包含四个主要组件:

组件 作用
Memory Bank 存储历史对话记忆,每条记忆由 topic summary 和 raw dialogue 组成
Retriever 根据当前 query 从记忆库中取出 Top-K 候选
Reranker 对候选记忆重新排序,选出更相关的 Top-M
LLM 生成回答,同时提供引用信号,用于更新 reranker

这里的一个关键设计是:RMM 没有直接微调整个检索器,而是在检索器后面加入一个轻量级 reranker。这样可以保留通用检索器的能力,同时用在线反馈逐步适应具体对话场景。


5. Prospective Reflection:面向未来检索的主题化记忆组织

Prospective Reflection 解决的是“怎么存”的问题。

传统记忆管理常用固定边界:一个 turn 一条记忆,或者一个 session 一条记忆。但对话中的语义主题并不一定和这些边界一致。例如,一个用户可能在一个 session 中同时谈到运动、饮食、旅行计划;也可能一个关于健康状况的主题横跨多个 session。固定边界会导致相关信息被拆散,或者无关信息被塞在一起。

RMM 因此使用 topic-based memory organization。论文中“topic”指一个语义连贯的讨论单元,它可以跨越一个或多个 turn。每个 topic 关联到相应的原始对话片段。

image

Prospective Reflection 在每个 session 结束时执行,包含两个步骤。

5.1 Memory Extraction:从会话中抽取主题化记忆

系统用 LLM 从完整 session 中抽取若干条记忆。每条记忆通常包含:

  • topic summary:对该主题的简短摘要;
  • raw dialogue:与该主题对应的原始对话片段或 turn 引用。

例如,一个 session 中可能被抽取出:

主题摘要 对应内容
用户喜欢跑步 对话中关于跑步习惯的片段
用户对鸡蛋过敏 对话中提到过敏信息的片段
用户正在考虑购买跑步机 对话中讨论家庭健身设备的片段

这种方式的优势是:记忆不再严格绑定 turn 或 session,而是绑定语义主题。

5.2 Memory Update:将新记忆并入记忆库

对于每条新抽取的主题记忆,系统先从已有记忆库中检索 Top-K 条语义相似记忆,然后由 LLM 判断这条新记忆应该如何处理:

操作 条件 结果
Add 新记忆和已有记忆没有明显相关性 直接加入记忆库
Merge 新记忆和已有记忆讨论同一主题,或更新了旧信息 合并为一条更新后的记忆

例如,如果旧记忆是“用户喜欢 hiking”,新记忆是“用户喜欢 running”,系统可以将它们合并成“用户喜欢 hiking and running”。如果新记忆是“用户对鸡蛋过敏”,而记忆库中没有相关信息,则直接新增。

通过这个机制,记忆库逐步形成围绕主题组织的长期用户知识,而不是简单堆积历史片段。


6. Retrospective Reflection:基于 LLM 归因信号的检索优化

Retrospective Reflection 解决的是“怎么取”的问题。

即使记忆库组织得更好,检索器仍可能取回一些语义相近但实际无用的内容。论文没有选择直接微调检索器,而是在检索器后面加一个轻量级 reranker。检索器先召回 Top-K,reranker 再选出 Top-M 条真正给 LLM 使用。

image

6.1 Reranker 设计

设当前 query 的 embedding 为 q,第 i 条候选记忆的 embedding 为 m_i。reranker 首先通过带残差连接的线性层调整 query 和 memory 表示:

q' = q + W_q q
m'_i = m_i + W_m m_i

然后计算相关性分数:

s_i = q'^T m'_i

为了让排序过程可以用于强化学习更新,论文使用 Gumbel trick 对离散记忆选择进行随机采样。每条记忆的分数加入 Gumbel noise:

s~_i = s_i + g_i
g_i = -log(-log(u_i)),  u_i ~ Uniform(0, 1)

随后用 softmax 得到采样概率。温度参数 τ 控制随机性:较低的 τ 更接近确定性选择,较高的 τ 鼓励探索。

6.2 用 LLM 引用作为奖励信号

个性化检索很难获得大量人工标注。RMM 的做法是让 LLM 在生成回答时同时给出 citation,也就是标注回答中使用了哪些检索到的记忆。

论文将 citation 转化为二值奖励:

情况 奖励
记忆被最终回答引用 +1,Useful
记忆没有被最终回答引用 -1,Not Useful

这个设计的含义是:如果某条记忆真的被 LLM 用来生成回答,那么它就应当在未来类似 query 中被排得更靠前;如果某条记忆虽然被召回但没有用上,则 reranker 应降低它在类似情境下的优先级。

6.3 用 REINFORCE 更新 reranker

论文使用 REINFORCE 算法更新 reranker。更新公式为:

Δφ = η · (R - b) · ∇_φ log P(M_M | q, M_K; φ)

其中:

符号 含义
φ reranker 参数
R citation 得到的奖励,取 +1 或 -1
b baseline 超参数
η 学习率
M_K retriever 召回的 Top-K 记忆
M_M reranker 选出的 Top-M 记忆

这个过程使系统能够在没有人工标注的情况下,根据 LLM 自身的“使用痕迹”在线调整记忆排序。


7. 实验设置

论文在两个公开长期个性化对话数据集上实验:

数据集 任务关注点 指标
MSC 生成回答是否接近人工 ground truth METEOR、BERTScore
LongMemEval 是否能检索相关历史,并正确回答问题 Recall@K、Accuracy

生成器主要使用 Gemini-1.5-Flash,并在后续分析中比较 Gemini-1.5-Pro。检索器包括:

检索器 说明
Contriever 基于对比学习的 dense retriever
Stella 基于语言模型的大规模 embedding retriever
GTE 面向 instruction-following query 的 retriever

默认设置中,Contriever 作为默认检索器。没有 reranker 时 Top-K 为 5;有 reranker 时默认 Top-K 为 20,Top-M 为 5。

比较方法包括:

方法 说明
No History 不使用历史会话
Long Context 尽量把历史放入上下文窗口,旧内容被截断
RAG 检索相关 turn 或 session 后拼接给 LLM
MemoryBank 使用特定记忆更新与检索机制
LD-Agent 使用长短期记忆和关键词等检索调节策略
RMM 本文方法
RAG Oracle 在 LongMemEval 上使用人工标注的 oracle retrieval

8. 主要实验结果

论文的主结果如下。

Method Retriever MSC METEOR ↑ MSC BERT ↑ LongMemEval Recall@5 ↑ LongMemEval Acc. ↑
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 Specific 20.1 40.3 58.6 59.6
LD-Agent Specific 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 Oracle - - 100.0 90.2

从结果看,论文得到几个结论。

8.1 历史信息很重要

No History 在 MSC 上 METEOR 只有 5.2,在 LongMemEval 上 Accuracy 为 0.0。这说明长期个性化任务确实依赖历史上下文。

8.2 长上下文不等于有效记忆

Long Context 比 No History 好,但表现仍有限。论文认为,长上下文方法会受到上下文窗口和噪声历史的影响。把大量历史直接塞进去,并不能保证模型找到真正相关的信息。

8.3 RAG 强于直接长上下文,但依赖检索器

RAG 通过只引入相关历史,普遍强于 Long Context。不同检索器下结果也有差异,例如 GTE 版本 RAG 在 LongMemEval 上 Recall@5 达到 62.4,Accuracy 达到 63.6,优于 Contriever 和 Stella 版本。这说明检索器质量对长期记忆系统很关键。

8.4 RMM 在多个指标上最好

RMM 在三种检索器下都优于对应 RAG。使用 GTE 时,RMM 在 MSC 上达到 33.4 METEOR、57.1 BERTScore,在 LongMemEval 上达到 69.8 Recall@5、70.4 Accuracy,是主表中非 oracle 设置下最好的结果。

论文还指出,在 MSC 中,记忆机制改善了 86% 的回答;在 LongMemEval 中,由于问题本身刻意测试历史召回,记忆对回答质量的改善覆盖 100% 的样例。


9. 消融实验

论文进一步分析 RMM 中各组件的贡献。消融实验使用 Contriever 和 Gemini-1.5-Flash。

Variant MSC METEOR MSC BERT LongMemEval Recall@5 LongMemEval Acc.
RAG 24.8 50.8 54.3 58.8
+ PR 28.6 53.3 57.4 59.6
+ RR (W/O reranker) 20.3 31.8 34.2 31.0
+ RR 27.5 52.2 58.8 60.2
RMM 30.8 55.4 60.4 61.2

这里的 PR 指 Prospective Reflection,RR 指 Retrospective Reflection。

论文的分析包括:

  1. 加入 PR 后性能提升
    主题化记忆组织能够减少冗余,提高检索相关性。

  2. 没有 reranker 时直接用 RR 效果很差
    + RR (W/O reranker) 结果明显下降。论文解释说,直接用 RL 奖励更新检索器需要大量训练数据,否则可能造成灾难性遗忘等问题。

  3. RR 与 reranker 结合后有效
    加入 reranker 后,RR 可以更好地调整检索排序,而不是破坏底层 retriever。

  4. 完整 RMM 最好
    PR、RR 和 reranker 同时使用时,MSC METEOR 达到 30.8,LongMemEval Recall@5 达到 60.4,是消融表中最好的结果。


10. Citation Scores 的有效性验证

RMM 把 LLM 生成回答时的 citation 用作奖励信号。为了验证这种信号是否可靠,论文在 LongMemEval 上用 Gemini-1.5-Pro 作为 judge,判断被引用记忆是否确实有用。

Metric 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

结果显示,citation-based scoring 在识别有用记忆方面具有较高 precision、recall 和 F1。论文据此支持使用 LLM citation 作为在线奖励信号。


11. 不同 LLM 的影响

论文比较了 Gemini-1.5-Flash 和 Gemini-1.5-Pro 在 Long Context 与 RMM 设置下的表现。

Method LLM MSC METEOR MSC BERT LongMemEval Acc.
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

在 Long Context 下,Gemini-1.5-Pro 在 MSC 上略好于 Flash;但在 RMM 下,Gemini-1.5-Flash 反而优于 Pro。论文给出的解释是,较强模型可能更倾向于在涉及个人信息时拒答或保守回答,这可能与更强的对齐和隐私保护有关。


12. 记忆粒度分析

论文专门比较了不同检索粒度的效果,包括:

粒度 含义
turn 按单轮对话检索
session 按完整会话检索
mix 从 turn 和 session 混合池中检索
PR 使用 Prospective Reflection 形成的主题化粒度
best oracle 设置,为每个样例选择 turn 或 session 中更好的粒度

image

论文结果显示,session 粒度通常比 turn 粒度好,因为 session 包含更丰富上下文;但混合 turn 和 session 反而可能因为搜索空间更大、噪声更多而表现较差。PR 得到的主题化粒度能够接近 best oracle granularity,说明动态主题化组织比固定粒度更适合长期记忆检索。


13. 离线监督训练与 Top-K/Top-M 分析

论文还分析了两个扩展问题。

13.1 有少量标注数据时,离线预训练是否有帮助?

在 LongMemEval 上,论文随机选取 100 个样本作为测试集,其余作为训练和验证集,对 GTE retriever 做监督式对比学习预训练。结果显示,离线预训练可以在多个粒度设置下提高 Recall 和 Accuracy,为后续在线 RL 微调提供更好的初始检索能力。

image

13.2 增大 Top-K 和 Top-M 是否有帮助?

论文比较了 Top-K=20、Top-M=5 与 Top-K=50、Top-M=10 的结果。

Retriever Recall@5 Acc. Recall@10 Acc.
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

结果显示,检索和重排更多候选记忆可以进一步提升 LongMemEval 上的检索和问答表现。


14. MSC 的 LLM-as-a-Judge 结果与人工评估

除了 METEOR 和 BERTScore,论文还在 MSC 上加入了 LLM-as-a-judge 评估,使用 Gemini-1.5-Pro 判断生成回答是否匹配 ground truth。

Method LLM METEOR BERT LLM-as-a-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

这个结果同样显示 RMM 优于 Long Context。

论文还对 100 个随机 MSC 样本进行了人工评估,并报告 Cohen’s Kappa:

Pair Cohen’s Kappa Interpretation
Human A vs. Human B 0.82 Substantial agreement
LLM vs. Human A 0.71 Substantial agreement
LLM vs. Human B 0.69 Substantial agreement

这部分用于说明 LLM judge 与人工判断之间具有较高一致性。


15. 案例分析

论文附录中给出了一些案例,用来说明 RMM 如何利用长期记忆。

一个案例是用户在不同 session 中关于跑步机和健身房的决策发生变化。早期会话中,用户考虑购买跑步机;后续会话中,用户又认为使用健身房跑步机已经足够。没有记忆管理时,模型可能仍基于旧状态回答,假设用户还在犹豫是否购买跑步机。RMM 则能够根据更新后的历史记忆生成更符合当前状态的回答。

另一个案例是 LongMemEval 中的事件时间顺序问题。用户曾提到参加过 Effective Time Management workshop,也提到两个月前参加过 Data Analysis using Python webinar。问题是“哪个事件先发生?”正确回答需要把“two months ago”与对应事件关联起来。RMM 能够找回相关时间信息并回答 Python webinar 先发生,而 Long Context 方法则给出了不确定回答。

这些案例对应论文主线:长期个性化对话不仅要记住事实,还要能处理事实更新、事件顺序和上下文依赖。


16. 局限性与未来工作

论文在 Limitations 中指出 RMM 仍有几个限制。

限制 说明
强化学习 reranking 有计算开销 对大规模数据或实时应用可能较昂贵
当前主要处理文本数据 对包含图像、音频、视频的多模态对话支持不足
记忆更新机制仍需优化 长期用户交互不断变化时,需要更高效地维护记忆

对应的未来方向包括:

  1. 探索更高效的强化学习方法和轻量级 memory reranking 策略;
  2. 将 RMM 扩展到多模态对话系统;
  3. 研究隐私保护技术,使系统更安全地部署到真实个性化对话场景。

论文的 Ethical Statement 还强调,长期个性化对话系统会处理历史会话,其中可能包含敏感或隐私信息。因此部署时应考虑加密、差分隐私、联邦学习、透明的数据使用政策、用户同意机制,以及减少检索和生成中的偏见。


17. 总结

这篇论文提出的 RMM 可以看作一个围绕长期记忆的双向反思框架:

反思方向 解决问题 方法
Prospective Reflection 未来怎么更好检索 将 session 结束后的历史整理成主题化记忆,并进行 add 或 merge
Retrospective Reflection 过去检索得好不好 根据 LLM 回答中的 citation 信号,用 RL 更新 reranker

它针对长期个性化对话中的两个核心痛点:固定记忆粒度和固定检索机制。实验表明,在 MSC 和 LongMemEval 两个数据集上,RMM 在生成质量、检索召回和问答准确率上均优于 Long Context、RAG、MemoryBank、LD-Agent 等基线。

论文的主要启示是:长期记忆系统的关键不只是扩大上下文窗口,也不是简单保存所有历史,而是要让记忆以更符合语义主题的方式被组织,并让检索过程能够根据生成阶段的实际使用情况持续调整。RMM 正是在“存储组织”和“检索优化”两个层面同时做了设计,因此能在长期个性化对话任务中取得更好的效果。


参考

posted @ 2026-06-08 11:39  YourF4u1t  阅读(46)  评论(0)    收藏  举报