
中山大学提出 MemoryBank,用「遗忘曲线」让大模型拥有长期记忆
本文来自中山大学王延林团队,合作者包括哈尔滨工业大学和瑞典 KTH 皇家理工学院的研究者,论文被 AAAI 2024 接收。
该团队提出了 MemoryBank——一种面向大语言模型(LLM)的长期记忆机制。核心思路是将对话历史、事件摘要和用户画像分层存储,配合基于 Ebbinghaus 遗忘曲线(Forgetting Curve)的记忆更新策略,让 AI 能够像人一样记住重要的事、淡忘不重要的事。在此基础上,研究者开发了 AI 陪伴聊天机器人 SiliconFriend,用 38k 条心理对话数据微调后,可以提供共情式回应并逐步理解用户性格。
大模型的「失忆症」:AI 为什么记不住昨天聊了什么
LLM 的对话能力已经很能打了,但有一个短板始终没解决——没有长期记忆。
你周一告诉 ChatGPT 自己正在学 Python,周三再问它推荐什么练习项目,它大概率一脸茫然。这不是推理能力不行,而是架构上的根本缺陷:每次对话都是全新的,模型没办法把之前的交互留存下来。闲聊时无所谓,但在个人助手、心理咨询、秘书任务这类需要持续交互的场景中,没有记忆意味着 AI 永远无法真正「认识」你。
更深层的问题是,人类的记忆不是简单的存档与读取。我们会遗忘,会通过回忆强化某些记忆,会根据长期交互形成对一个人的整体判断。现有的长期对话研究大多停留在检索历史文本块的层面,既缺乏拟人化的记忆更新机制,也做不到动态构建用户画像。
针对这一难题,中山大学团队提出了 MemoryBank。
MemoryBank 整体架构:三层存储 + 遗忘驱动更新
MemoryBank 围绕三个核心模块构建:记忆存储(Memory Storage)、记忆检索(Memory Retrieval)和记忆更新(Memory Updating)。三者协同工作,形成一个完整的记忆管理闭环。

记忆存储:不只是存对话,还要做摘要和画像
MemoryBank 的存储层做了三件事。
记录每日多轮对话,附带时间戳,形成按时间排序的完整对话历史。
对对话内容做层级摘要。先把每天的对话压缩为事件摘要(Daily Event Summary),再把多天的摘要进一步合成为全局摘要(Global Summary)。这种结构类似人类的记忆层级——你能记住昨晚大概聊了什么,但不一定记得每句话的原文。
持续更新用户画像。根据每日对话推断用户的性格特征和情绪状态,聚合成全局画像(Global Personality)。这让 AI 不只是记住「你说了什么」,还能理解「你是什么样的人」。
换句话说,MemoryBank 不是在建一个聊天记录数据库,而是在构建一个对用户的动态理解模型。
记忆检索:双塔密集检索 + FAISS 向量索引
检索环节采用了类似 Dense Passage Retrieval(DPR)的双塔密集检索架构。每一段对话和事件摘要被编码为向量,用 FAISS 建立索引。当前对话上下文编码后作为 query,在索引中搜索最相关的记忆片段。
实际部署中,英文用 MiniLM 做嵌入,中文用 Text2vec,通过 LangChain 实现端到端检索。检索到的相关记忆、全局用户画像和全局事件摘要一起拼入 prompt,供 LLM 生成回应。
记忆更新:Ebbinghaus 遗忘曲线的简化建模
这是 MemoryBank 最有意思的设计。
研究者从心理学中的 Ebbinghaus 遗忘曲线理论获得灵感。该理论描述了一个基本规律:记忆保留率随时间指数衰减,但通过复习可以重置遗忘曲线,让记忆更持久。MemoryBank 用一个指数衰减模型来量化这个过程:
其中 是记忆保留率, 是距离上次回忆经过的时间, 是记忆强度。 初始化为 1,每当一条记忆在对话中被「回忆」到, 加 1 同时 归零。这意味着频繁被提及的记忆留存更久,长期不被触碰的记忆逐渐淡忘。
这是一种高度简化的建模。真实的记忆过程远比一个指数衰减公式复杂——遗忘曲线因人而异、因信息类型而异。但作为一个探索性工作,它提供了一个清晰且可操作的框架。
SiliconFriend:用 38k 条心理对话训练的 AI 伴侣
为了验证 MemoryBank 的实际效果,研究团队开发了 SiliconFriend——一个 AI 陪伴聊天机器人。开发分两个阶段。
第一阶段是参数高效微调。研究者收集了 38k 条心理对话数据(来自多个在线平台),用 LoRA 方法对 ChatGLM 和 BELLE 进行微调。LoRA rank 设为 128,在 A100 GPU 上训练 3 个 epoch。这一步让模型学会识别情绪线索、提供有共情力的情感支持。注意,微调只针对开源模型,ChatGPT 版本直接跳过了这一步。
第二阶段是将 MemoryBank 集成到模型中。三种底座模型(ChatGPT、ChatGLM 6.2B、BELLE 7B)接入相同的记忆机制,体现了 MemoryBank 对不同 LLM 的通用性。SiliconFriend 还支持中英双语,便于在两种语言环境下对比验证。

