【Letta】让大模型拥有"操作系统级"记忆能力深度解析
Letta深度解析:让大模型拥有”操作系统级”记忆能力
前言
你有没有遇到过这种情况?
你跟一个AI助手聊了两个小时的项目背景,告诉它你的需求、偏好、约束条件。结果第三天再打开,它完全不记得你了——就像一个每次醒来都失忆的人。
这不仅是AI的尴尬,更是当前Agent架构的根本缺陷:上下文窗口再大,也装不下人类一辈子的经历。
Letta(前身是著名的MemGPT项目)正是为解决这一问题而生。它的核心思想极其优雅:让大模型像操作系统一样管理记忆——有快慢内存之分,有分页机制,有中断处理。
本文将深入解析Letta的分层记忆架构、Compaction压缩机制、Multi-Agent协作模式,以及它与其他主流记忆系统的本质差异。
mindmap
root((Letta核心创新))
核心问题
LLM上下文窗口有限
无法记住长期交互
Agent缺乏连续性
解决思路
OS式分层记忆
虚拟上下文管理
快慢内存调度
关键机制
Core Memory
Archival Memory
Compaction压缩
分页检索一、项目概览
1.1 什么是Letta
Letta是一个有状态(Stateful)的AI Agent平台,专注于解决LLM的”记忆问题”。它最初以MemGPT的名字发表在2023年10月,论文标题极具野心:“Towards LLMs as Operating Systems”——让大模型成为操作系统。
flowchart TB
subgraph 问题["❌ 传统LLM的困境"]
P1["上下文窗口有限<br/>GPT-4o: 128K tokens"]
P2["长对话记忆丢失<br/>超过窗口全部遗忘"]
P3["无法做深度分析<br/>超出窗口的文档处理不了"]
end
subgraph Letta方案["✅ Letta的解法"]
S1["分层记忆管理<br/>像OS一样分快慢内存"]
S2["虚拟上下文管理<br/>在有限窗口内呈现无限上下文"]
S3["Compaction压缩<br/>自动整理和遗忘不重要记忆"]
end
P1 & P2 & P3 --> S1 & S2 & S3
style 问题 fill:#FFA07A,stroke:#FF6347
style Letta方案 fill:#98FB98,stroke:#228B221.2 核心数据
| 指标 | 数据 |
|---|---|
| GitHub Stars | 20,000+ |
| 前身 | MemGPT(2023年10月论文) |
| 团队 | Letta AI |
| 最新版本 | v0.4+ |
| 编程语言 | Python / TypeScript |
| 支持模型 | OpenAI / Anthropic / Gemini / DeepSeek 全覆盖 |
1.3 核心特性一览
flowchart LR
subgraph 特性["✨ Letta核心能力"]
F1["🧠 分层记忆<br/>Core + Archival双层"]
F2["📦 Compaction<br/>自动压缩整理"]
F3["🔍 向量检索<br/>Archival语义搜索"]
F4["🤖 多Agent协作<br/>团队模式"]
F5["🔌 MCP工具<br/>生态集成"]
F6["🎯 状态持久化<br/>跨会话记忆"]
end
style 特性 fill:#87CEEB,stroke:#4169E1二、核心架构:OS风格的记忆系统
2.1 传统OS的分层内存 vs Letta的分层记忆
这是Letta最核心的洞察——把LLM比作CPU,把记忆比作内存/硬盘:
flowchart TB
subgraph 传统OS["💻 操作系统"]
OS_CPU["CPU寄存器<br/>极快/极小/常驻"]
OS_L1["L1/L2 Cache<br/>快/小"]
OS_RAM["RAM 主内存<br/>中速/中量"]
OS_DISK["磁盘<br/>慢/大/持久"]
end
subgraph OS内存调度["⚙️ OS内存管理"]
调度["分页调度<br/>换入换出<br/>按需加载"]
end
OS_CPU --> 调度
OS_L1 --> 调度
OS_RAM --> 调度
OS_DISK --> 调度
subgraph Letta["🤖 Letta Agent"]
L_CORE["Core Memory<br/>快速/活跃/当前上下文"]
L_ARCH["Archival Memory<br/>慢速/归档/向量存储"]
end
L_CORE --> L_ARCH
style 传统OS fill:#DDA0DD,stroke:#9370DB
style Letta fill:#98FB98,stroke:#228B22
note["OS: CPU看到的是虚拟地址空间<br/>Letta: LLM看到的是虚拟上下文"]2.2 Letta的分层记忆架构
flowchart TB
subgraph 当前上下文["📋 当前上下文(LLM直接可见)"]
CTX["对话历史<br/>当前会话"]
CORE["Core Memory<br/>核心记忆片段"]
SYSTEM["System Prompt<br/>角色设定"]
end
subgraph 归档存储["📦 Archival Memory(LLM不可直接访问)"]
ARCH["长期记忆<br/>历史对话/知识"]
FACTS["事实性知识<br/>用户偏好/经历"]
DOCS["文档摘要<br/>处理过的文档"]
end
subgraph 管理机制["🔧 记忆管理"]
RETRIEVE["检索机制<br/>当需要时召回"]
COMPACT["Compaction<br/>压缩不重要记忆"]
PAGE["分页调度<br/>按需加载"]
end
RETRIEVE --> ARCH
COMPACT --> ARCH
PAGE --> ARCH
CTX & CORE & SYSTEM --> 当前上下文
style 当前上下文 fill:#98FB98,stroke:#228B22
style 归档存储 fill:#87CEEB,stroke:#4169E1
style 管理机制 fill:#DDA0DD,stroke:#9370DB2.3 记忆块(Memory Blocks)
Letta用Memory Blocks作为记忆的基本单元:
flowchart TB
subgraph MemoryBlock类型["📦 Memory Block 类型"]
HUMAN["human block<br/>用户信息<br/>姓名/偏好/历史"]
PERSONA["persona block<br/>Agent人设<br/>性格/能力/目标"]
CUSTOM["custom blocks<br/>自定义记忆<br/>任意结构化信息"]
end
subgraph Block结构["🔧 Block结构"]
B1["label: 标识名称"]
B2["value: 记忆内容"]
B3["timestamp: 时间戳"]
end
HUMAN & PERSONA & CUSTOM --> Block结构
style MemoryBlock类型 fill:#DDA0DD,stroke:#9370DB
style Block结构 fill:#87CEEB,stroke:#4169E1Memory Block示例:
1 | # human block - 存储用户信息 |
三、核心机制深度解析
3.1 虚拟上下文管理(Virtual Context Management)
这是Letta/MemGPT的核心创新。它的原理是:
1 | 传统方案: Letta方案: |
flowchart TB
subgraph 虚拟上下文["🎭 虚拟上下文(LLM视角)"]
VIRT["LLM认为的完整上下文<br/>包含所有历史记忆<br/>看起来无限大"]
end
subgraph 实际分页["💾 实际分页管理"]
PAGE1["Page 1: Core Memory<br/>核心记忆(常驻)"]
PAGE2["Page 2: 当前对话<br/>最新交互"]
PAGE3["Page 3: 归档检索<br/>从Archival召回"]
PAGE4["Page N: 历史归档<br/>压缩存储"]
end
subgraph 调度器["⚙️ 上下文调度器"]
TRIGGER["触发条件检测"]
RECALL["检索召回"]
EVICT["换出(Evict)"]
COMPACT["压缩整理"]
end
VIRT --> 实际分页
实际分页 --> 调度器
调度器 --> VIRT
style 虚拟上下文 fill:#98FB98,stroke:#228B22
style 实际分页 fill:#87CEEB,stroke:#4169E1
style 调度器 fill:#DDA0DD,stroke:#9370DB3.2 Compaction(记忆压缩)
当Core Memory快要满的时候,Letta会自动触发Compaction:
flowchart TB
subgraph Compaction触发["⚡ 触发条件"]
C1["Core Memory使用率>80%"]
C2["上下文窗口接近上限"]
C3["用户明确要求整理"]
end
subgraph Compaction过程["🔄 压缩过程"]
P1["读取Archival Memory"]
P2["LLM分析记忆重要性"]
P3["压缩低价值记忆片段"]
P4["更新Core + Archival"]
end
subgraph 结果["✅ 压缩结果"]
R1["Core Memory释放空间"]
R2["关键信息保留在Core"]
R3["次要信息归档到Archival"]
end
C1 & C2 & C3 --> Compaction过程
Compaction过程 --> R1 & R2 & R3
style Compaction触发 fill:#FFA07A,stroke:#FF6347
style Compaction过程 fill:#FFE4B5,stroke:#FFA500
style 结果 fill:#98FB98,stroke:#228B22Compaction的判断逻辑(伪代码):
1 | function should_compact(core_memory, archival_memory): |
3.3 检索与召回机制
当Agent需要某个记忆但它不在Core Memory中时,触发检索:
sequenceDiagram
participant Agent as LLM Agent
participant Core as Core Memory
participant Retriever as 检索器
participant Archival as Archival Memory
participant LLM as 大语言模型
Note over Agent,Core: 场景:Agent需要某段历史记忆
Agent->>LLM: 需要查找"上次讨论的架构设计"
LLM->>Retriever: 发起检索请求
Retriever->>Archival: 向量相似度搜索
Archival-->>Retriever: 返回Top-K相关记忆
Retriever-->>Agent: 召回的记忆片段
Agent->>Core: 将召回记忆加入当前上下文
Note over Core: 如果空间不足,触发换出机制3.4 自我反思(Self-Reflection)
Letta的一个关键能力是让Agent能够主动反思和更新记忆:
flowchart TB
subgraph 反思触发["🤔 什么时候反思"]
T1["用户对话结束后"]
T2["记忆使用率过高时"]
T3["Agent主动请求"]
end
subgraph 反思过程["🔄 反思过程"]
F1["读取当前Core Memory"]
F2["LLM分析:哪些重要?哪些可以归档?"]
F3["更新persona block(自我认知)"]
F4["更新human block(用户理解)"]
F5["归档次要记忆到Archival"]
end
subgraph 反思结果["📝 反思输出"]
O1["更精确的自我认知"]
O2["更理解用户的偏好"]
O3["更高效的记忆结构"]
end
T1 & T2 & T3 --> 反思过程
反思过程 --> O1 & O2 & O3
style 反思触发 fill:#DDA0DD,stroke:#9370DB
style 反思过程 fill:#87CEEB,stroke:#4169E1
style 反思结果 fill:#98FB98,stroke:#228B22四、多Agent协作模式
Letta支持多种多Agent协作模式,适用于不同场景:
flowchart TB
subgraph 团队模式["👥 Multi-Agent团队模式"]
M1["Supervisor-Worker<br/>主管+执行者"]
M2["Round-Robin<br/>轮询协作"]
M3["Parallel Execution<br/>并行执行"]
M4["Producer-Reviewer<br/>生产-审查"]
M5["Hierarchical Teams<br/>层级团队"]
end
style 团队模式 fill:#DDA0DD,stroke:#9370DB4.1 Supervisor-Worker模式
flowchart TB
subgraph Supervisor["👔 Supervisor Agent"]
S1["理解用户整体需求"]
S2["分解为子任务"]
S3["分配给合适的Worker"]
S4["汇总Worker结果"]
end
subgraph Workers["👷 Worker Agents"]
W1["Worker-1<br/>代码编写"]
W2["Worker-2<br/>文档撰写"]
W3["Worker-3<br/>测试验证"]
end
subgraph Shared["🔗 Shared Memory"]
SM["共享记忆<br/>所有Agent可访问"]
end
S1 --> S2 --> S3
S3 --> W1 & W2 & W3
W1 & W2 & W3 --> S4
W1 & W2 & W3 -.-> SM
SM -.-> S4
style Supervisor fill:#87CEEB,stroke:#4169E1
style Workers fill:#98FB98,stroke:#228B22
style Shared fill:#DDA0DD,stroke:#9370DB4.2 Shared Memory(共享记忆)
Letta支持多Agent共享记忆,这是Multi-Agent协作的关键:
flowchart TB
subgraph Agent1["🤖 Agent-1 (Writer)"]
A1_CORE["Core: 写作规范记忆"]
A1_SHARED["Shared: 项目背景"]
end
subgraph Agent2["🤖 Agent-2 (Reviewer)"]
A2_CORE["Core: 评审标准记忆"]
A2_SHARED["Shared: 项目背景"]
end
subgraph 共享区["🔗 Shared Memory Zone"]
SHARED["项目规范<br/>代码风格<br/>架构决策"]
end
A1_SHARED -.-> SHARED
A2_SHARED -.-> SHARED
style Agent1 fill:#87CEEB,stroke:#4169E1
style Agent2 fill:#98FB98,stroke:#228B22
style 共享区 fill:#FFE4B5,stroke:#FFA500五、对比分析:Letta vs 其他记忆方案
5.1 记忆机制全景对比
flowchart LR
subgraph 方案["记忆方案"]
LTT["Letta<br/>分层记忆+OS调度"]
RAG["传统RAG<br/>向量检索"]
COT["CoT提示<br/>上下文链"]
MEM["简单记忆<br/>Summary摘要"]
end
LTT --> ADV["优势"]
LTT --> LIM["局限"]
ADV --> A1["✅ 主动管理记忆"]
ADV --> A2["✅ 自动压缩整理"]
ADV --> A3["✅ 长期记忆持久化"]
ADV --> A4["✅ 多Agent共享"]
LIM --> L1["⚠️ 架构复杂度高"]
LIM --> L2["⚠️ LLM本身能力依赖"]
style LTT fill:#98FB98,stroke:#228B225.2 详细对比表
| 维度 | Letta | 传统RAG | 简单Summary |
|---|---|---|---|
| 记忆管理 | 分层+自动压缩 | 静态向量库 | 手动总结 |
| 检索方式 | 主动召回+向量 | 纯向量相似度 | 无检索 |
| 记忆更新 | Agent主动反思更新 | 外部系统更新 | 人工更新 |
| 多Agent支持 | ✅ 原生支持 | ❌ 不支持 | ❌ 不支持 |
| 上下文利用 | 智能分页 | 全部加载 | 全量摘要 |
| 实现复杂度 | 高 | 中 | 低 |
| 适用场景 | 复杂Agent | 知识库问答 | 简单助手 |
5.3 核心差异解析
Letta vs 传统RAG的本质区别:
1 | 传统RAG: Letta: |
5.4 Letta vs AutoGen/MCP
| 维度 | Letta | AutoGen | MCP |
|---|---|---|---|
| 定位 | Agent记忆平台 | Multi-Agent对话框架 | Tool调用协议 |
| 核心能力 | 长期记忆管理 | Agent协作编排 | 工具标准化 |
| 记忆 | ✅ 内置分层记忆 | ❌ 无内置记忆 | ❌ 无记忆 |
| Multi-Agent | ✅ 团队+共享记忆 | ✅ 对话协作 | ❌ 协议层面 |
| 适用场景 | 个人助手/客服 | 复杂工作流 | 工具集成 |
六、快速上手
6.1 安装Letta
1 | # 安装Letta Server(Docker方式) |
6.2 创建第一个有记忆的Agent
1 | from letta_client import Letta |
6.3 使用Compaction和检索
1 | # 手动触发记忆整理 |
6.4 多Agent协作
1 | # 创建一个团队 |
七、架构实现原理
7.1 上下文窗口的”虚拟化”
Letta的核心思想可以用一个类比来理解:
1 | 传统LLM的上下文窗口 = 电脑的寄存器 |
flowchart TB
subgraph LLM视角["🤖 LLM的视角(看起来无限大)"]
INFINITE["虚拟上下文<br/>包含所有历史对话<br/>感觉拥有无限记忆"]
end
subgraph 实际管理["💾 实际发生的事"]
WINDOW["实际上下文窗口<br/>2048/4096/128K tokens"]
CORE["Core Memory<br/>64个记忆块<br/>始终在窗口内"]
ARCH["Archival Memory<br/>向量存储<br/>按需召回"]
end
subgraph 调度层["⚙️ Letta调度器"]
LOAD["加载(Load)<br/>从Archival到Core"]
STORE["存储(Store)<br/>从Core到Archival"]
EVICT["驱逐(Evict)<br/>清理不重要的记忆"]
end
INFINITE -.外观欺骗.-> 实际管理
调度层 --> LOAD & STORE & EVICT
LOAD -.召回.-> INFINITE
style LLM视角 fill:#98FB98,stroke:#228B22
style 实际管理 fill:#87CEEB,stroke:#4169E1
style 调度层 fill:#DDA0DD,stroke:#9370DB7.2 记忆重要性的判断
Letta使用LLM自己来判断记忆的重要性:
1 | def judge_importance(memory_block, context): |
7.3 Compaction的触发与执行
1 | class CompactionManager: |
八、局限性与发展
8.1 当前局限
flowchart TB
subgraph 局限性["⚠️ Letta的局限性"]
L1["LLM能力依赖<br/>Compaction质量取决于LLM"]
L2["延迟开销<br/>检索和压缩带来响应延迟"]
L3["记忆准确性<br/>LLM可能"忘记"重要事实"]
L4["架构复杂度<br/>比简单Agent框架复杂很多"]
end
style 局限性 fill:#FFA07A,stroke:#FF63478.2 未来发展方向
timeline
title Letta发展路线图
2026 Q2 : 记忆压缩算法优化
: 更智能的自动遗忘
2026 Q3 : 多模态记忆支持
: 图像/视频记忆存储
2026 Q4 : 个性化记忆模型
: 针对用户定制压缩策略
2027+ : 跨Agent持续学习
: 多Agent协作中共同进化九、总结
Letta解决的是一个根本性问题:LLM的上下文窗口有限,但人类的知识和需求是无限的。
它的解法——让Agent像操作系统管理内存一样管理记忆——看似简单,实际上打开了一扇新的大门:
1 | 传统Agent: 每次对话都是新的开始 |
核心洞察:
- 分层记忆比单一上下文更接近人类认知
- 主动管理比被动检索更高效
- OS思想给LLM架构带来了新的设计语言
Letta目前仍处于快速发展阶段,它的架构思路正在影响整个Agent设计领域。如果你在构建需要”记住用户”或”持续成长”的AI应用,Letta绝对值得深入研究。
参考资料
| 资源 | 链接 |
|---|---|
| GitHub | github.com/letta-ai/letta |
| 官网 | letta.com |
| 文档 | docs.letta.com |
| 论文 | arXiv:2310.08560 (MemGPT) |
| 模型排行榜 | leaderboard.letta.com |
| Discord社区 | discord.gg/letta |
Letta的思想可以用一句话总结:不是让LLM的上下文窗口变大,而是让它学会像我们一样——记住重要的,忘掉不重要的。