On Memory Construction and Retrieval for Personalized Conversational Agents
论文阅读:SECOM:面向个性化对话智能体的记忆构建与检索
论文标题:On Memory Construction and Retrieval for Personalized Conversational Agents
作者:Zhuoshi Pan, Qianhui Wu, Huiqiang Jiang, Xufang Luo, Hao Cheng, Dongsheng Li, Yuqing Yang, Chin-Yew Lin, H. Vicky Zhao, Lili Qiu, Jianfeng Gao
发表位置:ICLR 2025 conference paper;arXiv preprint
arXiv 编号:2502.05589
原文链接:https://arxiv.org/abs/2502.05589
主题:长期对话记忆、RAG、个性化对话智能体、对话分段、记忆压缩去噪
核心问题:在长期开放域对话中,如何把历史对话构造成更适合检索和生成的记忆单元,从而让智能体在后续对话中更准确地利用过去信息?
1. 背景:长期对话为什么需要更好的“记忆单元”?
随着大语言模型被用于开放域对话智能体,用户和智能体之间的交互不再只是短轮次、单任务的对话。一个用户可能在多个会话中反复与智能体交流,主题也会不断切换。为了生成连贯、个性化的回答,系统需要记住过去发生的事件、用户偏好以及历史上下文。
已有方法大致有两类:
- 直接保留历史上下文:把所有历史对话或历史摘要拼接进当前上下文。
- 检索增强生成(RAG)式记忆:先从历史对话中构建 memory bank,再根据当前请求检索相关记忆,最后把检索结果作为上下文输入给生成模型。
问题在于,历史对话很长且包含大量与当前问题无关的内容。直接拼接容易引入噪声,也会占用大量上下文窗口;而检索式方法的效果又高度依赖“记忆单元”如何切分。
论文关注的核心问题正是:长期对话历史应该以什么粒度构造成记忆单元?
常见粒度包括:
| 记忆粒度 | 做法 | 主要问题 |
|---|---|---|
| Turn-level | 每一轮用户-助手交互作为一个记忆单元 | 粒度太细,相关信息可能分散在多个 turn 中,检索结果容易碎片化 |
| Session-level | 每个完整会话作为一个记忆单元 | 粒度太粗,一个 session 可能包含多个主题,容易带入无关信息 |
| Summary-based | 把历史对话压缩成摘要后检索 | 摘要过程可能丢失回答当前问题所需的细节 |
| Segment-level | 按主题连贯性把会话切成若干片段 | 目标是在完整性与相关性之间取得平衡 |
论文提出,长期对话天然由一段段主题连贯的 discourse units 组成。因此,比起直接按 turn 或 session 切分,更合理的方式是按照主题边界把会话切成 segment,再以 segment 为单位构建记忆库。

2. 论文的两个观察
论文在提出方法前,先总结了两个关键观察。
2.1 记忆粒度会显著影响检索和回答质量
如果每个 memory unit 太短,例如按单轮对话切分,那么当前问题所需的信息可能分散在多个 turn 中。某些关键 turn 本身可能并不显式包含当前查询中的关键词,于是检索器可能漏掉它们。
如果每个 memory unit 太长,例如按整个 session 切分,那么一个 memory unit 中会混入多个主题。检索器可能把这个 session 判定为相关,但真正输入给生成模型时,里面的大量无关内容会干扰模型理解。
摘要方法看似能压缩信息,但论文指出,摘要会把细节删掉。当当前请求需要某些细节时,只依赖摘要可能不足以回答问题。
因此,论文认为更合适的记忆单元应该满足两个条件:
- 足够完整:能保留一个主题下的连续信息流。
- 足够聚焦:尽量不把其他主题的内容混进来。
segment-level memory 正是为了满足这两个条件。
2.2 Prompt compression 可以作为检索前的去噪机制
第二个观察是:自然语言中存在冗余信息,而这些冗余可能成为检索系统的噪声。
论文使用 LLMLingua-2 对 memory unit 进行压缩,并把这种压缩视为一种 denoising 操作。压缩后的 memory unit 保留更关键的信息,减少冗余表达,从而帮助检索器更准确地区分相关片段与无关片段。

