MemGPT:把 LLM 变成操作系统

RL Paper Reading入库于 2026/6/9|

MemGPT: Towards LLMs as Operating Systems

阅读难度:★★☆☆☆ | 预计阅读时间:15 分钟

来源arXiv 2310.08560 | Charles Packer et al., UC Berkeley | 2023


一句话总结

这篇论文本质上是在解决 LLM 上下文窗口有限、无法支持长期记忆和超长文档分析 的问题——借鉴操作系统虚拟内存思想,让 LLM 自己管理自己的"内存"。


背景知识

什么是上下文窗口?

LLM 工作时有一个"工作台",只有放在工作台上的信息才能被看到。GPT-3 时代这个工作台只有 4k Token(大约 60 条消息),GPT-4 是 8k,即使是当时最大的 Claude 2 也只有 100k Token(约 2000 条消息)。

一旦超过这个限制,LLM 就"忘记"了之前说过的话——就像一个金鱼,永远记不住 7 秒前发生的事。

为什么直接扩大窗口很难?

Transformer 的自注意力机制计算量是 O(n²)——窗口翻倍,计算量翻四倍。而且研究发现即使有了大窗口,LLM 对"窗口中间"的内容关注度反而更差("中间遗忘"问题)。


为什么会出现这篇论文

技术演进路线:

早期 LLM(短上下文)
    ↓
Retrieval-Augmented Generation(RAG)— 外挂检索,但 LLM 自身不主动管理
    ↓
Long-context LLM(稀疏注意力、RoPE外推)— 治标不治本,中间遗忘
    ↓
Function Calling(LLM 主动调用工具)— 能力出现
    ↓
MemGPT — LLM 自主管理分层记忆,像 OS 管理虚拟内存

原来大家怎么做的?

  1. 截断:把最旧的消息直接扔掉,简单粗暴但丢失信息。
  2. 递归摘要:把旧消息压缩成摘要塞回去,有损且难以精确检索。
  3. RAG:由外部系统决定检索什么,LLM 被动接受,无法迭代追问。

这些方案的共同问题:LLM 是被动的,没有主动权来决定"我现在需要什么信息"。


论文试图解决的问题

问题 1:超长对话记忆丢失

  • 现象:聊了几十轮后,AI 不记得用户之前说过喜欢什么、做什么工作
  • 为什么难:上下文满了只能扔旧的,而"重要"和"旧"并不等价
  • 现实影响:个人助手无法建立真正的"了解",每次都像第一次见面

问题 2:超长文档无法完整分析

  • 现象:一份法律合同、年报动辄百万 Token,远超任何模型上限
  • 为什么难:不能截断(关键信息可能在任何位置),RAG 检索质量不稳定
  • 现实影响:企业级文档分析几乎不可用

问题 3:多跳推理跨文档失败

  • 现象:需要从文档 A 找到一个 Key,再用这个 Key 去文档 B 查答案
  • 为什么难:固定上下文的 LLM 无法"主动再查一次"
  • 现实影响:复杂知识库问答严重受限

核心创新

创新 1:分层内存架构(类比操作系统虚拟内存)

作者做了什么: 把 LLM 的记忆分成两层——

  • 主上下文(Main Context):LLM 能直接"看到"的,等同于物理内存/RAM
  • 外部上下文(External Context):存在外部数据库里,等同于磁盘

直觉理解: 就像你的桌子(RAM)放不下所有书,你把不常用的书放到书架(磁盘),需要时再拿出来。OS 帮你管理这个换进换出,让你感觉"好像有无限的桌子"——MemGPT 让 LLM 自己做这件事。

主上下文的三层结构:

┌─────────────────────────────┐
│ 系统指令(只读,静态)         │ ← 告诉 AI 怎么用记忆工具
├─────────────────────────────┤
│ 工作上下文(读写,固定大小)   │ ← 存用户偏好、关键事实(相当于便利贴)
├─────────────────────────────┤
│ FIFO 消息队列(滚动历史)      │ ← 最近的对话消息
└─────────────────────────────┘

