OpenClaw、Claude Code、Hermes Agent 记忆系统比较

● ● ●
1. 背景与理论框架
1.1. 核心问题
大语言模型本身是无状态的——每次调用都从零开始,它不记得任何事情。这个根本约束决定了所有 Agent 框架都必须在模型外面搭一套记忆系统,并回答四个架构问题: 存什么、存在哪、怎么取、怎么管 。
1.2. 记忆的四个层次
Agent 记忆通常被划分为四种类型,其中 外部记忆 和 情景记忆 是三个框架差异最大的地方:
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

● ● ●
2. OpenClaw:文件系统即记忆
2.1. 核心设计
OpenClaw 的记忆架构建立在一个极简原则上: 没有写进文件的,不存在 。所有长期状态必须持久化到磁盘上的 Markdown 文件里,文件本身就是记忆的存储介质,也是人机协作的接口。
为什么选择文件而不是数据库? 文件的人类可读性、手动可编辑性和 Git 版本可回溯性是数据库不具备的。代价是查询能力远不如数据库。
2.2. 三层记忆结构
|
|
|
|
|
|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
这套分层设计的核心思想是: 模型不需要知道所有事,只需要知道此刻最相关的事 。
2.3. 检索机制:BM25 + 向量混合搜索
底层以 SQLite 为基础,建立 FTS5 全文索引和 sqlite-vec 向量索引,支持语义搜索与精确匹配的混合检索。向量维度为 1536,且具备优雅降级能力——如果没有安装向量扩展,系统回退到 JS 暴力计算。
2.4. 长期记忆演进:Dreaming 系统
OpenClaw 设计了一套名为 “Dreaming” 的后台记忆巩固系统,通过 Cron 定时任务自动运行,将短期信号逐步转化为长期记忆。Dreaming 由三个阶段组成,按顺序依次执行: Light → REM → Deep 。
Light :识别当日日志中的关键信息
REM :跨日志关联,发现模式和趋势
Deep :将经过验证的模式写入长期 MEMORY.md
2.5. 核心痛点
记忆只进不出 :OpenClaw 的 MEMORY.md 是纯追加模式,用几个月就膨胀成几万行的“怪兽文件”,患上了“数字囤积症”。
提炼依赖人工 :从日志升级到长期记忆主要靠人手动维护,自动化程度有限。
记忆质量不稳定 :写入决策完全由 LLM 自主判断,无结构化约束。

● ● ●
3. Claude Code:分层索引的 Hint 型记忆
3.1. 核心设计
Claude Code 的记忆系统定位为 Hint 型记忆 ,以项目为单位的文件系统方案,提供结构化分层组织。它没有一个庞大的知识库,而是将记忆划分为多个主题文件,通过一个索引文件串联。
3.2. 四层架构
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
用户写入的 CLAUDE.md 是静态的、预先设定的规则;而 Auto Memory 是动态的——Agent 在会话中发现有价值的信息时,会自动保存为 Markdown 文件。
3.3. 四种记忆类型
系统通过 memoryTypes.ts 严格定义了四种记忆类型,各有明确的作用域和存储规则:
|
|
|
|
|
|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
每个笔记是独立的 Markdown 文件,MEMORY.md 充当索引——每行不超过 150 字符的简短标签指向详细文件,Claude 先读索引再按需拉取具体文件。
3.4. 存储路径
~/.claude/projects/<project-path>/memory/ ├── MEMORY.md # 索引文件,每行一个条目指针 ├── user_role.md # 用户的角色和技能 ├── feedback_testing.md # 测试规范的反馈 ├── project_auth.md # 认证模块的决策 └── reference_linear.md # 外部工具引用
3.5. 核心痛点
200 行索引硬上限 :最多约 200 条记忆,超出无法写入。
仅精确关键词匹配 :搜索依赖关键词匹配,“port conflicts”搜不到“docker-compose mapping”。
记忆不出 Claude Code :切换到其他 Agent 从零开始。
无中长期记忆桥接 :Auto Dream 能处理几天内的杂讯,但无法跨越月级时间。

