MemoryBank 是一个围绕三个核心支柱构建的统一机制:
(1)作为主要数据存储库的记忆存储(memory storage),
(2)用于上下文相关记忆召回的记忆检索器(memory retriever),
(3)受 Hermann Ebbinghaus 遗忘曲线理论启发的记忆更新器(memory updater),该理论是关于记忆保持与遗忘的经典心理学原理。
记忆存储 Memory Storage
记忆存储作为 MemoryBank 的“仓库”,是一个强大的数据存储库,包含精细组织的信息集合。如图 1 所示,它存储每日对话记录、过去事件的总结以及不断演化的用户人格评估,从而构建出一个动态且多层次的记忆结构。
深度记忆存储 In-Depth Memory Storage
MemoryBank 的存储系统通过以详细的时间顺序记录多轮对话,捕捉 AI 与用户交互的丰富性。每一段对话都带有时间戳进行存储,形成有序的历史叙述。这种详细记录不仅有助于精确的记忆检索,也为后续的记忆更新提供支持,构成完整的对话历史索引。
分层事件总结 Hierarchical Event Summary
MemoryBank 不仅仅停留在细节记录层面,还模拟人类记忆的特性,对信息进行抽象和提炼。它将冗长的对话压缩为每日事件摘要,再进一步整合为全局摘要,从而形成分层记忆结构,使系统能够从宏观角度理解历史交互与关键事件。具体而言,我们将过去的每日对话或事件作为输入,通过如下提示让 LLM 进行总结:
1 | Summarize the events and key information in the content [dialog/events] |
动态人格理解 Dynamic Personality Understanding
MemoryBank 关注用户人格的建模。它在长期交互过程中持续评估并更新用户特征,生成每日人格洞察,并进一步整合为全局人格认知。这种多层结构使 AI 能够学习、适应并针对不同用户特征进行个性化响应,从而提升用户体验。具体而言,我们使用如下提示:
1 | Based on the following dialogue, please summarize the user’s personality traits and emotions.[dialog]” |
1 | The following are the user’s exhibited personality traits and emotions throughout multiple days. Please provide a highly concise and general summary of the user’s personality[daily Personalities]。 |
记忆检索 Memory Retrieval
基于稳健的记忆存储结构,MemoryBank 的记忆检索机制类似于知识检索任务。我们采用类似于 Dense Passage Retrieval(Karpukhin et al., 2020)的双塔密集检索模型。在该框架中,每一轮对话及事件摘要都被视为一个记忆单元 m,并通过编码器模型 E(·) 预编码为向量表示 hm。由此,整个记忆集合 M 被表示为:
M = {h₀ᵐ, h₁ᵐ, … , h|M|ᵐ}。
这些向量通过 FAISS 进行索引,以实现高效检索。同时,当前对话上下文 c 也通过同一编码器 E(·) 编码为 hc,作为查询向量,在 M 中检索最相关的记忆。在实际应用中,编码器 E(·) 可以替换为任意合适模型。
记忆更新机制 Memory Updating Mechanism
在持久化记忆存储与检索机制的基础上,LLM 的记忆能力可以显著增强。然而,在需要更具人类特征记忆行为的场景(如 AI 陪伴、虚拟 IP 等)中,引入记忆更新机制是必要的。例如,对长期未被访问且重要性较低的信息进行遗忘,可以使 AI 更加自然。
该机制受到 Ebbinghaus Forgetting Curve 启发,并遵循以下基本规律:
- 遗忘速率(Rate of Forgetting):记忆保持随时间下降,如果不复习,信息会迅速遗忘。
- 时间与记忆衰减(Time and Memory Decay):遗忘曲线初期陡峭,随后趋缓。
- 间隔效应(Spacing Effect):重复学习可以减缓遗忘,使信息更容易被再次掌握。
(注:虽然该理论还包括过度学习与材料意义性等因素,但本文仅建模上述三条原则。)
遗忘曲线可表示为指数衰减模型:
其中 R 表示记忆保留率,t 为学习后经过的时间,S 为记忆强度(受学习深度与重复次数影响)。为简化模型,我们将 S 设为离散值,并在首次出现时初始化为 1。当某一记忆被再次调用时,S 增加 1,同时 t 重置为 0,从而降低其被遗忘的概率。
需要注意的是,这是一种探索性且高度简化的建模方式。现实中的记忆过程更加复杂,并受到多种因素影响,不同个体与不同信息类型的遗忘曲线也会有所不同。