← 返回 AI Agent 课程

【中文精读】MemGPT: Towards LLMs as Operating Systems

原文:https://arxiv.org/abs/2310.08560 · Charles Packer, Sarah Wooders, Kevin Lin, Vivian Fang, Shishir G. Patil, Ion Stoica, Joseph E. Gonzalez(UC Berkeley)· 本文为中文精读版(忠实转述+关键段落翻译),非逐句全译 · 生成于 2026-07-03 · 精读整理:
导读:为什么读这篇?
这是「agent 记忆系统」方向公认的开山论文之一(2023 年 10 月,UC Berkeley),后来直接孵化出 Letta 公司(原名 MemGPT)。在 agent 开发的知识体系——尤其是上下文工程(context engineering)——里,它的位置极为关键:在此之前,处理长对话/长文档的主流思路是「开发者在 LLM 外面写死一套编排逻辑」(RAG 流水线、滑窗、摘要链),上下文是被静态编排的;MemGPT 的贡献是把这一步推进到让 LLM 通过函数调用自主管理自己的记忆层级——模型自己决定什么该记进长期记忆、什么该从档案里翻出来、什么可以被淘汰。它借用的「操作系统虚拟内存」类比(主存/磁盘 ↔ 上下文内/上下文外)已成为今天讨论 agent 记忆时的标准语言;heartbeat、memory pressure、working context 这些词也由此进入了工程实践。今天你在各家 agent 框架里看到的「core memory + archival memory」「自编辑记忆块」设计,源头基本都在这里。读它,你会得到一个可以直接照着复现的记忆系统实现蓝图。

一、动机:固定上下文窗口是 LLM 的「物理内存墙」(§1 引言)

论文开篇指出:尽管 LLM 已经彻底改变了对话式 AI,它们受制于有限的固定上下文窗口(fixed-length context window),这在两类任务上尤其致命——长时间连续对话(如虚拟助理、陪伴 agent)和长文档分析。作者观察到,主流开源模型当时只能支撑「几十个来回的消息」,或者在推理一篇稍长的文档时就会超出最大输入长度。

为什么不直接把上下文窗口做大?论文给了三层论证:

于是作者提出核心问题:能否在不改动 LLM 本身的前提下,在固定上下文窗口内提供「无限上下文的假象」?

核心类比:操作系统的虚拟内存分页

答案借自几十年前的操作系统智慧——虚拟内存分页(virtual memory paging):OS 通过在物理内存与磁盘之间换页,让应用程序可以处理远超实际内存容量的数据集,应用感知到的是一片「扩展的虚拟内存」。论文将这一思想移植为虚拟上下文管理(virtual context management):

上下文窗口 ≈ 主存/物理内存(RAM);上下文之外的外部存储 ≈ 磁盘。数据必须被显式「换入」上下文窗口,LLM 才能在推理中看到它;不重要的数据则被「换出」到外部存储。

关键的不同在于:OS 的换页由内核透明完成,而 MemGPT 利用 LLM 自身的函数调用(function calling)能力,让 LLM 扮演「换页决策者」——通过一个「LLM 操作系统」(即 MemGPT)自主检索被移出上下文的历史数据、把不重要的数据淘汰出去。这也是标题「Towards LLMs as Operating Systems」的含义:不是给 LLM 写一个 OS,而是让 LLM + 管理框架合起来像 OS 一样工作

论文附了一张主流模型上下文长度对比(2024 年 1 月时点):Llama 2k、Llama 2 4k、GPT-4 8k/32k、Claude 2 100k、GPT-4 Turbo 128k、Yi-34B-200k 200k——用以说明即便最长的窗口,面对无限增长的对话史和大文档库也终会耗尽。

二、方法:MemGPT 架构(§2)

MemGPT 的全部机制可以概括为一句话:把 prompt 划分成分层记忆,用一个队列管理器和一个函数执行器,让 LLM 通过自我指导的函数调用在层级之间搬运数据。下面拆开讲到可复述实现的程度。

2.1 两级记忆:主上下文与外部上下文

2.2 主上下文的三段式结构

主上下文(prompt tokens)被切成三个连续区段:

2.3 外部上下文的两个库:召回存储与档案存储

两者的直观区分:recall 是「自动记录的全量流水账」,archival 是「主动整理的知识库」。

2.4 队列管理器:记忆压力、淘汰与递归摘要