外部上下文的两类存储:

  • Recall Storage(回忆存储):全量对话历史,可按时间/关键词搜索
  • Archival Storage(档案存储):任意长度文本对象,支持向量相似度搜索
对比维度旧方案(截断/摘要)MemGPT
谁决定保留什么固定策略,机械截断LLM 自主判断
信息损耗有损(摘要失真)无损(原文存储)
检索方式无法检索关键词 + 向量搜索
可追溯性丢失完整保存

创新 2:自导向记忆编辑(LLM 主动管理)

作者做了什么: 给 LLM 提供一套"内存管理函数",LLM 自己决定何时调用:

  • archival_memory_search(query) — 在档案里搜索
  • archival_memory_insert(content) — 写入档案
  • core_memory_append(section, content) — 更新工作上下文
  • core_memory_replace(section, old, new) — 替换工作上下文内容

直觉理解: 不是让别人帮你整理桌子,而是你自己有一双手,能主动决定把哪本书放回书架、把哪本拿出来。

为什么有效: LLM 在生成回复的过程中,已经"理解"了当前信息的重要性。让它自己决定记什么,比固定策略更智能。


创新 3:事件驱动控制流 + 函数链式调用

作者做了什么:

  • 事件驱动:触发 LLM 推理的不只是用户消息,还有系统消息(如"内存快满了"警告)、定时事件(允许 Agent 主动触发,不需要用户催)
  • 函数链:LLM 可以连续调用多个函数再返回结果,不必每步都等用户(类似程序里的循环)

直觉理解: 你去图书馆查资料,传统 LLM 是找到第一本就停下来等你说"继续"。MemGPT 可以自己接着翻第二本、第三本,直到找到答案再来告诉你。

内存压力机制:

  • 上下文使用达到 70%:插入"内存压力"警告,提示 AI 应该把重要信息存起来
  • 达到 100%:自动触发 FIFO 队列 Flush,生成递归摘要,原始消息存入 Recall Storage

算法流程

Step 1: 事件触发(用户消息 / 系统警告 / 定时事件)
    ↓
Step 2: Queue Manager 将消息追加到 FIFO 队列
    ↓
Step 3: 拼接 Main Context(系统指令 + 工作上下文 + FIFO 队列)→ 输入 LLM
    ↓
Step 4: LLM 生成输出(可能包含函数调用)
    ↓
Step 5A: 若包含函数调用
    → Function Executor 执行(读/写 External Context)
    → 结果追加回 Main Context
    → 若函数带"continue"标志 → 回到 Step 4(链式调用)
    → 若函数带"yield"标志 → 等待下一个外部事件
    ↓
Step 5B: 若为普通回复
    → 输出给用户 / 执行 yield
    ↓
Step 6: 检查内存压力 → 必要时触发 Flush
    → 生成递归摘要
    → 旧消息归档到 Recall Storage

实验说明了什么

实验 1:深度记忆检索(对话一致性)

作者想证明:MemGPT 能记住几轮对话前的细节,而普通 LLM 不行。

结果:MemGPT + GPT-4 达到 92.5% 准确率,而纯 GPT-4 只有 32.1%。提升极其显著。

提升来自:MemGPT 把过去对话中的关键事实存进了工作上下文(Working Context),能精确召回;而纯 LLM 的递归摘要有损,细节丢失。

实验 2:文档问答

作者想证明:MemGPT 能处理超过上下文限制的文档。

结果:MemGPT 通过多次主动查询 Archival Storage,有效突破了文档数量限制。固定上下文模型性能被检索器质量"卡死",MemGPT 可以迭代分页搜索直到找到正确文档。

实验 3:嵌套 KV 检索(多跳推理)

结果:GPT-4 在 3 层嵌套时准确率降为 0%,MemGPT + GPT-4 在 4 层嵌套下依然保持高准确率,因为它可以主动多次查询函数、完成多跳推理。


与 LLM 后训练的关系