● ● ●
4. Hermes Agent:主动学习型的自进化记忆
4.1. 核心设计
Hermes Agent 的记忆系统是其“自我成长”能力的核心支撑。它设计得极为克制——核心记忆仅由 两个纯文本文件 承载,用 § 分隔条目:
~/.hermes/memories/ ├── MEMORY.md # Agent 的个人笔记(环境事实、项目约定、工具怪癖) └── USER.md # Agent 对用户的认知(偏好、沟通风格、工作习惯)
MEMORY.md :限 2,200 字符
USER.md :限 1,375 字符
这两个严格的上限产生了巧妙的设计效果:容量有限迫使 Agent 挑重要的事情记,不重要的自然被挤掉。与 OpenClaw 的“只进不出”形成鲜明对比——Hermes 通过硬约束迫使 Agent 做信息压缩,过时的自然被淘汰,留下的都是高密度事实。
4.2. 超限处理机制
当新记忆会导致超限时,Hermes 选择让 add 操作直接失败,并把当前所有条目返回给 LLM,让模型自己决策保留什么、删除什么——而非静默丢弃或自动压缩。这种设计赋予模型对记忆的完全掌控权。
4.3. 三层记忆架构
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
工作记忆层的 FTS5 检索引擎支持 TB 级上下文数据的毫秒级检索,辅以 LLM 生成的摘要,确保 Agent 能想起数周前的对话细节。
4.4. 主动触发与自我进化
Hermes 的最大区别在于 触发时机的主动性 。OpenClaw 是被动触发式记忆——用户说“记住”才会记;Claude Code 做到了主动记录,但底线是“对事不对人”。
而 Hermes 的记忆系统是 有机的 :
自动记忆写入 :Agent 自主判断哪些信息值得存入 MEMORY.md/USER.md
Skill 自主创建 :当 Agent 调用 5 次以上工具、自我纠错或被用户纠正后,自动将成功经验蒸馏为结构化的 Skill 文件。如果后续发现更优路径,还会通过“补丁”方式优化已有技能
Nudge Engine :定时提醒 Agent 回顾历史,检查是否有值得提炼的经验
用户建模(Honcho 引擎) :感知用户的回复风格偏好(简洁 vs 详细)、领域背景(资深工程师 vs 初学者),实现“辩证式”用户理解
4.5. 记忆冻结快照
MemoryStore 维护两组平行状态——实时可写的条目列表和会话开始时冻结的快照。这种设计保证了前缀缓存效率——同一会话中 system prompt 不必反复变化。