3. SECOM 方法概述
论文提出的方法名为 SECOM,来自两个核心设计:
- SEgmentation:把长期对话切分成主题连贯的 segment;
- COMpression:在检索前对记忆单元做压缩去噪。
整体流程可以概括为三步:
- Memory construction:从历史对话中构建 memory bank。
- Memory retrieval:根据当前用户请求,从 memory bank 中检索相关 memory units。
- Response generation:把检索到的 memory units 按时间顺序拼接为上下文,输入生成模型得到回答。
与 turn-level 或 session-level 方法不同,SECOM 的 memory unit 是一个主题连贯的 segment。与 summary-based 方法不同,SECOM 不把 segment 先摘要成短文本,而是直接保留原始 segment,只在检索前使用压缩模型去除冗余。
4. 对话分段:从 session 到 topic segment
设历史对话由多个 session 组成,每个 session 又包含多个 user-agent interaction turns。SECOM 的目标是把每个 session 切成若干连续 segment。
一个 segment 由连续 turn 构成:
s_k = {t_p, t_{p+1}, ..., t_q}
其中 p 和 q 分别表示该 segment 的起止 turn 索引。相邻 segment 之间不能重叠,也不能遗漏 turn。
4.1 Zero-shot segmentation
开放域对话分段很难获得大量人工标注数据,而且分段边界本身具有一定模糊性。论文因此首先使用 GPT-4 作为 zero-shot conversation segmentation model。
为了让模型更容易理解对话结构,输入会被增强为带有 turn index 和 role identifier 的格式,例如:
Turn j:
[user]: ...
[agent]: ...
模型输出的是每个 segment 的起止 exchange 编号以及 segment 长度。附录中给出了具体 prompt,要求输出 JSONL 格式,并检查是否覆盖所有 exchange、是否有重叠、计数是否准确等。
4.2 带反思的少样本分段
当存在少量带分段标注的数据时,论文进一步使用 reflection 机制优化 segmentation prompt。
具体过程是:
- 先用 zero-shot segmentation model 处理一批带标注数据;
- 根据 WindowDiff 找出错误最严重的 hard examples;
- 让 LLM 对照 ground-truth segmentation annotations 反思自己的错误;
- 更新 segmentation guidance;
- 多轮迭代后得到更符合人类偏好的 segmentation rubric。
论文把这个过程类比为一种 prompt-level 的优化:segmentation guidance 类似 prefix,LLM 通过反思错误来更新这个 prefix。
5. 压缩去噪:在检索前处理 memory bank
SECOM 的另一个核心设计是 compression-based memory denoising。
给定当前用户请求和 memory bank,普通检索流程会直接在原始 memory bank 中检索:
retrieved memories = Retriever(query, MemoryBank)
SECOM 则先对 memory bank 做压缩,再检索:
retrieved memories = Retriever(query, Compress(MemoryBank))
论文中使用 LLMLingua-2 作为压缩函数,并在主实验中采用 75% 的 compression rate。这里的压缩不是为了把历史对话总结成新的 memory,而是为了在检索阶段去掉冗余表达,使检索器更容易匹配关键信息。
这一点与 summary-based memory 不同:summary-based 方法会生成摘要并用摘要作为上下文,而 SECOM 的思想是保留 segment-level 的原始信息结构,同时用压缩降低检索噪声。
6. 实验设置
论文主要在两个长期对话 benchmark 上评估 SECOM:
| 数据集 | 说明 |
|---|---|
| LOCOMO | 长期对话记忆数据集,样本平均约 300 turns、9K tokens |
| Long-MT-Bench+ | 基于 MT-Bench+ 重构而来,用于更长程的多轮对话记忆评估 |
主实验使用 GPT-3.5-Turbo 作为 response generation model,同时也使用 Mistral-7B-Instruct-v0.3 做鲁棒性评估。
检索器方面,论文使用:
- BM25;
- MPNet(multi-qa-mpnet-base-dot-v1)+ FAISS。
评价指标包括:
| 指标 | 作用 |
|---|---|
| GPT4Score | 让 GPT-4-0125 对回答从 0 到 100 打分 |
| BLEU / ROUGE / BERTScore | 常规自动评价指标 |
| Pairwise comparison | 让 GPT-4 比较两个方法生成的回答 |
| Human evaluation | 从 coherence、consistency、memorability、engagingness、humanness 等维度人工评分 |
7. 主实验结果:SECOM 在长期对话 QA 上优于基线
论文比较了 SECOM 与多类基线:
| 方法类别 | 代表方法 |
|---|---|
| 无历史 | Zero History |
| 全历史 | Full History |
| 粒度型记忆 | Turn-Level, Session-Level |
| 摘要型记忆 | SumMem, RecurSum, ConditionMem |
| 其他记忆方法 | MemoChat |
主结果显示,SECOM 在 LOCOMO 和 Long-MT-Bench+ 上整体优于这些基线。下面摘取 Table 1 中部分关键 GPT4Score 结果:
| 方法 | LOCOMO GPT4Score | Long-MT-Bench+ GPT4Score |
|---|---|---|
| Zero History | 24.86 | 49.73 |
| Full History | 54.15 | 63.85 |
| Turn-Level (BM25) | 65.58 | 82.85 |
| Turn-Level (MPNet) | 57.99 | 84.91 |
| Session-Level (BM25) | 63.16 | 81.27 |
| Session-Level (MPNet) | 51.18 | 73.38 |
| MemoChat | 65.10 | 85.14 |
| SECOM (BM25, GPT4-Seg) | 71.57 | 86.67 |
| SECOM (MPNet, GPT4-Seg) | 69.33 | 88.81 |
| SECOM (MPNet, Mistral-7B-Seg) | 66.37 | 86.32 |
| SECOM (MPNet, RoBERTa-Seg) | 61.84 | 81.52 |
几个现象值得注意:
第一,SECOM 在 LOCOMO 上优势尤其明显。LOCOMO 的对话更长,平均包含约 300 turns,因此更能体现 memory construction 和 retrieval 的重要性。
第二,turn-level 和 session-level 方法对检索器非常敏感。例如在 LOCOMO 上,BM25 与 MPNet 的结果差异较大。论文认为,这是因为 turn-level memory 太碎,session-level memory 又太嘈杂,它们都更依赖检索器本身的能力。
第三,即使把 segmentation model 从 GPT-4 换成 Mistral-7B,SECOM 仍然保持相对优势;使用 RoBERTa-scale segmentation model 时,性能有所下降,但仍具有竞争力。这说明方法并不完全绑定于 GPT-4。
8. 粒度消融:segment-level 为什么更合适?
论文进一步比较不同 memory granularity 在不同 context budget 下的表现。实验中,所有方法都使用 compression-based denoising,以便单独观察 memory granularity 的影响。
结果显示,segment-level memory 在不同 context budget 下都稳定优于 turn-level 和 session-level memory。
这一结果与前面的分析一致:
| 粒度 | 检索时的典型问题 | 对生成的影响 |
|---|---|---|
| Turn-level | 相关信息分散,关键 turn 可能被漏检 | 上下文不完整,回答容易缺细节 |
| Session-level | 检索单元过长,包含大量无关主题 | 模型被噪声干扰,回答可能偏离问题 |
| Segment-level | 以主题连贯片段为单位 | 在相关性与完整性之间取得平衡 |

