OpenClaw vs Hermes Agent:记忆模块深度技术解析
|
|
01OpenClaw的记忆架构:多层混合系统
1.1 整体架构设计
OpenClaw的记忆系统是一个多层混合架构,核心理念是”文件优先、索引辅助”。根据官方文档,它将记忆分为以下层级:
工作区记忆(Workspace Memory):这是”真正的记忆”,以纯文本Markdown文件存储,人类可直接阅读和编辑。典型布局包括:
• memory/YYYY-MM-DD.md — 每日日志(仅追加)• MEMORY.md — 长期精选记忆
会话记忆(Session Memory):以JSONL格式存储会话历史,位于 sessions/ 目录下。每个 .jsonl 文件包含完整的会话转录,每条消息包含消息ID、角色、内容、时间戳等元数据。
派生索引(Derived Index):基于SQLite的向量索引层,用于语义搜索。这个索引层是”可重建的”,如果丢失可以从源文件重新生成。
1.2 核心技术实现:MemoryIndexManager
OpenClaw记忆系统的中枢是 MemoryIndexManager 类。根据源码分析:
• 架构模式:Manager单例模式,带懒加载初始化• 文件监听:使用file watcher实现实时重新索引• Mixin设计:manager-embedding-ops.ts、manager-sync-ops.ts等混入类组合到MemoryIndexManager中• 缓存机制:带INDEX_CACHE防止重复索引
关键特性是Per-Agent隔离:通过 agentId 实现多Agent工作流的独立命名空间。每个Agent拥有独立的SQLite存储(~/.openclaw/memory/<agentId>.sqlite),避免记忆交叉污染。
1.3 向量索引与混合检索
OpenClaw支持三种搜索后端:
1. 默认SQLite向量搜索:开箱即用,但对精确token匹配较弱2. SQLite混合搜索(BM25 + 向量):良好的中间方案,无需额外安装3. QMD + LLM重排序:最准确的选项,需要独立的sidecar进程
向量存储使用 sqlite-vec 扩展。Embedding Provider支持多种配置:
• 内置支持:OpenAI、Gemini、Voyage、Mistral、Ollama和本地GGUF模型• 可选QMD sidecar后端:提供MMR多样性重排序和时间衰减等高级功能• 本地模式:使用 node-llama-cpp 实现完全本地化
1.4 每日日志与自动刷新
OpenClaw的每日日志系统:
• memory/YYYY-MM-DD.md 是仅追加文件,捕获日常活动、决策和运行上下文• 每次会话启动时自动加载今天和昨天的日志• 旧日志可通过语义搜索查询,但默认不加载• Agent在对话过程中自动追加到今天的日志
1.5 MEMORY.md 长期记忆
OpenClaw也使用 MEMORY.md 作为长期精选记忆文件,包含:
• 重要决策和偏好• 项目约定和模式• 长期待办事项和目标• 需要持久保存的关键事实
注意:MEMORY.md 仅在私人会话中加载,不会在群组上下文中加载,以保护敏感信息。
02Hermes Agent的记忆架构:精简确定性系统
2.1 核心记忆文件
Hermes Agent使用两个持久化文件存储核心记忆,位于 ~/.hermes/memories/ 目录下:
MEMORY.md(智能体笔记):
• 路径:~/.hermes/memories/MEMORY.md• 容量上限:2200个字符• 用途:存储智能体自己的工作笔记、重要发现、项目约定、工具使用经验等• 典型内容:环境事实、项目约定、发现的解决方案、经验教训
USER.md(用户档案):
• 路径:~/.hermes/memories/USER.md• 容量上限:1375个字符• 用途:存储用户的个人信息、习惯、背景知识• 典型内容:职业、技术栈、沟通偏好、工作习惯
两个文件都使用 §(section sign)作为条目分隔符。当记忆达到容量上限时,Agent会自动压缩或替换条目以腾出空间。
2.2 会话存储与FTS5搜索
除了核心记忆文件,Hermes还提供基于SQLite FTS5的会话历史搜索:
• 数据库路径:~/.hermes/state.db• 存储内容:会话元数据、完整消息历史、模型配置• FTS5全文索引:支持跨会话高效全文检索• JSONL转录:~/.hermes/sessions/ 目录存储原始对话转录(包括工具调用)
SQLite数据库包含:
• sessions 表:会话ID、来源平台、用户ID、会话标题等• messages 表:完整消息历史• 元数据:token计数、工具调用计数、系统提示快照• 谱系关系:压缩分割后的父子会话关系
2.3 记忆管理工具
Hermes Agent通过 memory 工具管理自己的记忆:
• add:添加新记忆条目• replace:替换现有条目(使用子串匹配)• remove:删除过时条目(使用子串匹配)
注意:官方文档明确说明”There is no read action”——记忆内容在会话开始时自动注入系统提示,Agent无需显式读取。
Agent自主决定何时写入、更新或删除记忆条目。当记忆满时,Agent会压缩或替换条目。
2.4 记忆卫生与容量控制
由于严格的字符限制(MEMORY.md 2200字符,USER.md 1375字符),Hermes强调定期清理:
• 使用字符计数而非tokenization,保持模型无关性• Agent可以接收指令清理已完成的任务• 支持压缩指令删除冗余内容
2.5 结构化记忆系统(最新演进)
Hermes在PR #3093中引入了原生结构化记忆:
• 类型化的SQLite事实存储• 支持FTS5全文搜索• 取代了早期的MCP Server原型(PR #2692)• 2026年3月26日合并
此外,PR #4056添加了可选的 semantic-memory 技能:
• 混合BM25 + 向量搜索• 时间衰减机制• 作为可选技能,不替代内置的Markdown记忆系统
03技术对比:设计哲学的根本分歧
3.1 存储策略对比
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3.2 检索能力对比
| OpenClaw 的向量检索
• 支持语义相似度搜索,能理解查询意图• 三种搜索后端可选(默认向量、混合BM25、QMD+LLM重排序)• 依赖Embedding模型质量• 支持pgvector后端扩展(PR #1568) |
| Hermes 的FTS5检索
• 确定性全文匹配,结果可解释• SQLite内置,无需额外依赖• 无法理解语义相似度• 可选semantic-memory技能提供向量搜索(PR #4056) |
3.3 记忆管理哲学
OpenClaw:文件优先 + 索引辅助
• 记忆以纯文本文件存储,人类可直接编辑• SQLite索引是”可重建的”派生层• 每日日志自动追加,提供运行上下文• MEMORY.md仅在私人会话加载
Hermes:精简存储 + 自主管理
• 严格的字符限制迫使信息精炼• Agent通过memory工具自主决定记忆内容• 满时自动压缩或替换• 使用字符计数而非tokenization
3.4 技术栈对比
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
04优劣势分析
4.1 OpenClaw的优势
语义理解能力强:向量检索能理解查询的语义意图,即使关键词不匹配也能找到相关内容。
多种检索方案可选:支持三种搜索后端,从简单到精确可按需选择。
可审计性高:记忆以纯文本文件存储,人类可直接阅读和编辑。
Per-Agent隔离:每个Agent独立数据库,多Agent工作流不会交叉污染。
4.2 OpenClaw的劣势
配置复杂度:需要配置Embedding Provider,否则记忆搜索不可用。
依赖外部服务:默认依赖voyage或mistral等外部Embedding服务。
索引重建成本:虽然索引可重建,但大规模重建需要时间和计算资源。
4.3 Hermes Agent的优势
开箱即用:FTS5是SQLite内置功能,无需额外配置。
结果确定性强:基于关键词匹配的检索不会产生语义漂移。
自主管理:Agent通过memory工具自主决定记忆内容,满时自动压缩。
模型无关性:使用字符计数而非tokenization,兼容不同LLM。
4.4 Hermes Agent的劣势
容量限制严格:2200/1375字符限制可能导致有价值信息被过早丢弃。
语义理解有限:内置FTS5无法理解语义相似度(但可通过可选技能扩展)。
单实例架构:单SQLite实例在大规模场景下可能成为瓶颈。
05适用场景建议
5.1 选择OpenClaw的场景
• 需要语义检索能力,用户查询模糊• 多Agent工作流,需要Per-Agent隔离• 需要人类可直接编辑的记忆文件• 需要多种检索方案可选
5.2 选择Hermes Agent的场景
• 希望开箱即用,无需额外配置• 需要确定性的检索结果• 希望Agent自主管理记忆• 成本敏感,不想依赖外部Embedding服务
06未来演进趋势
6.1 OpenClaw的演进方向
• PostgreSQL后端:PR #1568提出pgvector后端支持• 混合检索优化:改进BM25和向量检索的融合策略• QMD + LLM重排序:提供最准确的检索选项
6.2 Hermes Agent的演进方向
• 结构化记忆:PR #3093已合并,引入类型化SQLite事实存储• 语义搜索扩展:PR #4056已合并,添加可选的semantic-memory技能• 冷热分层:PR #10121(Closed状态)曾提出弹性冷热记忆分层方案,但未合并到主分支
| “OpenClaw选择了’文件优先 + 索引辅助’的路线,记忆以纯文本文件存储,SQLite索引是可重建的派生层。” |
| “Hermes Agent选择了’精简存储 + 自主管理’的路线,严格的字符限制迫使信息精炼,Agent通过memory工具自主决定记忆内容。” |
🚀 总结:该怎么选?推荐 OpenClaw 的场景: • 需要语义理解和多Agent隔离• 需要多种检索方案可选• 需要人类可直接编辑的记忆文件 推荐 Hermes Agent 的场景: • 希望开箱即用,无需额外配置• 需要确定性结果和低成本运行• 希望Agent自主管理记忆 |
|
|
🔗 参考资料:
1. OpenClaw官方文档:openclaws.io/docs/concepts/memory
2. OpenClaw GitHub文档:github.com/openclaw/openclaw/blob/main/docs/concepts/memory.md
3. OpenClaw Memory分析:github.com/mudrii/openclaw-docs/blob/main/analysis/memory-cron-media.md
4. Hermes Agent官方文档:hermes-agent.nousresearch.com/docs/user-guide/features/memory/
5. Hermes Agent会话文档:hermes-agent.nousresearch.com/docs/user-guide/sessions/
6. Hermes结构化记忆PR:github.com/NousResearch/hermes-agent/pull/3093
7. Hermes语义记忆PR:github.com/NousResearch/hermes-agent/pull/4056
8. Hermes冷热记忆PR:github.com/NousResearch/hermes-agent/pull/10121
夜雨聆风