专题解读 | 大语言模型中的记忆设计
大语言模型中的记忆设计
前言
提到大模型智能体,就绕不开Wang等人[1]提出的那个经典框架:分析模块、记忆模块、规划模块、动作模块——这四个组件缺一不可(如图1所示)。而在这四个模块中,记忆模块扮演的角色尤其特殊。它不仅仅是用来存储环境信息的仓库,更重要的是,它能通过分析这些信息,帮智能体理解周围环境、适应变化。说白了,记忆模块就是让智能体从过去的经验中学习,并基于这些历史数据去预测和规划未来行动的关键机制。事实上,记忆模块就是那座连接“感知”与“决策”的桥梁——这比喻一点不夸张。

图1:基于大语言模型的自主智能体架构设计的统一框架
再往深了说,记忆模块还承载着智能体的自我进化功能。通过回顾和分析哪些行动成功了、哪些失败了,智能体可以不断优化自己的行为策略,逐渐提升处理复杂局面的能力。这种进化不是静态的,而是一个动态的、在与环境互动中逐步完善的过程。
另外,记忆模块对于行为的一致性和逻辑性也不可或缺。长期存储关键的决策依据和行为准则,让智能体在面对相似情境时能快速提取相关记忆,从而确保行为前后一致、合情合理。这既提升了响应效率,也保证了行动的适当性和有效性。
基于注意力的记忆设计
大语言模型中的记忆设计,目前主要有两条技术路线。第一条是基于注意力的方案,它深入挖掘模型内部机制——说白了,就是把模型过去输出的中间状态存起来,当作“记忆”,然后在后续处理时按需检索,辅助当前生成的响应。
MemTRM
先看一个具体案例。如图2所示的MemTRM[2],它对Transformer的顶层做了个很有想法的改造。系统采用k最近邻和局部注意力机制结合,形成了一种混合注意力机制。具体流程是:模型在处理输入数据时,先把顶层的键(K)和值(V)向量存到一个外部记忆库中;等要生成响应时,再通过k近邻搜索算法,从记忆库里找出与当前输入最相关的token级别内容,用这些内容来生成混合注意力层的语义嵌入。
这么设计的妙处在于:混合层不仅能关注当前的输入信息,还能“回忆”起模型之前处理相似情境时的状态——相当于有效扩展了Transformer的上下文长度。而且,这种方式能让模型更精准地捕捉与当前任务相关的历史信息,整体的处理效率和响应质量自然也跟着上去了。
图2:通过访问之前见过的子序列的键值对来扩展transformer
LongMEM
不过,MemTRM在实践中也遇到了麻烦——记忆陈旧问题。随着训练持续推进,后期保存的键值对和早期的键值对在数据分布上会出现明显差异,这种分布漂移直接影响了检索效率和准确性,成了性能瓶颈。
针对这个问题,LongMEM[3]给出了一个创新解法:把记忆的存储和检索过程解耦(如图3所示)。具体来说,LongMEM选择冻结Transformer的某些参数,这样一来键值对的分布就相对稳定了,有效避免了记忆陈旧的问题。
除此之外,LongMEM还引入了一个可训练的边缘网络(SideNet),加上残差连接来融合历史信息。边缘网络专门处理和整合来自记忆库的信息,残差连接则让模型在前向传播的同时,加入更多历史上下文。这套组合拳不仅解决了记忆陈旧问题,还通过扩展上下文长度,进一步提升了模型对长期依赖信息的处理能力。
图3:LONGMEM的整体架构,“MemAug”表示记忆增强层
基于RAG的记忆设计
另一条技术路线是用RAG(检索增强生成)来提供记忆支持。这条路线和前面讲的注意力方案最大的区别在于:记忆模块和模型主体相对独立,不需要直接访问大模型的内部内容,因此尤其适合给闭源模型做记忆增强。而且,RAG方案主要保存的是句子级别的语义信息,不是单个token的信息。
MemoryBank
在外部记忆库的实现上,这条路子有不少变体。以MemoryBank[4]为例,它用向量库的形式存储过往的对话记录、事件摘要和用户特征,利用向量相似度计算来加速检索过程。如图4所示,MemoryBank把对话数据当作基本记忆单元——不止存对话文本,还从对话中动态提取并总结出关键事件和用户画像,这些高阶记忆信息给智能体提供了丰富的背景知识。
有意思的是,MemoryBank还引入了类似艾宾浩斯遗忘曲线的机制来管理记忆。每条记忆都有对应的“记忆强度”,随时间逐渐衰减。一旦强度降到某个阈值以下,这条记忆就会被当作低价值信息清掉,给新记忆腾出空间。
实际应用时,当智能体如SiliconFriend收到一个查询请求,它会从MemoryBank中检索相关的事件总结、用户画像和对话内容,用这些信息填充“Meta Prompt”,最终帮助模型生成更精准、更有建设性的回答。这种检索增强的方法,既提升了响应相关性和质量,也让模型能更好地适应具体用户的需求和历史背景。
图4:MemoryBank的整体架构以及MemoryBank增强的人工智能伙伴—SiliconFriend
AI-town
AI-town[5]这个项目则另辟蹊径,打造了一个叫Smallville的虚拟小镇,里面住着25个AI智能体。这些智能体不仅有各自的工作,还能社交——八卦、交朋友、甚至办情人节派对。每个智能体都有独特的个性和背景故事,让小镇的社会动态和互动复杂程度相当丰富。
记忆检索是AI-town运行的核心。如图5所示,系统在检索记忆时考虑三个要素:相关度、新近度和重要性。三个因素的得分相乘,得出记忆片段的最终检索得分。得分越高,越容易被检索出来,用来指导智能体当前的行动和决策。
- :衡量查询和记忆片段之间的语义匹配程度,高相关度意味着记忆内容和当前查询紧密相关。
相关度
- :倾向于最近的记忆片段,基于一个合理假设——最近的事件可能跟当前情况更相关。
新近度
- :根据智能体对记忆内容的重要性评价来分配分数,帮它区分哪些是关键核心记忆,哪些是普通记忆。
重要性
这套综合评分机制,确保了智能体能高效地从庞大的记忆库中检索出最相关、最有用的信息,从而提升响应的准确性和适时性。也正因如此,AI-town里的智能体呈现出更接近真实世界的社会行为。
图5:AI-town的检索方式
AI-town还在智能体设计中加入了反思机制,进一步提升了信息处理和决策的深度。这个机制不是停留在简单的观察层面,而是把这些观察转化为在特定条件下更抽象、更高阶的反思。如图6展示的,智能体Klaus Mueller的记忆被构建成一棵反思树——叶节点代表直接观察,经过层层递归总结和综合,最终形成表达高阶自我观念的节点,也就是他对研究工作的高度投入与专注。
在记忆检索阶段,基础观察和高阶反思会被平等对待。这样一来,智能体做决策时不仅考虑具体事件,还能融入从过去经验中提炼出的深层洞察和策略,展现出更复杂、更成熟的行为模式。
图6:Klaus Mueller的反思树
ChatDB
ChatDB[6]则走了一条与众不同的路子——用数据库作为外部记忆载体。数据库天然适合精确记录和管理历史信息,还能通过SQL高效地进行数据检索和操作,大大提升了信息处理的准确性和效率。
更关键的是,ChatDB引入了有监督微调技术(SFT),这让它能理解并转换用户的自然语言查询。用户直接用自然语言提问,ChatDB自动把查询转成合适的SQL语句。这个过程大大简化了交互,不懂SQL的非技术用户也能轻松利用数据库资源。
图7:ChatDB的整体工作流,聚焦于利用数据库作为符号记忆库增强大语言模型
总结
这篇文章简要梳理了大语言模型中两种主流的记忆设计方案,希望能为对这些复杂技术感兴趣的读者提供一个入门视角。如果还想进一步深入了解,推荐阅读Zhang等人[7]写的详尽综述,那篇文章对基于大语言模型的智能体记忆机制做了非常全面的探讨。
参考文献
- A Survey on Large Language Model based Autonomous Agents
- MEMORIZING TRANSFORMERS
- Augmenting Language Models with Long-Term Memory
- MemoryBank: Enhancing Large Language Models with Long-Term Memory
- Generative Agents: Interactive Simulacra of Human Beha vior
- CHATDB: AUGMENTING LLMS WITH DATABASES AS THEIR SYMBOLIC MEMORY
- A Survey on the Memory Mechanism of Large Language Model based Agents
-
- 关于宇宙的好的网名有哪些
- 角色扮演 | 1
- 网名