01 | AI Agent 架构设计:记忆系统 ——OpenClaw、Claude Code、Hermes Agent 对比
01 | AI Agent 架构设计:记忆系统 ——OpenClaw、Claude Code、Hermes Agent 对比
声明:📝 作者:甜城瑞庄的核桃(ZMJ)
原创学习笔记,欢迎分享,但请保留作者信息及原文链接哦~
前言
| 基本信息 | 内容 |
|---|---|
| 系列 | AI Agent 架构设计(一):记忆系统 |
| 核心目标 | 语言模型本身无状态,所有 Agent 框架都必须在外面搭一套记忆系统——三个框架给出了三种截然不同的答案 |
| 适合读者 | 想理解 Agent 记忆系统底层设计取舍的开发者 |
| 预计阅读 | 20 分钟 |
设计一个 AI Agent,第一个绕不过去的问题不是"用什么模型",而是:
语言模型本身没有状态。每次调用都从零开始,它不记得任何事情。
这个根本约束,决定了所有 Agent 框架都必须在模型外面搭一套记忆系统。这套系统要回答四个架构问题:
- 存什么——哪些信息值得保留,哪些该丢弃
- 存在哪——用什么介质,什么格式,什么生命周期
- 怎么取——需要的时候怎么找到,精确匹配还是语义搜索
- 怎么管——记忆怎么衰减、更新、压缩,防止积累成噪音
OpenClaw、Claude Code、Hermes Agent 对这四个问题给出了三种截然不同的答案。本文把它们放在一起逐层拆解,帮你看清楚记忆系统设计的核心取舍。
一、理论框架:记忆的四个层次
在拆解三个框架之前,先建立统一的分析框架。
研究界把 Agent 记忆分成四种类型,对应不同的存储机制和访问方式:
┌─────────────────────────────────────────────────────────────────┐ │ AI Agent 记忆系统:四层架构 │ ├──────────────────┬──────────────────────────────────────────────┤ │ 记忆类型 │ 特征描述 │ ├──────────────────┼──────────────────────────────────────────────┤ │ 上下文记忆 │ 当前 Token 窗口内容 │ │ (In-context) │ • 访问成本最低,零延迟 │ │ │ • 容量有限(受模型上下文窗口限制) │ │ │ • 会话结束即消失 │ ├──────────────────┼──────────────────────────────────────────────┤ │ 外部记忆 │ 持久化在模型外部的存储 │ │ (External) │ • 文件、数据库、向量库 │ │ │ • 跨会话存活 │ │ │ • 每次访问需要检索步骤 │ ├──────────────────┼──────────────────────────────────────────────┤ │ 情景记忆 │ 过去行为的结构化记录 │ │ (Episodic) │ • 不只存事实,存"做过什么、怎么做的、结果如何" │ │ │ • Agent 从自身经验学习的基础 │ │ │ • 三个框架差异最大的地方 │ ├──────────────────┼──────────────────────────────────────────────┤ │ 参数记忆 │ 模型训练权重里编码的知识 │ │ (Parametric) │ • 始终存在,不需要检索 │ │ │ • 运行时无法更新 │ │ │ • 存在幻觉风险 │ └──────────────────┴──────────────────────────────────────────────┘真正有趣的架构问题,是外部记忆和情景记忆怎么设计——这是三个框架差异最大的地方。参数记忆由模型决定,上下文记忆人人都有,不是架构差异的来源。
下面逐一拆解三个框架在外部记忆和情景记忆上的设计决策。
二、OpenClaw:文件系统即记忆
2.1 核心设计决策:文件是唯一真理
OpenClaw 的记忆架构建立在一个极简原则上:
没有写进文件的,不存在。
这不是一句口号,而是一个硬性架构约束。Agent 的所有长期状态,必须持久化到磁盘上的 Markdown 文件里。文件本身就是记忆的存储介质,也是人机协作的接口。
为什么选择文件而不是数据库?
这是一个刻意的工程取舍。文件有三个数据库没有的特性:
| 特性 | 说明 |
|---|---|
| 人类可读(Transparent) | 用任何文本编辑器打开即可查看 Agent 的完整记忆 |
| 手动可编辑(Editable) | 直接修改文件即可纠正错误记忆,无需通过 API |
| 版本可回溯(Version-controllable) | 用 Git 追踪记忆变化历史,可 diff、可 revert |
代价是:文件系统的查询能力远不如数据库。复杂的关系型查询、快速的精确匹配,都是文件的弱项。
2.2 文件目录结构
OpenClaw 的核心文件结构如下:
OpenClaw Root / ├── SOUL.md # Agent 身份与人格定义(永久静态) │ Agent 的核心人格,始终存在于系统提示 ├── MEMORY.md # 长期精华记忆 │ 从日志中沉淀出的稳定事实、用户偏好、工作规范 │ 每次会话都加载,始终在场 └── memory/ # 短期日志目录(每日工作志) ├── 2026-04-12.md # 今天的工作日志 ├── 2026-04-11.md # 昨天的工作日志 └── YYYY-MM-DD.md # 历史日志(通过检索访问)设计要点说明:
SOUL.md:Agent 的人格内核,定义"这个 Agent 是谁",永久静态,不随会话变化MEMORY.md:精华提炼层,存放高价值的稳定信息,每次会话自动注入上下文memory/YYYY-MM-DD.md:今日及昨日的日志自动注入当前上下文,更早的日志通过检索访问
2.3 两层记忆结构:短期与长期的分离
OpenClaw 把外部记忆分成两层,对应两种不同的信息生命周期:
