MemoryBank: Enhancing Large Language Models with Long-Term Memory
论文阅读:MemoryBank——为大语言模型引入长期记忆
论文标题:MemoryBank: Enhancing Large Language Models with Long-Term Memory
作者:Wanjun Zhong, Lianghong Guo, Qiqi Gao, He Ye, Yanlin Wang
发表位置:AAAI 2024(The Thirty-Eighth AAAI Conference on Artificial Intelligence)
arXiv 编号:2305.10250
原文链接:https://arxiv.org/abs/2305.10250
AAAI 论文页:https://ojs.aaai.org/index.php/AAAI/article/view/29946
代码:https://github.com/zhongwanjun/MemoryBank-SiliconFriend
主题:LLM Long-Term Memory、Memory Retrieval、Memory Updating、AI Companion、User Portrait
核心问题:如何在不改变 LLM 基本架构的情况下,为对话模型增加能够长期存储、检索、更新历史信息,并持续形成用户画像的外部长时记忆机制?
1. 论文要解决什么问题?
大型语言模型本身擅长利用当前 Context Window 中的信息进行对话,但对于需要持续数天、数周甚至更长时间的交互场景,仅依赖上下文窗口并不足够。
例如,一个长期陪伴型 AI 可能需要记住:
- 用户几天前提到过喜欢什么书;
- 用户之前遇到过哪些事情;
- 用户长期表现出的兴趣和性格特征;
- 某条信息最近是否经常被提起;
- 哪些很久以前、又很少被重新提及的信息可以逐渐淡化。
如果模型每次对话都像第一次认识用户,就很难形成真正连续的长期交互体验。
论文因此提出 MemoryBank:在 LLM 外部增加一个长期记忆系统,使模型具备四类能力:
- 存储历史对话;
- 从历史中检索与当前问题相关的记忆;
- 随着时间和重复访问动态更新记忆;
- 从长期交互中总结用户画像(User Portrait)。
作者随后将 MemoryBank 集成到一个名为 SiliconFriend 的 AI Companion 中,用长期陪伴和心理支持场景展示这一记忆机制。
2. MemoryBank 整体框架
MemoryBank 并不是一种新的 Transformer 架构,也不是通过训练直接将历史记忆写入模型参数。
它更接近一个位于 LLM 外部的 Memory System(记忆系统)。
论文将其划分为三个核心组件:
| 组件 | 作用 |
|---|---|
| Memory Storage | 保存历史对话、事件摘要和用户画像 |
| Memory Retrieval | 根据当前对话检索相关历史记忆 |
| Memory Updating | 根据时间和记忆被重新访问的次数动态调整记忆 |
整个运行流程可以概括为:
用户长期对话
↓
Memory Storage
├── 原始历史对话
├── Daily Event Summary
├── Global Event Summary
├── Daily Personality
└── Global User Portrait
↓
当前用户输入
↓
Memory Retrieval
↓
Relevant Memory
↓
Relevant Memory
+ Global Event Summary
+ Global User Portrait
+ 当前对话
↓
构造 Memory-Augmented Prompt
↓
LLM
↓
生成回复
与此同时,Memory Updating 会持续调整记忆的保留情况。