队列管理器(queue manager)负责 FIFO 队列与 recall storage 的运转:

这一套「70% 警告 → 100% 冲刷 50% + 递归摘要」的流程,就是 MemGPT 版的「换页算法」。

2.5 函数执行器:自我指导的记忆编辑

函数执行器(function executor)解释 LLM 输出的 completion tokens 并执行其中的函数调用,编排主上下文与外部上下文之间的数据搬运。论文强调记忆的编辑与检索是完全自我指导的(entirely self-directed):LLM 自主决定何时移动数据、移动什么。为此系统指令里包含两块内容:(1) 各记忆层级用途的详细说明;(2) 可调用函数的 schema 与自然语言描述。可推知的函数集包括:

错误反馈回路:LLM 的输出先由解析器校验(函数名、参数合法性),校验通过才执行;执行结果——包括运行时错误(比如 working context 已满还往里写)——都会作为消息反馈给处理器。这个回路让 agent 能从自己的失败操作中调整策略,配合 token 水位警告共同引导其记忆管理决策。

2.6 控制流:事件、中断与心跳

MemGPT 用事件(events)统一所有触发 LLM 推理的输入,类似 OS 的中断:

事件经解析器转成纯文本消息追加进主上下文,再喂给处理器——这就是 MemGPT 的事件循环。

心跳(heartbeat)与函数链(function chaining):多步任务(翻阅多页检索结果、跨文档聚合)需要连续调用多个函数。MemGPT 的做法是给函数调用加一个特殊标志:LLM 在生成函数调用时带上关键字参数 request_heartbeat=true,函数执行完毕后控制权立即交回处理器——函数输出进入主上下文,LLM 接着推理下一步,不必等外部事件。若不带该标志,则本轮推理让出(yield),MemGPT 暂停,直到下一个外部事件到来才再次运行 LLM。心跳机制是 MemGPT 能做多步检索(multi-step retrieval)的关键,也是后来各家 agent loop 里「工具调用后继续推理」模式的一个早期显式化。

三、实验(§3)

评估覆盖两个领域:对话 agent(多会话一致性与参与度)文档分析。三个处理器模型:GPT-4 Turbo(gpt-4-1106-preview,128k 窗口)、GPT-4(gpt-4-0613,8k 窗口)、GPT-3.5 Turbo(gpt-3.5-turbo-1106,16k 窗口);基线是不加 MemGPT 的同款裸模型(固定上下文,窗口满了走截断/摘要)。

3.1 对话 agent:MSC 数据集上的两个任务

实验基于 Multi-Session Chat(MSC,Xu et al. 2021)数据集:人类标注者分饰固定 persona 进行 5 个会话的多轮聊天(每会话十几条消息)。作者为实验新造了「第 6 会话」,并公开发布了增强版 MSC 数据集。

任务一:深度记忆检索(DMR, deep memory retrieval)——测「一致性」

用户在第 6 会话提出一个明确指向前 5 个会话内容的问题(答案范围很窄,只能靠过去会话中的信息才答得出),测试 agent 能否保持与自己历史的一致。指标两个:ROUGE-L recall(因生成答案普遍比黄金答案冗长,取 recall)和 LLM judge 准确率(GPT-4 判断答案是否与黄金答案一致)。基线可看到前 5 个会话的有损递归摘要;MemGPT 则能通过分页搜索访问完整会话历史。结果(Table 2):

模型准确率(LLM judge)ROUGE-L (R)
GPT-3.5 Turbo38.7%0.394
GPT-3.5 Turbo + MemGPT66.9%0.629
GPT-432.1%0.296
GPT-4 + MemGPT92.5%0.814
GPT-4 Turbo35.3%0.359
GPT-4 Turbo + MemGPT93.4%0.827

注意这个反差:裸 GPT-4 只有 32.1%——递归摘要是有损的,细节问题基本答不上;加上 MemGPT 直接冲到 92.5%,提升近 60 个百分点。结论不是「模型更强」,而是「给了模型翻档案的手」

任务二:对话开场白(conversation opener)——测「参与度」

