拆开 Agent Runtime:记忆、上下文与隔离在真实系统里如何被装配
博客列表 主页

写作状态:本文为骨架草稿。 系列前三篇已经把概念坐标系搭好,这一篇是”测绘”——需要我逐个读真实系统的代码和文档后再填实。先把结构、定位和待补的格子立在这里,内容随后逐步补全。下文标注 TODO 的小节均为占位。

拆开 Agent Runtime:记忆、上下文与隔离在真实系统里如何被装配

如果把 Mem0、Letta、Zep、LangGraph、OpenAI Agents SDK、Claude Code、OpenClaw、Hermes、PI 这些系统排成一列,很容易写成又一篇”工具百科”:每个产品一小节,讲功能、讲卖点。但这件事,我在《从智能体的认知结构到智能体框架》里已经对框架做过一轮(LangGraph / Dify / Coze / AutoGen / OpenAI SDK 的抽象对比),在《给 LLM 戴上确定性枷锁的外围工程》《Harness 到底是什么》里又对 Claude Code 的 harness 做过一轮拆解。再做一次逐产品横评,只会是前几篇的合订重印。

所以这篇文章换一个动作:不是横评,而是测绘(reconciliation)。前三篇加上这篇之前的两篇,已经留下了一整套坐标系——

  • CoALA 的记忆层次(工作记忆 / 情景 / 语义 / 程序记忆),来自认知结构篇;
  • L1/L2/L3 三层成本框架(全上下文 / 外部记忆 / 参数记忆),来自《Agent Memory 全景图》
  • 运行时上下文手法(compaction、reset、subagent、checkpoint、外部化、recitation),来自《Context is All You Need》
  • harness 三分(工程 / 产品 / 用户友好外壳),来自 harness 篇。

这篇文章要做的,就是把这套坐标系盖到真实系统上,回答两个前几篇没回答的问题:第一,当 L1 + L2 + L3 + 工具 + 隔离 + 治理被装配进一个具体系统时,接缝长什么样、谁和谁打架?第二,对照坐标系,哪些格子是理论说该有、而某个产品没做的

一个前提:不要头对头比,要看 stack 怎么拼

测绘之前,先立一个会贯穿全文的判断:这些系统不在同一层,硬把它们排成一张排行榜是错的。

  • 记忆层产品(Mem0、Letta、Zep):解决”记什么、怎么存、怎么召回”,本身不编排工具、不跑 agent loop。
  • 框架 / runtime(LangGraph、OpenAI Agents SDK):解决”怎么编排”,记忆只是其中一个子系统。
  • 端到端产品(Claude Code、OpenClaw、Hermes、PI):把上面两层 + 工具 + UI 装配成一个用户能直接用的东西。

所以正确的问法不是”Mem0 和 LangGraph 谁强”,而是”Mem0 + LangGraph 这个 stack 怎么拼、拼起来有没有重复或冲突“。本文的对比维度因此是装配关系,而不是功能多少。

先用一张表把三层压住(TODO:表格内容待逐项核实后填实):

代表系统 核心抽象 在坐标系里的位置 典型缺口
记忆层产品 Mem0 / Letta / Zep 抽取-更新-检索 / memory blocks / 时间图 L2 外部记忆 TODO
框架 / runtime LangGraph / OpenAI Agents SDK state+checkpoint+store / sessions+handoffs L1 调度 + 编排 TODO
端到端产品 Claude Code / OpenClaw / Hermes / PI CLAUDE.md+subagent+/compact / … L1+L2+工具+治理 TODO

记忆层产品:L2 的三种不同答案

TODO(读文档/代码后填实)。 这一节按”对账”展开,每个产品对应回 L2 框架的一个侧面:

  • Mem0:抽取 → 更新 → 检索的管线 + 自动去重(”最新事实胜出”);graph memory 为可选项。对账点:它对应 L2 写入侧的”对齐/版本化”,但冲突消解做得有多深?
  • Letta(MemGPT):memory blocks + 自编辑记忆 + LLM-OS 隐喻(把上下文当 OS 管理的内存分页)。对账点:它把 MemGPT 的”分页交换”产品化,对应 Context 篇的 compaction/reset,但它的边界在哪?
  • Zep(Graphiti):时间感知知识图谱 + fact-invalidation(旧事实标记失效但保留历史)。对账点:它正面回应了 Memory 篇反复强调的”时间有效性”难题——这是它最独特的格子。

框架 / runtime:L1 调度与编排怎么被抽象

TODO。 这一节对账”框架怎么把 L1 调度做成 API”:

  • LangGraph:state + checkpointer + store(短期线程态 vs 跨线程长期记忆)。对账点:checkpoint/fork 在这里是一等公民,正好对应 Context 篇的状态管理原语,但它把 compaction 留给了开发者。
  • OpenAI Agents SDK:sessions + handoffs + 模型侧 compaction。对账点:handoff 对应 Context 篇的 reset/handoff artifact,但 compaction 绑定在 Responses API 上。

端到端产品:装配的接缝在哪里

TODO。 这一节是全文重点——真实产品怎么把前两层 + 工具 + 治理拼起来:

  • Claude Code:CLAUDE.md(人写的持久上下文)+ auto-memory(模型写的)+ subagent 隔离 + /compact + checkpoint/fork。对照坐标系,它几乎每个 L1 格子都填了,但 L2 长期跨会话存储相对薄。
  • OpenClaw:TODO —— 面向异构个人环境(聊天/语音/设备/自动化)的装配,记忆与权限的接缝。
  • Hermes:TODO(作者后续读代码补,先占位)。
  • PI:TODO(作者后续读代码补,先占位)。Harness-as-a-Service 的形态。

它们在哪里真正分歧

TODO。 把对账结果收成几条真实分歧轴:

  • 记忆更新策略:手动编辑(Letta)vs 自动去重(Mem0)vs 时间失效(Zep)vs 确定性快照(LangGraph)——”谁/什么来更新记忆,为什么”的根本分歧。
  • 长上下文换出策略:DB 分页 / 压缩 / 时间剪枝 / checkpoint / 模型侧 compaction,各自的代价。
  • 多智能体取舍:这里承接 Context 篇留下的 Anthropic-vs-Cognition 辩论,但落在”产品实际怎么选”上。

对比维度表(骨架)

TODO:逐格填实。 行=系统,列=坐标系维度。

系统 L1 调度 L2 记忆层 L3 参数记忆 隔离模型 治理 / HITL 开放/闭源
Mem0 TODO TODO 开源+托管
Letta TODO TODO TODO TODO 开源+托管
Zep TODO TODO 闭源 SaaS
LangGraph TODO TODO TODO TODO 开源
OpenAI Agents SDK TODO TODO TODO TODO 闭源
Claude Code TODO TODO TODO TODO 闭源
OpenClaw TODO TODO TODO TODO TODO

作者偏好与开放问题

TODO。 读完代码后写:我自己更喜欢哪种装配方式、为什么;以及测绘暴露出的、整个领域仍然空着的格子。

参考资料