9. 压缩去噪消融:去掉 denoise 会明显下降
Table 2 单独分析 compression-based memory denoising 的作用。实验使用 MPNet retriever,compression rate 为 75%。
| 方法 | LOCOMO GPT4Score | LOCOMO BLEU | LOCOMO Rouge2 | Long-MT-Bench+ GPT4Score | Long-MT-Bench+ BLEU | Long-MT-Bench+ Rouge2 |
|---|---|---|---|---|---|---|
| SECOM | 69.33 | 7.19 | 13.74 | 88.81 | 13.80 | 19.21 |
| SECOM - Denoise | 59.87 | 6.49 | 12.11 | 87.51 | 12.94 | 18.73 |
去掉 denoising 后,LOCOMO 上 GPT4Score 从 69.33 降到 59.87,下降 9.46 分。论文据此认为,压缩去噪并不是附加的小技巧,而是 SECOM 中提升检索系统质量的重要组成部分。
10. 换用 Mistral-7B 作为生成模型
为了验证方法是否只适用于 GPT-3.5-Turbo,论文还使用 Mistral-7B-Instruct-v0.3 作为 response generator,在 Long-MT-Bench+ 上进行实验。
结果显示,SECOM 仍然优于 turn-level、session-level 和 full-history 方法:
| 检索器 | 方法 | GPT4Score | BLEU | Rouge2 | # Tokens |
|---|---|---|---|---|---|
| BM25 | Full History | 78.73 | 10.25 | 14.32 | 19,287 |
| BM25 | Turn-Level | 83.14 | 13.60 | 19.11 | 1,047 |
| BM25 | Session-Level | 81.03 | 12.49 | 17.11 | 4,118 |
| BM25 | SECOM | 89.43 | 15.06 | 21.35 | 906 |
| MPNet | Turn-Level | 85.61 | 12.78 | 19.61 | 909 |
| MPNet | Session-Level | 75.29 | 9.14 | 13.91 | 3,680 |
| MPNet | SECOM | 90.58 | 15.80 | 21.49 | 820 |
论文特别指出,Mistral-7B 具有 32K context window,可以容纳完整历史对话,但 Full History 仍然不如 SECOM。这说明问题不只是上下文窗口够不够长,而是输入给模型的上下文是否相关、完整且少噪声。
11. 分段模型评估
除了端到端 QA,论文还单独评估了 conversation segmentation model。
使用的数据集包括:
- DialSeg711;
- TIAGE;
- SuperDialSeg。
评价指标包括 F1、Pk、WindowDiff 和综合 Score。结果表明,在 zero-shot 设置下,论文的方法在三个数据集上都优于无监督基线;在 transfer learning 设置下,即使只用 100 个 hard examples 通过 LLM reflection 学习 segmentation rubric,也能泛化到目标数据集,并超过使用完整源训练集训练的一些基线。
部分结果如下:
| 设置 | 方法 | DialSeg711 Score | SuperDialSeg Score | TIAGE Score |
|---|---|---|---|---|
| Unsupervised | CSM | 0.660 | 0.458 | 0.509 |
| Unsupervised | Ours (zero-shot) | 0.895 | 0.738 | 0.607 |
| Transfer from TIAGE | RoBERTa | 0.723 | 0.420 | 0.648 |
| Transfer from TIAGE | Ours (w/ reflection) | 0.934 | 0.748 | 0.642 |
| Transfer from SuperDialSeg | RoBERTa | 0.702 | 0.798 | 0.482 |
| Transfer from SuperDialSeg | Ours (w/ reflection) | 0.936 | 0.758 | 0.651 |
这部分实验支撑了 SECOM 的一个基础假设:使用 LLM 对长期对话进行主题分段是可行的,并且通过少量标注数据和 reflection 可以进一步提高分段质量。
12. 相关工作中的定位
论文把相关工作分为三类。
第一类是对话记忆管理。这类方法通常从历史对话中提取用户画像、过去事件或摘要,用来增强后续回答。代表方向包括 MemoryBank、COMEDY、RecurSum、ConditionMem、MemoChat 等。
第二类是RAG 系统中的 chunking granularity。在文档 RAG 中,如何切 chunk 已经被广泛讨论;但论文指出,已有工作主要关注文档切分,而较少关注长期对话中的 conversation chunking。对话具有自然的 turn/session 结构,但直接依赖这些结构不一定适合检索。
第三类是RAG 系统中的去噪。已有研究注意到冗余和噪声会影响检索,但一些方法依赖高质量标注数据或需要 fine-tune retriever。SECOM 使用 prompt compression 作为 plug-and-play 的 memory denoising 方式,不需要调整底层检索器。
13. 论文结论
论文系统分析了长期对话智能体中 memory construction 和 retrieval 的问题,核心结论包括:
- 记忆粒度很重要:turn-level、session-level 和 summary-based memory 都有各自局限。
- segment-level memory 更适合长期对话:它能在信息完整性和相关性之间取得更好的平衡。
- prompt compression 可以作为检索前去噪机制:通过去除冗余表达,提高检索器对相关 memory unit 的识别能力。
- SECOM 在长期对话 benchmark 上优于多类基线:尤其是在 LOCOMO 这类长对话场景中优势明显。
- 更长上下文窗口并不能完全替代记忆构建与检索:即使模型能容纳完整历史,直接输入 full history 仍可能受到无关信息干扰。
整体来看,SECOM 的重点不在于让模型“记住更多”,而在于让系统以更合适的结构保存和检索过去信息:先把长期对话切成主题连贯的 segment,再通过压缩去噪让检索器更容易找到真正相关的内容。
参考
- Zhuoshi Pan et al. On Memory Construction and Retrieval for Personalized Conversational Agents. ICLR 2025 conference paper / arXiv:2502.05589.

浙公网安备 33010602011771号