框架内建记忆横评
tRPC-Agent-Go 精读:精读: tRPC-Agent-Go Letta 精读:精读: Letta/MemGPT 记忆设计模式:记忆设计模式目录
调研元信息
| 项目 | 值 |
|---|---|
| 调研日期 | 2026-06-22 |
| 涉及研究轴 | E(框架内建) |
| 证据等级 | [已有] [文档] 混合 |
一句话定位
Agent 框架处理记忆有三条产品线——独立记忆库(mem0、DB-Agent-Memory)、框架内建记忆(tRPC-Agent-Go、Letta、LangGraph)、产品内建记忆(Claude Code、Codex)——三者的架构权衡和适用场景截然不同 [已有]。
记忆类型标注
| 类型 | 涉及 | 说明 |
|---|---|---|
| Working | 是 | 框架管理 session 上下文 |
| Profile | 间接 | 框架配置 |
| User | 是 | Fact/Episode Memory |
| External | 间接 | 通过 MCP/插件对接 |
三条产品线对比
flowchart TB
subgraph lib["独立记忆库"]
M0["mem0<br/>SDK,接入任何框架"]
DBAM["DB-Agent-Memory<br/>Host-Adapter 解耦"]
GR["Graphiti<br/>时序图谱"]
end
subgraph framework["框架内建记忆"]
TRPC["tRPC-Agent-Go<br/>Fact+Episode"]
LETTA["Letta<br/>Core+Archival OS"]
LG["LangGraph<br/>Store API"]
end
subgraph product["产品内建记忆"]
CC["Claude Code<br/>memdir"]
CX["Codex<br/>Phase1/2 pipeline"]
OC["OpenClaw<br/>flush+dreaming"]
end
lib -->|"可嵌入框架"| framework
lib -->|"可嵌入产品"| product
framework -->|"框架耦合"| APP[应用]
product -->|"产品锁定"| APP
tRPC-Agent-Go:Fact + Episode 双层
tRPC-Agent-Go 在 memory/ 目录下实现了经典的双层记忆 [已有]:
Episode Memory(episode.go):保留原始对话历史——谁说了什么、什么时候说的。是 Agent 的”自传体记忆”,无加工、无提炼,用于回溯和调试。
Fact Memory(fact.go):从对话中提炼的跨会话可复用知识——”用户偏好 Go 而非 Python”“这个服务的超时阈值是 3s”。是 Agent 的”语义记忆”,经过 LLM 加工。
与 DB-Agent-Memory 的对比:tRPC-Agent-Go 的 Fact/Episode 二分法可以映射到 DB-Agent-Memory 的金字塔——Episode ≈ L0(原始对话),Fact ≈ L1(原子事实)。但 DB-Agent-Memory 在 L1 之上还有 L2(场景块)和 L3(用户画像),提供了更高层次的抽象。
当前局限:StateGraph 缺少 Checkpoint 持久化的多后端支持——Memory 无法跨实例持久化,是明确的贡献机会 [已有]。
Letta/MemGPT:Agent 即记忆 OS
Letta 是所有方案中记忆系统最”重”的——它不是在框架上加记忆,而是围绕记忆设计整个框架 [已有]:
Core Memory(RAM):有字符限制的 Block,直接存在 system prompt 中,Agent 通过 core_memory_append / core_memory_replace 工具主动管理。
Archival Memory(硬盘):无限容量的归档,存在 PostgreSQL 中,Agent 通过 archival_memory_search / archival_memory_insert 工具主动查询。
Recall Memory:被动回忆——自动检索历史对话中的相关片段,补充 Archival 的主动搜索。
核心争议:Agent 自管理 vs 系统自动管理。Letta 让 Agent 自己决定”什么时候存”“存什么”“存到哪”——这需要强大的元认知能力。弱模型可能忘记保存重要信息,或者保存大量无用信息。DB-Agent-Memory 和 Claude Code 选择了系统自动管理,降低了对模型能力的依赖 [已有]。
LangGraph Store:外挂式持久记忆
LangGraph 通过 langgraph.store 提供了一个键值+向量的持久化 Store [文档]:
核心 API:put(namespace, key, value) / search(namespace, query) / get(namespace, key)
设计特点:
- namespace 隔离:按
(user_id, tool_name)等维度组织,支持多租户 - 向量搜索:存储时自动嵌入 value,search 支持语义查询
- 与 Checkpoint 分离:Store 是跨 thread(session)的长期记忆,Checkpoint 是单 thread 内的状态快照
与其他方案的关系:LangGraph Store 是一个通用的持久化层,不强制任何记忆组织范式——你可以用它实现扁平事实(类似 mem0)、也可以实现分层(类似 DB-Agent-Memory),取决于应用层代码如何使用 namespace 和 value 结构。
框架内建 vs 独立记忆库 vs 产品内建
| 维度 | 框架内建 | 独立记忆库 | 产品内建 |
|---|---|---|---|
| 耦合度 | 中(与特定框架绑定) | 低(SDK 可接入任何框架) | 高(与特定产品绑定) |
| 定制灵活度 | 高(可改框架代码) | 高(可换后端/算法) | 低(用户无法修改) |
| 开箱即用 | 中(框架内自动集成) | 低(需自行集成) | 高(零配置) |
| 记忆能力深度 | 中(框架聚焦编排不聚焦记忆) | 高(专注做记忆) | 中-高(产品级优化) |
| 可移植性 | 低(换框架=换记忆) | 高(框架无关) | 极低(锁定在产品中) |
| 代表 | tRPC-Agent-Go、Letta、LangGraph | mem0、DB-Agent-Memory、Graphiti | Claude Code、Codex、OpenClaw |
关键论点:三条产品线不是互斥的——独立记忆库可以通过 Adapter 嵌入框架(DB-Agent-Memory 的 Host-Adapter),也可以通过 MCP 被产品调用。理想的架构是”记忆库 + 框架适配 + 产品集成”的三层解耦。
局限性
- LangGraph Store 分析基于文档:未深入源码验证
[文档]。 - tRPC-Agent-Go 记忆分析基于已有精读:可能有遗漏
[已有]。 - 框架迭代很快:LangGraph、Letta 等可能已更新记忆设计。
证据等级汇总
| 论点 | 证据等级 |
|---|---|
| tRPC-Agent-Go Fact/Episode 架构 | [已有] deep-dive-trpc-agent-go.md |
| Letta Core/Archival/Recall 模型 | [已有] deep-dive-letta.md |
| LangGraph Store API | [文档] LangGraph 官方文档 |
| 三条产品线对比 | [推导] 基于全部精读 |