近年来,大语言模型(LLM)及其底层的 transformer 架构已经成为了对话式 AI 的基石,并催生了广泛的消费级和企业应用程序。尽管有了长足的进步,但 LLM 使用的固定长度的上下文窗口极大地限制了对长对话或长文档推理的适用性。即使是使用最广泛的开源 LLM,它们的最大输入长度只允许支持几十条消息回复或短文档推理。
与此同时,受限于 transformer 架构的自注意力机构,简单地扩展 transformer 的上下文长度也会导致计算时间和内存成本成倍增加,这就使得全新的长上下文架构成为紧迫的研究课题。
不过,即使我们能够克服上下文缩放的计算挑战,但最近的研究却表明,长上下文模型很难有效地利用额外的上下文。
这如何解决呢?考虑到训练 SOTA LLM 所需的大量资源以及上下文缩放明显的回报递减,我们迫切需要支持长上下文的替代技术。加州大学伯克利分校的研究者在这方面有了新的进展。
在本文中,研究者探究了如何在继续使用固定上下文模型的同时,提供无限上下文的幻觉(illusion)。他们的方法借鉴了虚拟内存分页的思路,使得应用程序能够处理远超出可用内存的数据集。
基于该思路,研究者利用 LLM 智能体函数调用能力的最新进展,设计出了一个受 OS 启发、用于虚拟上下文管理的 LLM 系统 ——MemGPT。
论文主页:https://memgpt.ai/
arXiv 地址:https://arxiv.org/pdf/2310.08560.pdf
项目已经开源,在 GitHub 上已经斩获了 1.7k 的 star 量。
GitHub 地址:https://github.com/cpacker/MemGPT
方法概览
该研究从传统操作系统的分层内存管理中汲取灵感,在上下文窗口(类似于操作系统中的「主存(main memory)」)和外部存储之间有效地「分页」进出信息。MemGPT 则负责管理内存、LLM 处理模块和用户之间的控制流。这种设计允许在单个任务期间反复进行上下文修改,从而允许智能体更有效地利用其有限的上下文窗口。
MemGPT 将上下文窗口视为受限内存资源,并为 LLM 设计类似于传统操作系统中分层内存(Patterson et al., 1988)的层次结构。为了提供更长的上下文长度,该研究允许 LLM 通过「LLM OS」——MemGPT,来管理放置在其上下文窗口中的内容。MemGPT 使 LLM 能够检索上下文中丢失的相关历史数据,类似于操作系统中的页面错误。此外,智能体可以迭代地修改单个任务上下文窗口中的内容,就像进程可以重复访问虚拟内存一样。
MemGPT 能够让 LLM 在上下文窗口有限的情况下处理无界上下文,MemGPT 的组件如下图 1 所示。
MemGPT 通过函数调用协调主上下文(上下文窗口中的内容)和外部上下文之间的数据移动,MemGPT 根据当前上下文自主更新和检索。
值得注意的是,上下文窗口需要用 warning token 来标识其限制,如下图 3 所示:
实验及结果
在实验部分,研究者在两个长上下文域中来评估 MemGPT,分别是对话式智能体和文档处理。其中对于对话式智能体,他们扩展了现有的多会话聊天数据集(Xu et al. (2021)),并引入了两个新的对话任务以评估智能体在长对话中保留知识的能力。对于文档分析,他们根据 Liu et al. (2023a) 提出的任务对 MemGPT 进行基准测试,包括对长文档的问答和键值检索。
用于对话智能体的 MemGPT
当与用户对话时,智能体必须满足以下两个关键标准。
- 一是一致性,即智能体应保持对话的连贯性,提供的新事实、引用和事件应与用户、智能体之前的陈述保持一致。
- 二是参与度,即智能体应该利用用户的长期知识来个性化响应。参考之前的对话可以使对话更加自然和引人入胜。
因此,研究者根据这两个标准对 MemGPT 进行评估:
- MemGPT 是否可以利用其记忆来提高对话一致性?能否记住过去交互中的相关事实、引用、事件以保持连贯性?
- MemGPT 是否可以利用记忆生成更有吸引力的对话?是否自发地合并远程用户信息以个性化信息?
关于使用到的数据集,研究者在 Xu et al. (2021) 提出的多会话聊天(MSC)上对 MemGPT 和固定上下文的基线模型展开评估对比。
首先来一致性评估。研究者引入了一个基于 MSC 数据集的深层记忆检索(deep memory retrieval, DMR)任务,旨在测试对话智能体的一致性。在 DMR 中,用户向对话智能体提出一个问题,并且该问题明确引用先前的对话,预期答案范围会非常窄。具体可以参加下图 5 示例。
MemGPT 利用内存来保持一致性。下表 2 显示了 MemGPT 与固定记忆基线模型的性能对比,包括 GPT-3.5 和 GPT-4。
可以看到,MemGPT 在 LLM 判断准确度和 ROUGE-L 分数方面显著优于 GPT-3.5 和 GPT-4。MemGPT 能够利用回想记忆(Recall Memory)查询过去的对话历史,进而回答 DMR 问题,而不是依赖递归摘要来扩展上下文。
然后在「对话开场白」任务中,研究者评估智能体从先前对话积累的知识中提取引人入胜的消息并传递给用户的能力。
研究者在下表 3 中展示了 MemGPT 开场白的 CSIM 分数。结果表明,MemGPT 能够制作引人入胜的开场白,其表现可以媲美甚至超越人类手写的开场白。此外还观察到 MemGPT 倾向于制作比人类基线更长且涵盖更多角色信息的开场白。下图 6 为示例。
用于文档分析的 MemGPT
为了评估 MemGPT 分析文档的能力,研究者对 MemGPT 以及在 Liu et al. (2023a) 检索器 - 阅读器文档 QA 任务上的固定上下文基线模型进行了基准测试。
结果显示,MemGPT 能够通过查询档案存储有效地对检索器进行多次调用,从而可以扩展到更大的有效上下文长度。MemGPT 主动从档案存储中检索文档并且可以迭代地分页浏览结果,因而其可用的文档总数不再受到适用 LLM 处理器上下文窗口的文档数量的限制。
由于基于嵌入的相似性搜索的局限性,文档 QA 任务对所有方法都构成了极大的挑战。研究者观察到,MemGPT 会在检索器数据库耗尽之前停止对检索器结果进行分页操作。
此外 MemGPT 更复杂操作所创建的检索文档容量也存在权衡,如下图 7 所示,其平均准确度低于 GPT-4(高于 GPT-3.5),但可以轻松地扩展到更大的文档。
研究者还引入了一项基于合成键值检索的新任务,即嵌套键值检索(Nested Key-Value Retrieval),用以演示 MemGPT 如何对来自多个数据源的信息进行整理。
从结果来看,虽然 GPT-3.5 和 GPT-4 在原始键值任务上表现出了良好性能,但在嵌套键值检索任务中表现不佳。而 MemGPT 不受嵌套层数的影响,并能够通过函数查询重复访问存储在主内存中的键值对,来执行嵌套查找。
MemGPT 在嵌套键值检索任务上的性能,展示了其利用多个查询的组合执行多条查找的能力。
更多技术细节和实验结果请参阅原论文。