Letta / MemGPT 深度解读
“操作系统式虚拟内存——让 Agent 自己决定记什么、忘什么、什么时候翻旧账”
一句话定位
源自 MemGPT 论文的有状态 Agent 框架,核心创新是借鉴操作系统虚拟内存的 page in/out 机制,让 Agent 通过工具调用自主管理自己的记忆——而不是交给系统自动处理。
设计哲学上最精彩的地方
Letta 的核心思想是:记忆管理不应该是系统的职责,而是 Agent 自己的能力。其他记忆系统像一个帮你整理书架的图书管理员——你说了什么,它自动归档。Letta 更像是给你自己一套整理工具(标签、文件夹、搜索引擎),让你自己决定怎么整理。
这个设计直接映射了操作系统的虚拟内存模型。Core Memory 是 RAM——容量小但始终在线,每次对话都完整注入 system prompt;Archival Memory 是硬盘——容量无限但检索需要主动发起。Agent 需要”意识到”自己缺少某个信息,然后主动去 archival 里搜——这要求 Agent 有足够好的”元认知”能力,也是 Letta 和所有”系统自动管理”派(DB-Agent-Memory、mem0、Graphiti)的根本分歧。
Block-based Core Memory——Context Window 的预算分配
Letta 的 core memory 不是一个数据库,而是几个有字符限制的”文本块”(block):human block 存用户信息,persona block 存 Agent 人设,每个 block 有字符上限(如 2000 chars)。Agent 通过 core_memory_append()、core_memory_replace() 等工具调用来修改这些 block——但要注意预算,满了就得先删旧的再加新的。
这个设计把 LLM 的 context window 限制变成了一个显式的资源管理问题,而不是其他项目那样在系统层面悄悄截断或压缩。好处是 Agent 有完全的控制权,坏处是弱模型可能会犯低级错误——覆盖重要信息、忘记搜索归档、把无关信息塞满 core memory。
Recall vs Archival——被动回忆与主动搜索的互补
Recall Memory 是对话历史的自动检索层——系统自动从历史对话中检索相关片段,不需要 Agent 主动触发。Archival Memory 则需要 Agent 主动调用 archival_memory_search() 去搜。两者形成互补:recall 是”下意识想起来的”,archival 是”刻意去翻找的”。这个区分在认知科学上对应自动记忆和受控记忆,是 7 个项目中最接近人类记忆工作方式的设计。
局限性——框架耦合与代码体量
Letta 不仅仅是一个记忆系统,它是一个完整的 Agent 框架,记忆只是其中一个模块。这意味着很难”只用记忆模块”而不用整个框架。代码量大(~1155 文件),学习曲线陡峭。对于只需要”给已有 Agent 加记忆”的场景,Letta 太重了。此外,Agent 自管理记忆的可靠性强烈依赖底层 LLM 的能力——在 GPT-4 级别大致成立,在更弱的模型上容易出错。
本地代码结构
letta/
letta/
agent.py # Agent 核心,工具调用 + 记忆管理入口
memory.py # 分层记忆系统(core/archival/recall)
schemas/
block.py # Block 定义(字符限制、类型)
memory.py # 记忆 schema
server/
rest_api/ # REST API 服务
server.py # Letta Server 主入口
services/
agent_manager.py # Agent 生命周期管理
block_manager.py # Block 增删改查
orm/ # PostgreSQL/SQLite ORM
functions/
function_sets/
base.py # core_memory_append/replace 等内建工具
tests/
docker/
本地关键文件
| 文件 | 用途 |
|---|---|
letta/agent.py |
Agent 核心,协调 LLM 调用与记忆工具 |
letta/memory.py |
分层记忆系统,core/archival/recall 三层 |
letta/schemas/block.py |
Block 定义,字符限制 + 类型约束 |
letta/functions/function_sets/base.py |
core_memory_append / archival_memory_search 等内建工具 |
letta/server/server.py |
Letta Server 主入口,Agent as a Service |
letta/services/agent_manager.py |
Agent 生命周期管理,创建/删除/状态持久化 |