MemGPT 技术解析:把 LLM 当成操作系统来管内存
一篇 2023 年的 Berkeley 论文如何定义了「有状态 Agent」:虚拟上下文管理、自编辑记忆与中断机制的设计细节,以及它与今天 Letta 的关系。
一篇 2023 年的 Berkeley 论文如何定义了「有状态 Agent」:虚拟上下文管理、自编辑记忆与中断机制的设计细节,以及它与今天 Letta 的关系。
论文:《MemGPT: Towards LLMs as Operating Systems》(arXiv 2310.08560,UC Berkeley,2023-10-12)
项目现状:2024-09-23 起正式更名为 Letta,论文作者团队成立同名公司继续推进
MemGPT 是「有状态 Agent」这条路线上的奠基性工作。它提出的核心类比至今仍是理解各类分层记忆架构的最短路径:把 LLM 当作 CPU,把上下文窗口当作物理内存,把外部存储当作磁盘。
要点速览:主内存里有一块模型可读写的「草稿纸」,换页时机由模型自主决定而非应用代码;中断机制让一次请求内部跑多步——今天 Agent 循环的雏形。代价同样清楚:额外 LLM 调用、行为不稳定、架构偏重。
操作系统面对的问题是:物理内存有限,但进程需要的内存可以无限大。解法是虚拟内存——把不活跃的页面换出到磁盘,需要时再换入,进程完全感知不到。
LLM 面对的是同一个结构性问题:上下文窗口是硬上限(论文写作时的模型普遍只有 4K–8K),但对话历史、文档、工具输出可以无限增长。简单截断的代价是丢失早期信息,而早期信息往往包含任务设定与用户身份。
论文把 LLM 可访问的信息分成两级:
| 层级 | 论文称法 | 内容 | 访问方式 |
|---|---|---|---|
| 主内存 | Main Context | 系统指令、工作上下文、FIFO 消息队列 | 直接出现在 prompt 中 |
| 外部内存 | External Context | 召回存储(对话历史)、归档存储(文档/知识) | 需通过函数调用检索 |
主内存中的「工作上下文」是一块可读写的草稿纸:Agent 自己决定往里写什么。这构成了 MemGPT 与「检索增强」的根本区别——它不只是把外部信息读进来,还把内部信息主动写出去。
传统 RAG 的检索时机由应用代码决定(每轮固定检索一次)。MemGPT 把决定权交给模型本身:
conversation_search 一类函数把内容换回主内存这套机制被论文称为 self-editing memory(自编辑记忆)。
MemGPT 还引入了一个今天看起来理所当然、但在当时很关键的机制:中断(interrupt)。
普通 LLM 调用是「一次输入 → 一次输出」。MemGPT 允许模型在生成过程中请求函数调用,系统执行后把结果作为新的中断塞回,模型继续推理,直到产出面向用户的最终回复。这意味着一次用户请求内部可以包含多次 LLM 调用与记忆操作,Agent 因而具备了「先检索、再反思、最后回答」的多步能力。
这实际上是今天 Agent 循环的雏形。
| 层级 | 容量约束 | 访问速度 | 典型用途 |
|---|---|---|---|
| 主内存(工作上下文) | 受窗口硬限 | 最快,无需额外调用 | 当前任务状态、系统指令 |
| 召回存储 | 中等 | 中等,需函数调用 | 历史对话检索 |
| 归档存储 | 不受限 | 最慢 | 文档、知识库 |
项目更名 Letta 后,定位从「论文原型」转向「具状态智能体平台」:提供 Agent SDK、CLI、多后端部署(云端/本地/自托管)与自我改进能力。记忆在这里不再是一个独立组件,而是 Agent 运行时的一部分。
这也决定了它的适用边界:给现有项目外挂记忆,用 Mem0 这类方案成本更低;从零构建一个需要长期运行、持续自我演化的 Agent,Letta 的框架价值才成立。
本文基于论文原文与官方文档整理。论文发表于 2023 年,当时的上下文窗口规格与今天差异较大,文中容量相关描述已按论文原始设定保留。