【Figure 1(MemoryBank 整体框架)。该图展示 Memory Storage、Memory Retrieval 和 Memory Updating 三个核心模块,以及检索出的 Relevant Memory、Event Summary 和 User Portrait 如何进入 SiliconFriend 的 Meta Prompt。】
这里一个很重要的设计思想是:
MemoryBank 并不要求修改底层 LLM。
因此,无论底层模型是闭源 ChatGPT,还是开源 ChatGLM、BELLE,都可以在外部挂载同一种 MemoryBank。
3. Memory Storage:MemoryBank 如何保存记忆
MemoryBank 首先需要解决的问题是:
历史信息究竟应该以什么形式保存?
作者没有简单地把所有历史对话全部堆进数据库,而是构建了一个包含多个层次的 Memory Storage。
主要包括:
原始对话
↓
Daily Event Summary
↓
Global Event Summary
原始对话
↓
Daily Personality
↓
Global User Portrait
也就是说,MemoryBank 同时保留:
- 细粒度历史;
- 事件级摘要;
- 用户性格级摘要。
3.1 In-Depth Memory Storage:保存完整历史对话
首先,MemoryBank 会保存用户与 AI 的多轮历史交互。
每一条对话都会附带时间戳,形成按照时间排序的历史记录。
例如:
2023-05-01
User: I want to learn Python.
AI: ...
2023-05-03
User: Please write a quicksort program for me.
AI: ...
2023-05-10
User: What kind of code did I ask you to write before?
这些原始对话提供最详细的记忆信息。
它们一方面可以直接参与后续 Retrieval,另一方面也为事件摘要和 Memory Updating 提供基础数据。
4. Hierarchical Event Summary:分层事件摘要
如果长期保存了数月甚至数年的对话,仅仅保存全部原始对话会产生大量信息。
因此作者进一步让 LLM 对历史进行分层总结。
第一层是:
Daily Event Summary
即将一天中的大量对话压缩成当天发生的主要事件。
例如一天可能聊了:
- 学习 Python;
- 推荐一本编程书;
- 编写 quicksort;
- 讨论周末计划。
模型可以把这些内容总结成当天的 Event Summary。
作者使用类似下面的 Prompt:
Summarize the events and key information in the content [dialog/events]
在得到每天的 Event Summary 后,还会进一步进行第二次总结:
Daily Event Summary
↓
Global Event Summary
最终形成一个更高层次的全局历史摘要。
因此 MemoryBank 的事件记忆实际上是一个层次结构:
原始 Conversation
↓
Daily Event Summary
↓
Global Event Summary
原始对话提供细节,而 Global Summary 提供对长期经历的整体概括。
5. Dynamic Personality Understanding:动态用户画像
除了“用户发生过什么”,MemoryBank 还试图记录:
这个用户是什么样的人?
作者将这一部分称为 User Portrait(用户画像)。
与 Event Summary 类似,User Portrait 同样采用分层总结方式。
首先,根据当天对话总结用户当天表现出的:
- Personality Traits;
- Emotion;
- Interest;
- Behaviour Pattern。
论文给出的 Prompt 大致为:
Based on the following dialogue,
please summarize the user's personality traits and emotions.
[dialog]
于是每天会产生一个:
Daily Personality
随后再将多天的 Personality Summary 汇总:
Daily Personality 1
Daily Personality 2
Daily Personality 3
...
↓
Global User Portrait
对应 Prompt 要求模型对多天表现出的 Personality Traits 和 Emotion 进行高度简洁的总体总结。
因此,MemoryBank 同时维护两条长期信息链:
| 信息类型 | 层次 |
|---|---|
| 发生过什么 | Conversation → Daily Event → Global Event |
| 用户是什么样的人 | Conversation → Daily Personality → Global User Portrait |
这样,在生成回复时,模型不仅能够知道:
“这个用户以前做过什么。”
还能够利用:
“这个用户长期表现出了什么兴趣和性格。”
6. Memory Retrieval:如何从长期历史中找回相关记忆
存储长期记忆之后,下一个问题是:
当前用户说一句话时,应该从几个月的历史中拿出哪些内容?
MemoryBank 将这一问题视为标准的信息检索任务。
作者采用了与 DPR(Dense Passage Retrieval)类似的 Dual-Tower Dense Retrieval(双塔稠密检索)。
6.1 什么是一条 Memory Piece?
MemoryBank 中能够被检索的基本单位称为:
Memory Piece(记忆片段)。
论文将:
- 每一轮历史 Conversation;
- Event Summary;
视为 Memory Piece。
假设一共有:
m_1
m_2
m_3
...
m_n
每一条 Memory Piece 都通过 Encoder 转换为向量:
h_m = Encoder(memory)
于是整个 Memory Storage 变成一个向量集合:
M = {
h_m1,
h_m2,
...
h_mn
}
这些向量随后使用 FAISS 建立索引。
6.2 当前对话作为 Query
用户当前的 Conversation Context 同样经过 Encoder:
h_c = Encoder(current_context)
然后使用 h_c 在 FAISS 中搜索相关历史向量。
因此 Retrieval 流程实际上就是:
历史 Memory Piece
↓ Encoder
Memory Embedding
↓
FAISS Index
Current Conversation
↓ Encoder
Query Embedding
↓
Similarity Search
↓
Relevant Memory
论文特别指出,这里的 Encoder 并没有被限定为某个特定模型,可以根据实际应用进行替换。
在 SiliconFriend 的开源实现中:
| 语言 | Embedding Model |
|---|---|
| English | MiniLM |
| Chinese | Text2vec |
具体 Retrieval 由 LangChain 和 FAISS 完成。
从今天常见的 Agent Memory / RAG 视角来看,这部分实际上就是典型的:
Conversation → Embedding → Vector DB → Semantic Retrieval
但 MemoryBank 的重点并不只有 Retrieval,它还进一步加入了长期 Summary、User Portrait 和动态 Memory Updating。
7. Memory Updating:基于遗忘曲线更新记忆
MemoryBank 中比较有辨识度的部分,是作者没有假设:
所有历史记忆都应该永久具有相同的重要程度。
现实中的人类记忆会随着时间逐渐遗忘。
如果某件事情不断被重新提起,其记忆又会得到强化。
因此作者借用了心理学中的:
Ebbinghaus Forgetting Curve(艾宾浩斯遗忘曲线)
来设计 Memory Updating。
7.1 作者采用的三个基本原则
论文重点模拟遗忘曲线中的三个现象。
1. Rate of Forgetting
随着时间增加,记忆保留程度逐渐下降。
刚获得信息之后遗忘速度较快,随后逐渐变慢。
2. Time and Memory Decay
距离一段记忆产生的时间越久,其记忆强度越低。
因此:
旧 + 很久没有再次使用的记忆
更容易被遗忘。
3. Spacing Effect
如果某条记忆不断被重新访问,相当于再次复习这条信息。
这会强化该记忆,使它持续更长时间。
因此:
经常被 Recall
↓
Memory Strength 增加
↓
更不容易忘记
8. MemoryBank 中的遗忘曲线
论文使用一个简化的指数衰减模型:
R = exp(-t / S)
其中:
| 变量 | 含义 |
|---|---|
| R | Memory Retention,记忆保留程度 |
| t | 从最近一次学习或强化以来经过的时间 |
| S | Memory Strength,记忆强度 |
Memory Piece 第一次出现时:
S = 1
如果之后该 Memory 被成功 Recall:
S = S + 1
t = 0
即:
一条记忆每被重新访问一次,就会被强化一次。
因此可以直观理解为:
Memory A
半年没有被提起
S = 1
→ 快速衰减
Memory B
不断被重新提起
S = 5
→ 衰减更慢
这样就形成一种类似人类“越经常想起越不容易忘记”的记忆模式。
8.1 一个重要细节:这是高度简化的模拟
作者明确指出,这只是一个:
exploratory and highly simplified memory updating model
也就是探索性的、高度简化的 Memory Updating 模型。
真实的人类记忆会受到大量因素影响:
- 信息类型;
- 个体差异;
- 学习深度;
- 情绪;
- 重复方式;
- 记忆的重要程度。
MemoryBank 并没有尝试精确建模这些因素。
同时,论文给出了 R = exp(-t / S) 这一保留程度模型以及 Recall 后如何强化 S,但并没有进一步详细说明一个完整的工程级策略,例如:
R < 多少时一定删除?
或者:
是否按照 R 作为概率随机遗忘?
这些更细的 Memory Eviction / Deletion 实现规则并不是论文重点展开的部分。
因此这里更适合把它理解为:
作者利用遗忘曲线为 Memory Piece 引入一个随时间衰减、随 Recall 强化的动态记忆强度。
9. SiliconFriend:将 MemoryBank 用到长期 AI Companion
为了展示 MemoryBank 如何应用到真实 LLM 系统中,作者开发了:
SiliconFriend
它被设计为一个长期 AI Companion,主要承担:
- 长期陪伴;
- 情绪支持;
- 历史记忆;
- 用户理解。
作者在三类基础模型上进行了实现:
| Backbone | 类型 |
|---|---|
| ChatGPT | Closed-source |
| ChatGLM | Open-source |
| BELLE | Open-source |
整个 SiliconFriend 的构建分为两个阶段。
10. 第一阶段:使用心理对话数据训练陪伴能力
MemoryBank 解决的是:
“AI 能不能记住用户?”
但是长期陪伴还涉及另一个问题:
“AI 即使记住了用户,能不能给出合适的情绪支持?”
因此对于 ChatGLM 和 BELLE 两个开源模型,作者额外进行了心理对话数据 Fine-tuning。
训练数据规模约为:
38k psychological dialogues
这些数据来自在线来源,包含不同情绪状态以及相应的对话回复。
作者希望通过这些数据增强模型在以下方面的能力:
- 理解情绪;
- 提供支持;
- 给出更有同理心的回复;
- 应对心理陪伴式对话。
10.1 LoRA 设置
为了降低 Fine-tuning 成本,作者采用 LoRA。
论文中的主要训练配置为:
| 参数 | 设置 |
|---|---|
| Fine-tuning | LoRA |
| LoRA Rank | 16 |
| Epoch | 3 |
| GPU | NVIDIA A100 |
这一阶段只用于:
ChatGLM
BELLE
而没有对闭源 ChatGPT 进行参数训练。
因此需要区分:
Psychological Fine-tuning
和:
MemoryBank
这是两个不同组件。
前者主要提升:
心理陪伴和情绪支持能力。
后者主要提供:
长期记忆和用户画像能力。
11. 第二阶段:接入 MemoryBank
完成基础陪伴能力之后,第二阶段才是将 MemoryBank 接入 SiliconFriend。
用户与 SiliconFriend 的对话会持续写入 Memory Storage。
当前用户发送消息以后:
Current Conversation
↓
Memory Retrieval
↓
Relevant Memories
然后系统还会加入:
Global User Portrait
Global Event Summary
最终得到一个增强后的 Prompt:
Meta Prompt
├── Relevant Memory
├── Event Summary
├── User Portrait
└── Current Conversation
再将这个 Prompt 交给 LLM 生成最终回答。
这意味着真正负责生成自然语言答案的仍然是原来的 LLM。
MemoryBank 所做的是:
在生成之前,为 LLM 找出并组织当前最应该知道的长期历史信息。
12. 一次完整交互如何运行
将前面的组件串起来,可以得到 MemoryBank 的完整工作流程。
假设用户今天问:
Do you remember the book you recommended to me?
系统首先将当前 Query 编码:
Query
↓
Embedding
然后在长期 Memory 中进行 FAISS 搜索:
MemoryBank
↓
Semantic Retrieval
找到几天前的对话:
User:
I want to learn Python.
AI:
I suggest "Automate the Boring Stuff with Python".
同时系统读取:
Global User Portrait
Global Event Summary
最后形成 Prompt:
Relevant Memory:
The user previously asked for Python learning suggestions.
You recommended "Automate the Boring Stuff with Python".
User Portrait:
...
Global Event Summary:
...
Current Query:
Do you remember the book you recommended to me?
LLM 最终回答:
Its name is "Automate the Boring Stuff with Python".
如果这条 Memory 在此次对话中被 Recall,其 Memory Strength 随后还会被强化:
S = S + 1
t = 0
于是这条记忆以后更加不容易被遗忘。
因此 MemoryBank 实际形成的是一个循环:
Store
↓
Retrieve
↓
Use
↓
Reinforce / Decay
↓
Store
13. 实验设置
论文使用了两种实验形式:
- Qualitative Analysis(定性分析)
- Quantitative Analysis(定量分析)
实验主要希望回答三个问题:
- SiliconFriend 能否提供更好的心理陪伴?
- MemoryBank 能否正确 Recall 历史信息?
- User Portrait 能否帮助模型产生个性化回复?
14. Qualitative Analysis:真实用户案例
作者搭建了一个 SiliconFriend 在线系统,并收集真实用户对话进行案例分析。
论文展示了三个方面。
14.1 Psychological Companionship
Figure 2 比较了:
ChatGLM
vs.
SiliconFriend ChatGLM
面对用户关于恋爱关系和情绪状态的咨询时,经过心理对话数据 Fine-tuning 的 SiliconFriend 能够给出更具有情绪支持性质的回复和建议。
这一实验主要用于展示:
Psychological Dialogue Fine-tuning
带来的效果,而不是单纯验证 MemoryBank。
15. Memory Recall:模型是否真的记得以前发生过什么
论文 Figure 3 给出了一个非常直观的案例。
用户之前曾经和 SiliconFriend 讨论:
学习 Python
SiliconFriend 推荐过:
Automate the Boring Stuff with Python
之后用户又要求模型:
写一个 quicksort
几天以后,用户重新提问:
You once recommended a book to me,
what's its name?
SiliconFriend 回答:
Automate the Boring Stuff with Python
用户继续问:
What kind of code did I ask you to write before?
模型能够回忆:
quicksort
作者还测试了一个不存在于历史中的事件:
Did we write the heap sort algorithm together?
模型回答:
No.
因此这组案例同时测试了:
- Positive Recall:回忆真正发生过的事情;
- Negative Recognition:识别实际上没有发生过的事情。
16. Personality Interaction:用户画像是否影响回答
Figure 4 展示两个不同用户:
Linda
Emily
MemoryBank 为两人形成不同 User Portrait。
例如 Linda 被总结为:
- introverted;
- determined;
- ambitious;
- responsible;
- interested in exploring new cultures and hobbies。
当用户询问周末可以做什么活动时,SiliconFriend 会根据这些历史兴趣推荐:
- Cooking Class;
- Museum;
- Art Exhibition;
等更贴合已有用户画像的活动。
作者通过这一案例说明:
User Portrait 并不是单纯存储在数据库里,而会真正进入 Prompt 并影响最终回答。
17. Quantitative Analysis:构造长期对话测试集
为了更系统地测试 Memory Recall,作者又构造了一组模拟长期对话。
实验中包含:
15 个 Virtual Users
10 天对话历史
每个用户都有不同的:
- Name;
- Personality;
- Interested Topics。
这些 User Meta-information 由 ChatGPT 生成。
随后 ChatGPT 根据:
预定义 Topic
+
User Personality
扮演不同用户,与系统生成多天对话。
每天至少包含两个 Topic。
17.1 中英文两套 Memory Storage
作者分别生成:
English Memory
Chinese Memory
随后人工设计:
194 个 Memory Probing Questions
其中:
| Language | Questions |
|---|---|
| English | 97 |
| Chinese | 97 |
| Total | 194 |
这些问题专门用于检查模型是否能够从历史对话中 Recall 正确的信息。
例如某个用户在 5 月 3 日询问:
有什么缓解压力的方法?
AI 曾经回答:
- exercise;
- listening to music;
- reading;
- talking to friends;
- leisure activities。
到 5 月 10 日时再询问:
What good ways did you recommend me to relieve stress?
此时模型需要从七天前的历史 Memory 中找回相关内容。
18. Evaluation Metrics
实验由 Human Annotators 对检索结果和回答进行评分。
共使用四个指标。
| Metric | 含义 |
|---|---|
| Memory Retrieval Accuracy | 是否成功检索到相关 Memory |
| Response Correctness | 最终回答是否正确 |
| Contextual Coherence | 回答是否能自然结合当前 Context 和历史 Memory |
| Model Ranking Score | 三种 SiliconFriend 输出之间的相对人工排名 |
18.1 Memory Retrieval Accuracy
判断相关记忆有没有被成功找出来:
0 = no
1 = yes
18.2 Response Correctness
判断最终回答是否包含正确答案:
0 = wrong
0.5 = partial
1 = correct
18.3 Contextual Coherence
判断模型能否自然地将:
当前对话
+
Retrieved Memory
结合成连贯回答。
评分同样为:
0
0.5
1
18.4 Model Ranking Score
人工同时比较:
SiliconFriend ChatGLM
SiliconFriend BELLE
SiliconFriend ChatGPT
三个模型的输出。
如果排名为 r,则对应 Score:
score = 1 / r
19. 定量实验结果
论文 Table 2 的结果如下。
English
| Model | Retrieval Acc. | Correctness | Coherence | Ranking |
|---|---|---|---|---|
| SiliconFriend ChatGLM | 0.809 | 0.438 | 0.680 | 0.498 |
| SiliconFriend BELLE | 0.814 | 0.479 | 0.582 | 0.517 |
| SiliconFriend ChatGPT | 0.763 | 0.716 | 0.912 | 0.818 |
Chinese
| Model | Retrieval Acc. | Correctness | Coherence | Ranking |
|---|---|---|---|---|
| SiliconFriend ChatGLM | 0.840 | 0.418 | 0.428 | 0.510 |
| SiliconFriend BELLE | 0.856 | 0.603 | 0.562 | 0.565 |
| SiliconFriend ChatGPT | 0.711 | 0.655 | 0.675 | 0.758 |
20. 如何理解这里的实验结果
这里有一个比较值得注意的现象:
Retrieval Accuracy 最高的模型并不是 ChatGPT。
在 English 中:
BELLE Retrieval Acc. = 0.814
ChatGPT Retrieval Acc. = 0.763
在 Chinese 中:
BELLE Retrieval Acc. = 0.856
ChatGPT Retrieval Acc. = 0.711
但到了最终回答:
Correctness
Coherence
Ranking
SiliconFriend ChatGPT 都明显更高。
也就是说:
Memory Retrieval 成功,不等于最终回答一定优秀。
整个系统至少包含两个阶段:
阶段 1:Memory Retrieval
阶段 2:LLM 利用 Retrieved Memory 生成回答
Retrieval 负责把相关资料找出来。
但模型还需要:
- 理解这些资料;
- 判断哪些内容与当前问题真正相关;
- 将历史和当前 Context 融合;
- 生成自然且正确的回答。
论文认为,ChatGPT 在最终指标上的优势可能来源于其基础模型整体能力强于当时使用的 ChatGLM 和 BELLE。
与此同时,不同模型在不同语言上的表现也不同:
- SiliconFriend ChatGPT 和 ChatGLM 在 English 上相对更好;
- BELLE 在 Chinese 上表现更突出。
21. MemoryBank 和普通 RAG 的区别在哪里?
从检索模块来看,MemoryBank 与今天常见的 RAG 确实非常相似:
History
→ Embedding
→ FAISS
→ Retrieval
→ Prompt
但 MemoryBank 不只是简单的历史 RAG。
论文额外设计了两类长期状态。
第一类:
Hierarchical Event Summary
即:
Conversation
→ Daily Summary
→ Global Summary
第二类:
User Portrait
即:
Daily Personality
→ Global Personality
同时还增加:
Memory Updating
让 Memory Piece 随时间发生衰减,并在 Recall 后得到强化。
因此 MemoryBank 实际上同时维护:
事实记忆
+
事件摘要
+
用户画像
+
记忆强度
这也是它与单纯“把历史对话全部放进向量数据库”之间最主要的区别。
22. MemoryBank 本质上是 Harness-Side Memory
从系统结构来看,MemoryBank 的长期记忆能力主要位于 LLM 外部。
基本结构是:
LLM
↑
Memory-Augmented Prompt
↑
Memory Retrieval
↑
External Memory Storage
历史知识并没有通过持续训练写入模型参数。
因此,无论底层使用:
ChatGPT
ChatGLM
BELLE
都可以复用 MemoryBank。
这也是论文强调其通用性的原因。
需要注意的是,SiliconFriend 对 ChatGLM 和 BELLE 额外进行了 Psychological Dialogue Fine-tuning,但这一训练主要服务于心理陪伴能力。
MemoryBank 本身仍然是外部 Memory Mechanism。
23. Related Work 中论文如何定位自己
作者主要将已有工作分为两个方向。
第一类是传统的 Memory-Augmented Neural Network,例如:
- Neural Turing Machine;
- 外部 Memory Matrix;
这些方法尝试让 Neural Network 与额外 Memory 结构交互。
第二类是 Long-Term Conversation 工作。
已有研究已经开始构造跨 Session 的长期对话数据,希望模型能够利用之前 Session 中的信息。
作者认为,对于长期 AI Companion 场景,还需要进一步解决:
- 更长期、更持续的历史信息;
- User Portrait;
- Memory Updating;
- 类似人类遗忘与强化的机制。
MemoryBank 正是围绕这些问题展开。
24. 论文明确指出的局限性
论文没有单独设置一个完整的 Limitations Section。
不过作者在介绍 Memory Updating 时明确承认:
当前基于 Ebbinghaus Forgetting Curve 的设计只是一个探索性的、高度简化的记忆模型。
真实的人类记忆远比:
R = exp(-t / S)
复杂。
不同:
- 用户;
- 信息类型;
- 学习方式;
- 重复频率;
都可能对应完全不同的遗忘行为。
因此,MemoryBank 并没有声称其 Memory Updating 精确模拟了人类认知,而是借用了遗忘曲线中的几个基本原则:
随时间衰减
+
Recall 后强化
构造一种更具有动态性的长期 Memory。
另外,论文的主要定量实验集中于:
10 天历史
15 个虚拟用户
194 个 Probing Questions
用户与长期对话主要通过 ChatGPT Role-play 构造,随后由人工对模型结果进行评价。
因此论文展示的是 MemoryBank 在这一实验设置中的长期 Memory Recall 和 Personalized Conversation 能力。
25. 论文没有展开讨论的部分
论文没有给出一个独立的 Future Work Section,因此不应额外把后续研究方向表述为作者明确提出的未来工作。
此外,一些更细粒度的工程问题在论文中也没有详细展开,例如:
Memory Retention R 如何转化为最终删除策略
具体 Forget Threshold
长期数据库无限增长时的完整 Storage Management
Memory 冲突如何解决
错误 User Portrait 如何回滚
这些并不是本文重点描述的机制。
论文重点关注的是:
证明一种结合 Persistent Storage、Dense Retrieval、Hierarchical Summary、User Portrait 和 Forgetting Curve 的外部长时记忆系统可以增强 LLM 的长期交互能力。
26. 总结
MemoryBank 提出了一套面向 LLM 长期交互场景的外部 Memory Mechanism。
它的核心由三个模块组成:
Memory Storage
Memory Retrieval
Memory Updating
其中 Memory Storage 又不仅仅保存原始对话,而是维护:
Raw Conversation
↓
Daily Event Summary
↓
Global Event Summary
以及:
Daily Personality
↓
Global User Portrait
Memory Retrieval 则使用:
Embedding
+
FAISS
根据当前 Conversation 找回相关 Memory。
最后,Memory Updating 使用简化的 Ebbinghaus Forgetting Curve:
R = exp(-t / S)
让长期没有被使用的 Memory 逐渐衰减,而每次成功 Recall 都会:
S = S + 1
t = 0
强化这条记忆。
作者进一步构建了 SiliconFriend:
Psychological Dialogue Fine-tuning
+
MemoryBank
使其同时具备:
- Psychological Companionship;
- Long-Term Memory Recall;
- User Personality Understanding。
论文在 10 天模拟对话、15 个 Virtual Users 和 194 个 Memory Probing Questions 上进行了定量实验,同时通过真实用户对话案例展示了 Memory Recall 和 User Portrait 对回答的影响。
从整体系统结构上看,MemoryBank 的长期记忆主要存在于 LLM 外部:
External Memory
↓
Retrieval
↓
Memory-Augmented Prompt
↓
LLM
因此它不依赖某一种特定 Backbone,可以同时接入闭源和开源 LLM。
参考
-
Wanjun Zhong, Lianghong Guo, Qiqi Gao, He Ye, Yanlin Wang. MemoryBank: Enhancing Large Language Models with Long-Term Memory. AAAI 2024.
https://arxiv.org/abs/2305.10250 -
AAAI Proceedings:
https://ojs.aaai.org/index.php/AAAI/article/view/29946 -
MemoryBank / SiliconFriend Code:
https://github.com/zhongwanjun/MemoryBank-SiliconFriend -
Karpukhin et al. Dense Passage Retrieval for Open-Domain Question Answering. 2020.
-
Ebbinghaus. Memory: A Contribution to Experimental Psychology.
-
Johnson et al. Billion-scale Similarity Search with GPUs. IEEE Transactions on Big Data, 2019.

浙公网安备 33010602011771号