构建有状态的AI Agent:Letta(MemGPT)深度实践指南

深入学习如何使用 Letta(原 MemGPT)构建具有长期记忆的有状态 AI Agent,解决 LLM 的上下文窗口限制问题。

AgentList Team · 2025年2月22日
LettaMemGPTAI Agent长期记忆

LLM 的上下文窗口限制是构建长期运行的 AI Agent 的主要挑战。Letta(原 MemGPT)提供了一种优雅的解决方案。

Letta 核心概念

Letta 采用了一种虚拟上下文管理架构:

  • 主上下文 (Main Context): LLM 可见的上下文窗口
  • 外部上下文 (External Context): 存储在持久化存储中的信息
  • 核心记忆 (Core Memory): 关于用户的基本信息
  • 递归记忆 (Recall Memory): 对话历史摘要

快速开始

安装

pip install letta

创建 Agent

from letta import create_client

client = create_client()

agent = client.create_agent(
    name="my_assistant",
    system="你是一个有帮助的AI助手"
)

# 发送消息
response = client.send_message(
    agent_id=agent.id,
    message="你好,我是小明"
)

记忆管理机制

Letta 的核心创新是自动化的记忆管理:

  1. 自动摘要: 当上下文窗口满时,自动生成摘要
  2. 记忆检索: 根据对话内容检索相关记忆
  3. 记忆更新: 动态更新用户画像和偏好

实战案例:个人助理 Agent

from letta import LocalClient

client = LocalClient()

# 创建具有长期记忆的助理
agent = client.create_agent(
    name="personal_assistant",
    system="""
    你是一个个人助理,需要记住:
    1. 用户的基本信息和偏好
    2. 重要的日程和任务
    3. 过往对话的关键信息
    """
)

# Agent 会自动记住用户偏好
client.send_message(
    agent_id=agent.id,
    message="我喜欢简洁的回答,不需要太多客套话"
)

# 后续对话会应用这个偏好
client.send_message(
    agent_id=agent.id,
    message="今天天气怎么样?"
)

与其他框架对比

特性 Letta LangChain Memory Mem0
自动记忆管理 部分
透明记忆访问
白盒架构 部分

最佳实践

  1. 合理设计系统提示: 指导 Agent 如何管理记忆
  2. 定期清理: 避免记忆过度膨胀
  3. 监控性能: 注意 token 使用和响应时间

总结

Letta 为构建具有长期记忆的 AI Agent 提供了优雅的解决方案,是开发复杂 Agent 系统的重要工具。

Letta 的设计哲学:虚拟化操作系统

Letta 把 LLM 当作"CPU",把上下文窗口当作"内存"。这个类比决定了它的架构:

  • 主上下文 (Main Context) = 物理内存:LLM 当前能看到的上下文
  • 外部上下文 (External Context) = 硬盘:长期存储的记忆、文档、知识
  • 核心记忆 (Core Memory) = 寄存器:高频访问的关键信息(用户偏好等)
  • 递归记忆 (Recall Memory) = 磁盘缓存:对话历史的索引摘要

Agent 在每次推理时,自主决定哪些信息应该被加载到主上下文、哪些应该被写回外部上下文。这种"自管理"架构让 Letta 能处理跨 session、跨用户的长期任务。

记忆的"真实性"问题

很多人误以为 Letta 的记忆就是"完美记住所有事",实际上:

  • 记忆是模型重建的:基于摘要和检索,不是原始 log
  • 会遗忘细节:超过阈值的细节会被压缩或丢弃
  • 可能编造:模型可能基于历史模式生成不存在的"记忆"
  • 检索不是 100% 准确:向量检索可能召回不相关的"记忆"

因此关键业务场景必须在 prompt 里加 "如果不确定,请询问用户" 的兜底逻辑。

与传统 RAG 的关键差异

Letta 和传统 RAG 的对比:

维度 传统 RAG Letta
数据来源 静态文档库 动态对话 + 用户行为
更新方式 离线重建 实时增删
检索目标 相关文档 相关记忆
上下文管理 固定 prompt 自主管理
适合场景 知识问答 个人助理

简单判断:如果你的核心需求是"基于文档回答问题",RAG 更合适;如果是"长期陪伴用户的个人助理",Letta 更合适。

记忆工程的常见反模式

新手最容易犯的几个错误:

  1. 让 Agent 记住一切——记忆库无限膨胀,检索效率急剧下降
  2. 不做记忆优先级——所有记忆平等存储,关键信息被淹没
  3. 不区分长期/短期——把临时上下文写进核心记忆,污染用户画像
  4. 没有"遗忘机制"——过期信息不清理,检索质量下降

正确做法是有意识地设计记忆生命周期

  • 短期记忆(< 24h):自动清理
  • 中期记忆(用户偏好):永久保留
  • 长期记忆(关键事件):明确标注,定期回顾

监控与可观测性

Letta Agent 上线后必须监控的关键指标:

  • 记忆命中率:用户 query 触发记忆检索的成功率
  • 记忆膨胀速度:每周新增记忆条目数;超过阈值告警
  • 核心记忆大小:超过 token 预算需要清理
  • 跨 session 一致性:同一用户不同 session 的回答是否一致

可以用 Langfuse 这类平台接 trace,看到每次推理时记忆的读写情况。

与 Mem0 的取舍

两个常被对比的项目:

  • Letta:完整 Agent 框架,自带记忆、工具、推理
  • Mem0:专注记忆层,可与任意 Agent 框架集成

选择建议:

  • 想要开箱即用的 Agent + 记忆 → Letta
  • 已有 LangChain / CrewAI 等 Agent 框架,只想加记忆 → Mem0
  • 多个 Agent 共用同一记忆库 → Mem0

两者并不冲突,可以并存(Mem0 增强 Letta 的记忆共享能力)。

真实落地挑战

Letta 项目落地的常见困难:

  1. 调试困难:记忆检索是黑盒,调试时不知道 Agent 为什么"记住"或"遗忘"
  2. 成本控制:每次记忆读写都触发 LLM 调用,长期使用成本累积
  3. 隐私问题:用户偏好是隐私数据,需要加密存储和访问控制
  4. 冷启动:新用户没有历史记忆,Agent 表现像"陌生人"
  5. 多 Agent 一致性:多个 Agent 共享同一用户画像时容易冲突

选型决策表

场景 推荐方案
个人助理 / 陪伴型 AI Letta
客户支持(长期客户关系) Letta + 自定义工具
知识库问答 RAG + 短记忆
任务型 Agent(无状态) 不需要记忆框架
多 Agent 共享记忆 Mem0 + 任意框架

不要为了"用 Letta 而用 Letta"。如果你的 Agent 不需要长期记忆,简单 RAG + 短 session 内存就够了。