评估 agent 能否利用积累的用户知识,写出「抓人」的下一会话开场白。好开场白应引用 persona 中的信息点(MSC 的 persona 标签有效汇总了此前所有会话)。指标是 CSIM 相似度:SIM-1/SIM-3(与黄金 persona 标签的相似度,取 1 条/3 条)、SIM-H(与人类写的真实开场白的相似度)。结果(Table 3):人类基准 SIM-1 = 0.800,而 MemGPT (GPT-4) 达 0.868、MemGPT (GPT-3.5) 达 0.830、MemGPT (GPT-4 Turbo) 达 0.857——可媲美甚至超过人类手写开场白。关键机制是 working context:agent 平时把用户要点存进核心记忆,开场时直接引用。

3.2 文档分析:两个检索任务

任务三:多文档问答(multi-document QA)

沿用 Liu et al. (2023a) 的 retriever-reader 设置:问题来自 NaturalQuestions-Open(采样 50 题),检索器统一用 OpenAI text-embedding-ada-002 余弦相似度取 top-K 文档,考察 reader 准确率随 K 增大的变化;语料是 2018 年末 Wikipedia dump(作者随论文发布了 2000 万篇 Wikipedia 文章的 embedding)。基线为塞进更多文档只能截断,截得越多黄金片段越可能被截掉;MemGPT 则把全部文档载入 archival storage,靠分页调用检索函数逐批阅读。

论文图 6 的结论(图表转述):固定上下文基线的准确率随 K 增大先升后被截断拖垮,其上限约等于检索器本身的召回率;而 MemGPT 的准确率不随 K 增大而下降,因为它可以多次分页查询,不受窗口限制。两个诚实的负面观察:MemGPT + GPT-3.5 因函数调用能力不足而明显退化(GPT-4 才发挥出全部实力);且实践中 MemGPT 常在翻完整个检索库之前就提前停止翻页。此外 embedding 检索本身是所有方法的共同瓶颈——黄金文档常排在前十几名之外。

任务四:嵌套键值检索(nested key-value retrieval)

合成任务(扩展自 Liu et al. 2023a):键和值都是 128-bit UUID,值本身可能又是别的键,须多跳查找直到值不再是键。固定 140 个 UUID 对(约 8k tokens,恰好等于 GPT-4 基线窗口),嵌套层数 0–4,采样 30 种位置排列。结果(图 7 转述):

四、相关工作与定位(§4)

论文把自己与三条线区分开:(1) 长上下文 LLM(扩窗、位置插值等)——MemGPT 与之正交,窗口再大也能作为更大的「主存」被 MemGPT 管理;(2) 检索增强(RAG)——传统 RAG 是开发者写死的单次检索流水线,MemGPT 的检索由 LLM 自主发起、可多步迭代;(3) LLM as agents(ReAct、Toolformer 等函数调用/工具使用工作)——MemGPT 把工具指向了「自己的记忆」,让工具调用服务于上下文管理本身。

五、结论与局限(§5)

结论段的核心主张:把操作系统的分层内存管理与中断机制移植给 LLM,能在固定上下文限制内释放其潜力;MemGPT 在文档分析与多会话聊天两个领域证明,这种「OS 式」设计让 LLM 学会了管理自己的记忆,从而突破窗口约束。未来方向:把虚拟上下文管理应用到其他大上下文域、集成不同的存储层技术(如数据库、缓存)、进一步改进控制流与记忆管理策略。

明确或可从实验读出的局限:(1) 强依赖处理器的函数调用可靠性——GPT-3.5 与(当时的)开源模型带不动,这也是论文所有亮眼数字都出自 GPT-4 的原因;(2) 检索会提前停止,自主性带来的不确定性尚无硬保证;(3) 底层 embedding 检索的质量是天花板;(4) 每一步记忆管理都是额外的 LLM 调用,token 成本与延迟高于静态流水线(论文未展开量化)。

六、这篇论文的历史回响

以今天(2026)的后见之明看,MemGPT 至少有四个概念被后续生态大规模继承:记忆分层(core/working memory + archival + 全量日志)、自编辑记忆(LLM 用工具改写自己的常驻上下文,今天各框架的 memory blocks / 自动记忆均是其变体)、记忆压力驱动的主动整理(水位警告触发转存,而非等溢出被动截断)、heartbeat 式多步工具循环。项目本身开源后演化为 Letta 平台,「LLM OS」的说法也从这篇论文的标题扩散成了一个方向的名字。它的对照面同样有教益:纯靠更长上下文窗口的路线并没有消灭这套设计——窗口越大,「什么值得占据窗口」的管理问题反而越突出。

对开发者的启示