引言你有没有遇到过这种情况和AI聊了很久结果它失忆了之前说的全忘了MemGPT现更名为Letta正是为了解决这个问题。它借鉴操作系统虚拟内存的思想让固定上下文窗口的LLM拥有了无限上下文的错觉。项目概览GitHub: https://github.com/letta-ai/lettaStars: 12kLicense: Apache-2.0原名: MemGPT一、核心问题LLM的上下文瓶颈1.1 有限上下文窗口即使是最先进的LLM上下文窗口也有物理限制GPT-4o: 128K tokensClaude 3.5: 200K tokensGemini 1.5: 1M tokens但实际场景中可能需要处理无界的历史对话、超长文档检索、多会话记忆。1.2 传统方案的局限方案局限上下文窗口滑动早期信息丢失摘要压缩细节丢失不可逆RAG仅检索无法主动记忆二、MemGPT的核心思想2.1 操作系统启示录MemGPT的灵感来自操作系统LLM上下文窗口 ≈ 计算机RAM 外部向量存储 ≈ 计算机磁盘 分页机制 ≈ MemGPT的记忆管理就像OS将不常用的数据swap到磁盘MemGPT让LLM主动管理上下文内存与外部存储之间的数据流动。2.2 记忆层级设计┌─────────────────────────────────────┐ │ 主上下文 (Main Context) │ │ ┌─────────────────────────────────┐│ │ │ 系统指令 (只读) ││ │ │ 工作上下文 (可读写) ││ │ │ FIFO队列 (消息历史) ││ │ └─────────────────────────────────┘│ └─────────────────────────────────────┘ ↑ ↓ 分页 ┌─────────────────────────────────────┐ │ 外部上下文 (External Context) │ │ ┌───────────────┬─────────────────┐│ │ │ 召回存储 │ 归档存储 ││ │ │ (对话历史) │ (长文档/向量) ││ │ └───────────────┴─────────────────┘│ └─────────────────────────────────────┘三、核心模块解析3.1 主上下文Main Context系统指令MemGPT控制流、内存层级用途、函数调用规则只读工作上下文存储用户关键信息如用户偏好“我叫张三”事实信息“我在北京工作”Agent角色信息FIFO队列滚动存储消息历史头部含已淘汰消息的递归摘要3.2 外部上下文External Context召回存储消息数据库存储所有对话历史支持搜索与重新调入归档存储基于向量数据库如pgvector存储长文档、用户画像等3.3 核心功能模块队列管理器管理消息的追加、LLM推理触发上下文溢出控制70%警告阈值、100%刷新阈值触发内存压力提示引导LLM主动管理记忆函数执行器解析LLM输出的函数调用执行记忆管理函数搜索外部存储、修改工作上下文反馈执行结果给LLM四、快速上手4.1 安装pipinstallletta-client4.2 创建Agentfromletta_clientimportLetta clientLetta(tokenYOUR_API_KEY)# 创建带记忆块的Agentagent_stateclient.agents.create(modelopenai/gpt-4o-mini,memory_blocks[{label:human,value:User info here,limit:5000},{label:persona,value:Agent personality,limit:5000}])print(fAgent ID:{agent_state.id})4.3 对话交互# 开始对话responseclient.agents.messages.create(agent_idagent_state.id,messages[{role:user,content:你好我叫张三在北京工作}])# 检查记忆更新agent_stateclient.agents.get(agent_state.id)print(agent_state.memory)4.4 用户记忆更新# 用户纠正信息responseclient.user_message(agent_idagent_id,messageActually, my name is Charles)# Agent自动通过 tool:update_memory 更新记忆五、进阶功能5.1 睡眠模式Sleep-time Agentsagent_stateclient.agents.create(modelopenai/gpt-4o,enable_sleeptimeTrue# 启用后台整理)睡眠模式允许Agent在低交互期间后台整理记忆保持响应速度。5.2 多Agent共享记忆# 创建共享内存块shared_blockclient.blocks.create(labelorganization,description团队共享信息,value初始团队数据)# 多个Agent附加到同一内存块managerclient.agents.create(block_ids[shared_block.id])workerclient.agents.create(block_ids[shared_block.id])5.3 文件知识库# 上传文档folderclient.folders.create(name产品文档,embedding_config{provider:openai,model:text-embedding-3-small})jobclient.folders.files.upload(folder_idfolder.id,fileopen(manual.pdf,rb))# Agent自动检索相关文档六、技术架构6.1 存储后端存储类型适用场景PostgreSQL生产环境多AgentSQLite开发测试单AgentChroma原型验证6.2 工具调用流程用户消息 → 队列管理器 → LLM推理 → 函数调用 ↓ 内存更新 ← 执行结果反馈 ← 函数执行器6.3 上下文溢出处理# 阈值触发机制WARNING_THRESHOLD0.7# 70%上下文REFRESH_THRESHOLD1.0# 100%上下文# 内存压力时的处理流程1.生成递归摘要2.淘汰部分消息如50%窗口3.摘要写入FIFO头部4.原消息移入召回存储七、适用场景7.1 典型应用场景价值长期对话助手跨会话记忆用户偏好个人知识库消化海量文档主动检索客服机器人理解完整对话上下文研究助手管理大量文献记忆7.2 与RAG对比维度MemGPT传统RAG信息来源Agent主动管理被动检索上下文利用智能分层全量注入长对话原生支持需额外处理实现复杂度中等较低八、局限性延迟开销记忆管理增加LLM调用延迟存储依赖需要配置数据库后端调试复杂记忆状态管理不易追踪资源消耗向量索引占用存储空间总结LettaMemGPT通过虚拟上下文管理的创新思想让LLM突破了固定上下文窗口的限制分层记忆主上下文 外部存储主动管理LLM自主决定何时swap数据无限对话跨会话持久记忆RAG增强超越被动检索的智能知识管理对于需要长期记忆和多会话上下文的应用Letta提供了一个优雅的解决方案。参考链接GitHub: https://github.com/letta-ai/letta论文: https://arxiv.org/abs/2310.08560文档: https://docs.letta.com