实验结果:ChatGPT 底座全面领先,检索准确率超 80%
评测设计
定量实验的设计挺有心思。研究者用 ChatGPT 扮演 15 个性格各异的虚拟用户,生成长达 10 天的对话历史,覆盖 450 个话题。然后人工编写了 194 个探测问题(英文 97 个,中文 97 个),用来测试模型能否准确回忆历史对话并给出恰当回应。
评测从四个维度打分:检索准确率(Retrieval Accuracy)衡量相关记忆是否被成功检索到;回答正确性(Correctness)衡量回应是否包含正确答案;上下文连贯性(Coherence)衡量回应的自然程度;模型排名(Ranking Score)对三个变体做相对排序。
定量结果
整体来看,SiliconFriend 在所有指标上表现最好。英文测试集上,回答正确性达到 0.716,上下文连贯性高达 0.912——说明它不只是找对了记忆,还能把这些信息组织成流畅自然的回应。
开源模型在检索环节不弱。SiliconFriend 的中文检索准确率达到 0.856,甚至超过 ChatGPT 版本的 0.711。ChatGLM 的英文检索准确率也有 0.809。这说明 MemoryBank 的记忆机制本身是有效的,不依赖特定模型底座。
但在回答正确性和连贯性上,开源模型跟 ChatGPT 版本差距明显。SiliconFriend 的英文回答正确性只有 0.438,不到 ChatGPT 版本的三分之二。这个差距主要归因于基座模型本身的推理和生成能力。
语言维度上,ChatGLM 和 ChatGPT 在英文上表现更好,BELLE 在中文上更优,这与各模型的训练数据分布一致。
| 模型 | 语言 | 检索准确率 | 正确性 | 连贯性 | 排名分数 |
|---|---|---|---|---|---|
| SiliconFriend | 英文 | 0.809 | 0.438 | 0.680 | 0.498 |
| SiliconFriend | 英文 | 0.814 | 0.479 | 0.582 | 0.517 |
| SiliconFriend | 英文 | 0.763 | 0.716 | 0.912 | 0.818 |
| SiliconFriend | 中文 | 0.840 | 0.418 | 0.428 | 0.510 |
| SiliconFriend | 中文 | 0.856 | 0.603 | 0.562 | 0.565 |
| SiliconFriend | 中文 | 0.711 | 0.655 | 0.675 | 0.758 |
定性分析
除了定量评测,研究者还收集了真实用户的对话做定性分析。三个核心发现:
心理陪伴能力。当用户表达情绪困扰时,SiliconFriend 能给出带共情力的回应并提供具体建议,而基座模型往往只能给出泛泛的安慰。
记忆回溯能力。用户几天前讨论过编程学习建议,后续提问时 SiliconFriend 能准确回忆推荐的书目和算法,甚至能正确判断哪些内容之前没聊过。
个性化交互。面对不同性格的用户,SiliconFriend 能根据用户画像推荐符合其兴趣的活动。

总结
MemoryBank 的贡献可以概括为三点。
提出了一种面向 LLM 的长期记忆机制,支持分层存储、密集检索和基于遗忘曲线的动态更新,同时能持续构建用户画像。
通过 SiliconFriend 展示了实际应用——一个用心理对话数据微调的 AI 伴侣,能回忆历史交互、理解用户性格、提供共情式陪伴。
在三种不同模型底座和两种语言上验证了方法的通用性,开源模型在检索环节的表现证明 MemoryBank 不依赖特定 LLM。
当然,这项工作有明显局限。遗忘曲线的建模非常简化,真实的记忆过程远比指数衰减复杂。评测依赖 ChatGPT 模拟用户,跟真实用户行为存在差距。但作为一个早期探索,MemoryBank 提出了一个清晰的框架,也指向了一个重要方向:让 AI 的记忆更像人类——不只是存得更多,还要学会遗忘。
未来,如何在更复杂的真实交互场景中验证这种记忆机制,以及如何将长期记忆扩展到多模态信息,都是值得深入探索的方向。