● ● ●
5. 记忆压缩算法深度对比
记忆的“存储”只是手段,“记住该记的、忘掉该忘的”才是目的。三个框架在 压缩算法上的分歧 ,比存储结构上的分歧更本质——它直接决定 Agent 长期运行后的信息密度有多高。
5.1. OpenClaw:渐进式巩固(Dreaming 管线)
OpenClaw 不删除数据,而是通过 “巩固” 模拟人类睡眠的记忆加工过程,将原始日志逐级抽象。其压缩管线可抽象为三层提炼:
原始日志 (Daily Log) │ ▼ Light : 提取当日实体、决策、关键事件,消除时间线冗余,生成结构化摘要 │ ▼ REM : 跨日志关联,合并重复事实,识别模式(如“用户总是拒绝 Docker 方案”) │ ▼ Deep: 将高置信度模式蒸馏为持久记忆规则,写入 MEMORY.md
压缩策略特征 :
算法类型 :提取式摘要 + 多步关联推理,基于 LLM 提示链
核心机制 :不丢弃任何原始数据,原始日志始终保留;上层提取物仅作为快捷索引
压缩比 :无硬约束,压缩比取决于 LLM 输出长度,典型 20:1~50:1
信息丢失风险 :极低(原始完整日志可回溯),但检索效率随日志膨胀而线性下降
遗忘控制 :无主动遗忘机制,冗余信息通过人工清理实现
优劣 :信息保真度最高,但“数字囤积症”是最大代价——三个月后 Agent 调取记忆需要扫描数万行日志。
5.2. Claude Code:索引合并 + 摘要头
Claude Code 的压力来自 200 行索引硬上限 。当记忆条目逼近阈值时,需执行压缩。其 Auto Dream 机制运作方式如下:
碎片合并 :将多个内容高度重叠的笔记文件合并为一个概括性文件,原文件被新文件替代
生成摘要头 :每个记忆文件开头生成一句不超过 150 字符的摘要行,作为索引条目
索引瘦身 :合并后旧索引行删除,总索引行数不突破 200 行阈值
压缩策略特征 :
算法类型 :合并式压缩 + 提取式摘要,单向不可逆
核心机制 :基于 LLM 的文本整合,产生一个“覆盖旧事实的新版本”,旧细节永久丢失
压缩比 :强制遵守索引上限,驱动压缩频率;压缩比受条目数量驱动,无固定值
信息丢失风险 :高,细节在合并中可能被平滑掉,特别是低频但重要的边缘案例
遗忘控制 :类似“覆盖式遗忘”——新综合描述替代细粒度历史记录,无法回退
优劣 :查询极快(索引文件仅 200 行),但语义保真度在迭代压缩中持续衰减,对长期跨项目知识积累不友好。
5.3. Hermes Agent:有界淘汰 + 模型自主裁剪
Hermes 的压缩由其 硬字符上限 驱动,不依赖后台定时任务,而是在记忆写入时实时判断。实现机制分两层:
原子写入失败触发 :当 add 操作超过字符上限时,API 返回失败,同时将现有全部条目序列化后送入 LLM
模型自主决策 :LLM 需要同时完成两件事——评估新记忆的重要程度,并从现有条目中 自选淘汰对象 。它可能选择: 直接丢弃新记忆(如果新信息重要性低) 删除一条旧的不再相关的条目(如一个已修复的工具 Bug 怪癖) 将两条高度相关的旧条目压缩合并为一条高密度表述,腾出空间 重新权衡全局优先级,进行大规模重排
压缩算法可以被形式化为一个受限优化问题:
给定现有记忆集合 M,每条记忆 m_i 有价值分数 s_i(LLM 自行评估),总字符约束 C_max,新记忆 m_new 的估计价值 s_new。求解子集 M’ ⊆ M ∪ {m_new},满足 ∑ len(m_i) ≤ C_max 且 ∑ s_i 最大化。
压缩策略特征 :
算法类型 :淘汰式裁剪 + 信息高度浓缩,LLM 作为剪枝函数
核心机制 :硬约束倒逼;淘汰在写入时刻 同步 完成,不依赖后台定时任务
压缩比 :确定性的 2,200 / 1,375 字符硬分割,信息密度随时间持续上升
信息丢失风险 :中等,且有“结构性遗忘”风险——被淘汰的条目不可恢复
遗忘控制 :主动自然淘汰——旧的不相关记忆被新信息挤出,模仿人类有限记忆模型
对比 OpenClaw 的“只进不出”和 Claude Code 的“后台合并覆盖”,Hermes 的淘汰是显性、有记录且由模型全权决策的 ——每次决策都是一个完整的记忆管理对话回合。
5.4. 压缩算法三向对比
|
|
|
|
|
|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

● ● ●
6. 三框架核心对比总览
|
|
|
|
|
|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

● ● ●
7. 选型建议
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
三个框架的压缩算法分歧,本质上是对「完美记忆」与「有用记忆」的不同追求—— OpenClaw 保证你什么都不丢,Claude Code 保证你找得快,Hermes Agent 保证你记下的都是值得的 。没有绝对优劣,核心取决于你对 Agent 的定位:是一个需要你精心照料的无限记事本,还是一个能自己打理记忆、越用越懂你的智能伙伴。
夜雨聆风