MemGPT 对现代 Agent RL 训练有重要启示:

  1. 工具调用能力的重要性:MemGPT 依赖 LLM 的 Function Calling 能力正确调用记忆函数。这直接推动了后续模型训练中对 Tool Use 能力的强化,成为 Agent RL 训练的核心目标之一。

  2. 自我反思与主动规划:MemGPT 中 LLM 需要判断"什么时候该存记忆、存什么、检索什么"——这种自主决策能力正是后续 Agent RL 环境(RLE)设计的核心奖励信号来源。

  3. 记忆作为 State:MemGPT 的 Working Context 本质上是一个可持久化的 Agent State,这个设计影响了后续 SWE-Agent、OpenHands 等框架对 Agent 内部状态的管理方式。


现实应用情况

  • Anthropic:Claude 系列的 Memory 功能(Claude.ai "Projects")借鉴了类似的分层记忆思路。
  • OpenAI:ChatGPT 的长期记忆功能(2024年推出)与 MemGPT 架构高度相似——核心记忆 + 可搜索历史。
  • MemGPT 项目本身:已演进为 Letta 框架,成为有状态 Agent 的开源基础设施,被多个生产环境采用。
  • 字节跳动、阿里等:其 Agent 产品中的长期记忆模块均采用了类似的"核心记忆 + 向量检索"架构。

对 Agent 的意义

Agent 方向影响
Tool UseMemGPT 证明 LLM 可以可靠地"自主"决策工具调用序列,是 Tool Use 能力成熟的重要里程碑
RAG从"外部决策检索什么"升级为"LLM 自主决策检索什么",大幅提升 RAG 质量上限
Multi-AgentWorking Context 模式为多 Agent 间共享状态提供了参考架构
SWE Agent函数链式调用的控制流设计,直接影响了 SWE-Agent、OpenHands 的 Action 设计
Deep ResearchDeep Research 的"主动迭代查询"模式与 MemGPT 的函数链几乎同构
RLEMemGPT 的 State(Working Context)+ Action(Function Call)+ 观测(函数返回值)三元组,是典型的 RL Environment 接口

对初学者最值得学什么

Top 1:从 OS 类比理解 Agent 架构 把 LLM 看作 CPU,上下文看作 RAM,外部存储看作磁盘——这个类比极为深刻。Agent 系统设计本质上是在做"资源调度",OS 领域几十年的智慧都可以借鉴。

Top 2:主动 vs 被动的架构区别 被动 RAG(系统决定检索什么)vs 主动记忆管理(LLM 自己决定)——这个区别在后续 Agent 演进中反复出现,理解这个转变是理解 Agent 智能化趋势的关键。

Top 3:函数链使 Agent 具备"深思熟虑"能力 允许 LLM 在返回结果前反复调用工具,是从"单步反应"到"多步规划"的关键跨越,也是 Chain-of-Thought → ReAct → Agent RL 演进链中的重要一环。


论文局限性

  • 依赖强 Function Calling 能力:GPT-3.5 的 MemGPT 性能显著差于 GPT-4,说明记忆管理本身需要强大的指令理解能力,弱模型不适用。
  • 检索质量上限:Archival Storage 的向量检索仍然会漏掉相关文档,MemGPT 的多跳补偿有限。
  • 延迟开销:函数链会导致多次 LLM 推理,实时对话场景下延迟明显。
  • Working Context 大小固定:核心记忆容量有限,复杂任务可能不够用。
  • 未解决"遗忘什么"的决策质量:LLM 决定遗忘哪些信息的策略没有经过 RL 优化,可能不够优。

技术演进图谱

固定上下文 LLM
    ↓
Retrieval-Augmented Generation(外挂检索)
    ↓
Recursive Summarization(递归摘要)
    ↓
Function Calling + Tool Use
    ↓
MemGPT(自主记忆管理,OS 类比)← 本论文
    ↓
Letta / Stateful Agent Framework
    ↓
Agent RL + 记忆优化(RLE 中的 Memory State 设计)