2026/8/31
四大Agent源码级对比:记忆系统
对Deeflow、Openclaw、Hermes、CloudeCode这四种流行的Agent做了一下记忆系统的整理和对比

横向对比 Claude Code、DeerFlow、Hermes Agent、OpenClaw 四个项目的 Memory 系统设计与实现
一、总览
维度 | Claude Code | Hermes Agent | OpenClaw | DeerFlow |
|---|---|---|---|---|
语言 | TypeScript | Python | TypeScript | Python |
架构层级 | 四层存储 + 一层召回 | 2 层(内置 + 8 外部插件) | 3 层(文件/搜索/主动记忆) | 3 层(中间件/工具模式) |
存储形式 | 文件系统(Markdown 索引+分Topic) | Markdown 文件(固定上限) | Markdown 文件 + SQLite 向量索引 | JSON 文件(结构化 Facts) |
写入方式 | 后台 Forked Agent 提取 | 前台 memory 工具 + 后台 background_review 提取 | Agent 自行写文件 + Memory Flush | 后台 LLM 摘要提取 |
搜索方式 | SideQuery(Sonnet 轻量选择) | FTS5 SQLite(会话搜索) | 混合搜索(向量 + BM25) | 无内置语义搜索 |
记忆分类 | 4 类闭合分类法 | memory/user 双目标 | 按文件类型(持久/日记/梦境) | 6 类 Facts + 上下文/历史 |
巩固机制 | Auto Dream(≥24h, ≥5 会话) | 无自动巩固(靠 Agent 手动 consolidate) | Dreaming(Deep Promotion) | Staleness Review + Consolidation |
多 Agent 隔离 | Agent Memory(3 种 scope) | Memory + User Profile(全局共享) | 每个 Agent 独立 workspace | Per-agent memory.json |
二、Claude Code — 四层存储 + 一层召回
2.1 架构概览
存储层(各自持有真实落盘数据)
Layer 1: CLAUDE.md → 人类预写指令,多级目录遍历 + @include 引用
Layer 2: Auto Memory(memdir) → AI 自主写入的持久知识,4 类闭合分类法
Layer 3: Session Memory → 当前会话的结构化笔记(10 段固定模板)
Layer 4: Agent Memory → 自定义 Agent 的专属记忆(user/project/local)
召回层(无自身存储,纯读)
Relevant Memories → 按需召回:findRelevantMemories 扫描 Layer 2 的 topic files,
用 Sonnet sideQuery 挑出最多 5 个文件路径注入,本身不产出、
不存储任何数据——它是 Layer 2 的读侧。2.2 核心特点
闭合分类法驱动质量
MEMORY_TYPES = ['user', 'feedback', 'project', 'reference']每种类型不仅定义了"写入什么",更定义了"不写入什么"(5 类排除项:代码模式、Git 历史、调试方案、CLAUDE.md 已有、临时任务状态)。分类法还规定了即使用户明确要求保存某些内容,AI 也应反问"什么是令人惊讶的"——通过 Prompt 设计约束 AI 行为。
类型 | 含义 | 写入时机 | 不应保存的内容 |
|---|---|---|---|
| 用户角色、偏好、知识水平 | 了解到用户信息时 | 负面评价 |
| 行为纠正 + 正向确认 | 用户纠正或确认做法时 | 仅保存纠正而忽视确认 |
| 项目背景、决策、截止日期 | 了解到不可从代码推导的项目信息时 | 可从 git log 推导的内容 |
| 外部系统指针 | 了解到外部资源位置时 | 系统的具体内容(只存指针) |
后台 Forked Agent 提取
与主 Agent 互斥:扫描助手消息是否有
tool_use写入了isAutoMemPath()范围,有则跳过权限沙箱:允许只读 tools + 限制 memory 目录内写入,禁止 MCP、Agent、写型 Bash
闭包管理游标:
lastMemoryMessageUuid标记处理进度,inProgress互斥锁 +pendingContexttrailing run 合并提取 Agent 采用两步并行策略:turn 1 并行读取所有可能需要更新的文件,turn 2 并行写入
双路径注入(Feature Gate 控制)
传统路径: MEMORY.md 始终注入用户上下文 (tengu_moth_copse=off)
新路径: 完全异步预取 + Relevant Memories sideQuery (tengu_moth_copse=on)SideQuery 选择流程:
阶段一:
scanMemoryFiles读取所有 topic 文件的 frontmatter(单遍扫描,stat + read 合并)阶段二:
selectRelevantMemories用 Sonnet 模型做轻量 side query,最多选择 5 个相关文件
Session Memory 与 Compact 协同
10 段固定模板(Session Title → Worklog),标题不可变
双阈值触发:token 阈值(必要条件)+ tool call 阈值
Compact 时直接复用,免去昂贵的总结 API 调用
Auto Dream 巩固
门控(按成本从低到高):① 能力门控
isGateOpen()(KAIROS/Remote 模式、AutoMemory 关闭、Dream 关闭则直接跳过)→ ② 时间 ≥24h → ③ 扫描节流 10min(时间门控通过但会话门控不通过时防止每 turn 重复扫描)→ ④ ≥5 新会话 → ⑤ 文件锁失败回滚 mtime,下次重新通过时间门控(扫描节流即回滚后的 backoff)
其他精妙设计
DIR_EXISTS_GUIDANCE:Prompt 中告知 AI "目录已存在直接写",省去ls/mkdir -p的浪费memoryAge()预计算:避免"今天"变成"昨天"导致 Prompt Cache 失效MEMORY.md 索引截断保护:200 行 + 25KB 双重限制
三、Hermes Agent — 内置 + 插件双轨制
3.1 架构概览
MemoryManager (统一编排)
├── Builtin Provider: MEMORY.md + USER.md
│ └── 通过 memory 工具读写(前台 Agent + 后台 review fork 共用)
└── External Provider (8 选 1)
├── Honcho / OpenViking / Mem0 / Hindsight / ...
└── 镜像 builtin 写入 + 独立 prefetch/sync3.2 核心特点
Agent 自管理的 Markdown 记忆
~/.hermes/memories/
├── MEMORY.md ← Agent 笔记:环境、约定、经验(上限 2,200 字符)
└── USER.md ← 用户画像:偏好、风格、技能(上限 1,375 字符)使用
§作为条目分隔符Frozen Snapshot 模式:会话开始注入,会话内修改不立即可见(保护 Prompt Cache)
严格字符上限,超限返回 error 而非静默丢弃
三级容量管理流程
add → 检查是否超限
├─ 未超限 → 写入成功
└─ 超限 → 返回 error + 当前条目列表
→ Agent 自行 consolidate/remove → retry add(同一 turn 内)写入审批机制(write_approval)
模式 | 行为 |
|---|---|
| 自由写入 |
| 前台交互:inline 审批;其他:stage 到 |
会话搜索(Session Search)
使用 SQLite FTS5 全文索引,存储所有 CLI 和消息平台会话
三个调用形态:discovery(跨会话搜索)、scroll(单会话浏览)、browse(列出会话)
特点:FTS5 检索本身无 LLM 调用(可选 Gemini Flash 摘要增强)、~20ms 查询延迟、支持回溯数周前的对话
8 个外部 Memory Provider 插件
class MemoryProvider(ABC):
initialize() # 连接、创建资源
system_prompt_block() # 静态 system prompt 注入
prefetch(query) # 每 turn 前异步召回
sync_turn(user, asst) # 每 turn 后异步写入
get_tool_schemas() # 暴露给模型的自定义工具
handle_tool_call() # 工具调用分发
# 可选 hooks:
on_session_end() # 会话结束提取
on_pre_compress() # 上下文压缩前提取
on_memory_write() # 镜像 builtin 写入
on_delegation() # 子 Agent 观察所有外部写入通过单一 worker 线程串行化,保证 turn N 写入先于 turn N+1。
与 Claude Code 关键差异
Hermes Agent 采用双轨:Agent 前台主动调用 memory 工具 + 后台
background_review提取(每 N 轮 fork 子 Agent 评估对话、决定是否存记忆);Claude Code 则是后台extractMemories提取。两者都有后台提取,并非"主动 vs 被动"的对立Hermes Agent 有显式审批流(
/memory pending);Claude Code 无Hermes Agent 的 session_search 是特有的会话全文搜索能力,与 persistent memory 形成互补
四、OpenClaw — 插件化多后端记忆
4.1 架构概览
文件层: MEMORY.md / memory/YYYY-MM-DD.md / DREAMS.md
搜索层: memory_search(混合搜索) + memory_get(文件读取)
后端层: Builtin(SQLite) / QMD(Local Sidecar) / Honcho
主动层: Active Memory(插件拥有的阻塞子 Agent)
巩固层: Dreaming(Deep Promotion)/ Memory Flush
知识层: Memory Wiki(结构化知识库)4.2 核心特点
纯 Markdown 文件存储
文件 | 用途 | 加载策略 |
|---|---|---|
| 长期记忆:持久事实、偏好和决策 | 每次 DM 会话开始时加载 |
| 日记:运行上下文和观察 | 今天和昨天的自动加载 |
| 梦境日记:Dreaming 巩固的审计轨迹 | 人类审查用 |
混合语义搜索
Query → Embedding → Vector Search ┐
├→ Weighted Merge → Top Results
Query → Tokenize → BM25 Search ───┘支持 8 种 Embedding Provider(OpenAI/Gemini/Voyage/Ollama/Bedrock/Mistral/Local/Copilot)
自动检测可用 API key
可选增强:
Temporal Decay:旧笔记权重衰减(默认 30 天半衰期),
MEMORY.md永不过期MMR (Maximal Marginal Relevance):减少冗余结果
Active Memory — 主动召回子 Agent
阻塞式子 Agent 在主回复前运行
仅能使用
memory_search和memory_get两个工具三种 Query Mode:
模式 | 发送内容 | 推荐超时 |
|---|---|---|
| 仅最新用户消息 | 3-5s |
| 最新用户消息 + 最近对话尾 | 15s |
| 完整对话 | 15s+ |
六种 Prompt Style:
balanced/strict/contextual/recall-heavy/precision-heavy/preference-only可配置 timeoutMs、maxSummaryChars、thinking 级别
通过
/verbose on和/trace on查看诊断输出
Memory Flush
与 Claude Code 的 Session Memory Compact 不同:
Claude Code:复用已有的 session memory 文件(被动)
OpenClaw:运行一个静默 turn 要求 Agent 把重要上下文写入文件(主动)
触发条件:tokenCount ≥ contextWindow - reserveTokensFloor - softThreshold
Dreaming — 后台记忆巩固
Opt-in,默认不启用
收集短期信号、评分候选、按门槛晋升
Live Dreaming:实时处理
.dreams/目录中的候选Grounded Backfill:重放历史日记,重新评估持久性,可通过 CLI 命令操作:
openclaw memory rem-backfill --path ./memory --stage-short-term openclaw memory rem-backfill --rollback通过
DREAMS.md提供人类可审查的审计轨迹
插件化注册接口
registerMemoryCapability(pluginId, capability) // 统一注册 prompt + flush + runtime
registerMemoryCorpusSupplement(pluginId, supplement) // 扩展搜索数据源
registerMemoryPromptSupplement(pluginId, builder) // 扩展 system promptMemory Wiki 是 Companion Plugin,在基础记忆之上添加结构化知识库层,提供 wiki_search、wiki_get、wiki_apply、wiki_lint 等专属工具。
五、DeerFlow — 结构化事实存储
5.1 架构概览
MemoryMiddleware (after_agent 触发)
↓
MemoryManager (backend 抽象层)
↓
DeerMem backend → memory.json(结构化 JSON)
↓
注入 System Prompt5.2 核心特点
两种工作模式
模式 | 行为 | 适用场景 |
|---|---|---|
Middleware(默认) |
| 被动、稳定的背景学习 |
Tool(实验性) | 注册 | 模型主动管理记忆 |
高度结构化的记忆模型
{
"user": {
"workContext": { "summary": "...", "shouldUpdate": false },
"personalContext": { "summary": "...", "shouldUpdate": false },
"topOfMind": { "summary": "...", "shouldUpdate": true }
},
"history": {
"recentMonths": { "summary": "...", "shouldUpdate": true },
"earlierContext": { "summary": "...", "shouldUpdate": false },
"longTermBackground": { "summary": "...", "shouldUpdate": false }
},
"facts": [
{ "content": "...", "category": "preference", "confidence": 0.95, "expected_valid_days": 365 }
]
}6 类 Fact 分类 + 置信度 + 有效期
类别 | 含义 | 典型置信度 |
|---|---|---|
| 工具/风格偏好 | 0.9-1.0(显式陈述) |
| 技术掌握 | 0.7-0.8(强暗示) |
| 背景事实 | 0.9-1.0 |
| 工作习惯 | 0.5-0.6(推断模式) |
| 目标/计划 | 0.7-1.0 |
| Agent 错误纠正 | ≥0.95 |
事实生命周期管理
expected_valid_days:
≤14: 高瞬态 — 活跃 bug、即时任务
15-60: 短期 — 当前实验、在进行的副项目
60-180: 中期 — 当前角色、活跃技术栈
180-365: 稳定 — 职业背景、既定工作模式
>365: 非常稳定 — 核心技能、母语、人格特征自动维护机制
Staleness Review:定期检查过期事实,按配置的 staleness_age_days 触发
Consolidation:合并相似事实,
max_facts: 100上限,超过consolidation_min_facts时触发Correction Detection:自动识别用户纠正 Agent 错误的模式,标记为高置信度 correction 类事实
Per-Agent 隔离:不同 agent 的
memory.json存放在agents/{agent_name}/目录注入预算控制:
max_injection_tokens: 2000限制注入到 system prompt 的记忆量
六、横向对比矩阵
6.1 存储策略
项目 | 存储格式 | 索引方式 | 上限控制 |
|---|---|---|---|
Claude Code | Markdown(topic files)+ MEMORY.md 索引 | SideQuery 选择 | MEMORY.md ≤200 行,25KB |
Hermes Agent | Markdown(MEMORY.md + USER.md) | FTS5 SQLite(会话) | 2,200 chars / 1,375 chars |
OpenClaw | Markdown + SQLite 向量索引 | 混合搜索(向量+BM25) | 无明确上限,靠 decay 控制 |
DeerFlow | JSON(结构化 Facts + 上下文总结) | 无搜索索引 | max_facts: 100, max_injection_tokens: 2000 |
6.2 写入机制
项目 | 触发方式 | 延迟 | 并发控制 |
|---|---|---|---|
Claude Code | 后台 Forked Agent(每 turn 结束 fire-and-forget) | 异步 | 互斥锁 + trailing run 合并 + 与主 Agent 互斥 |
Hermes Agent | 前台 memory 工具 + 后台 background_review(每 N 轮 fork 提取) | 即时 / 异步 | 单 worker 线程串行化(外部 provider 写入) |
OpenClaw | Agent 主动写文件 + Memory Flush(预 compaction) | 即时(flush 在 next turn 前) | 按 workspace 隔离 |
DeerFlow | MemoryMiddleware after_agent → 队列 → LLM 摘要 | debounce 30s | 队列化 |
6.3 记忆召回
项目 | 召回方式 | 注入位置 | 单次成本 |
|---|---|---|---|
Claude Code | SideQuery(Sonnet 轻量选择最多 5 个) | Attachment 注入 | ~256 token side query |
Hermes Agent | builtin 全量注入(Frozen Snapshot)+ 外部 provider 按需 prefetch | System Prompt / turn 前注入 | builtin 固定;provider 按需 |
OpenClaw | Active Memory 子 Agent 搜索 / 默认不搜索 | Hidden System Context 前缀 | 每个 turn 一次子 Agent 调用 |
DeerFlow | 全量注入(受 max_injection_tokens 控制) | System Prompt | 固定每 session |
6.4 记忆质量保障
项目 | 分类体系 | 过期/衰减 | 去重 | 审批 |
|---|---|---|---|---|
Claude Code | 4 类闭合分类法 + 排除清单 | 无内置衰减 | Session-level surfacedPaths | 无 |
Hermes Agent | memory/user 双目标 | 手动管理 | 精确重复拒绝 | write_approval 开关 |
OpenClaw | 文件类型区分(持久/日记/梦境) | Temporal Decay(可选) | 无内置 | 无 |
DeerFlow | 6 类 Facts + 3 层上下文 + 置信度 | expected_valid_days + Staleness Review | factsToRemove 显式删除 | 无 |
6.5 多 Agent 支持
项目 | 隔离方式 | 共享机制 |
|---|---|---|
Claude Code | Agent Memory(user/project/local 三种 scope) | project scope 可通过 VCS 团队共享 |
Hermes Agent | 全局共享 MEMORY.md + USER.md | 外部 Provider 可做 per-session 隔离 |
OpenClaw | 每个 Agent 独立 workspace | 无内置跨 Agent 共享 |
DeerFlow | agents/{agent_name}/memory.json | 全局 memory.json 作为默认 |
七、技术亮点(每项目独有)
项目 | 独有亮点 |
|---|---|
Claude Code |
|
Hermes Agent | 8 个外部 Memory Provider 插件体系(Honcho/OpenViking/Mem0/Hindsight/Holographic/RetainDB/ByteRover/Supermemory)、 |
OpenClaw | Active Memory 阻塞子 Agent(3 种 query mode × 6 种 prompt style 组合)、混合搜索(向量 + BM25 + MMR + Temporal Decay 全栈)、Dreaming 巩固系统(Deep Promotion + Grounded Backfill 双轨)、Memory Wiki 结构化知识层(claims/evidence/contradiction tracking)、多后端(Builtin SQLite / QMD Sidecar / Honcho) |
DeerFlow |
|
八、设计哲学差异
graph TD
subgraph "Claude Code — 工程化"
CC1["后台被动提取"]
CC2["分类法驱动质量"]
CC3["Feature Gate 控制演化"]
CC4["Prompt Cache 极致优化"]
end
subgraph "Hermes Agent — 可扩展"
HA1["前台工具 + 后台 review 提取"]
HA2["双轨制(内置+插件)"]
HA3["审批流 + 会话搜索"]
HA4["8 个外部 Provider"]
end
subgraph "OpenClaw — 可组合"
OC1["Agent 主动写文件"]
OC2["混合语义搜索"]
OC3["多后端 + Dreaming"]
OC4["插件化 + Wiki 层"]
end
subgraph "DeerFlow — 结构化"
DF1["中间件被动摘要"]
DF2["高度结构化 JSON"]
DF3["事实生命周期管理"]
DF4["置信度 + 分类维度"]
end设计哲学 | 代表项目 | 核心思想 |
|---|---|---|
工程化 | Claude Code | 四层存储 + 一层召回、Feature Gate 控制、Prompt Cache 优化、闭合分类法,每个细节都经过精心设计和测试验证 |
可扩展 | Hermes Agent | 8 个外部 Provider 插件 + 双轨制 + 审批流 + 会话全文搜索,兼顾简单和强大 |
可组合 | OpenClaw | Markdown 文件 + 插件化搜索 + Active Memory + Dreaming + Memory Wiki,功能模块化自由组合 |
结构化 | DeerFlow | JSON 存储 + 多维度上下文 + 事实生命周期 + 置信度打分,类似 CRM 的知识管理方式 |
九、设计经验总结
9.1 通用设计原则
通过对比四个项目的 Memory 系统,可以归纳出以下通用设计原则:
分类法 > 自由存储:放任 AI 自由保存内容会导致信息噪音。Claude Code 的 4 类闭合分类法和 DeerFlow 的 6 类 Fact 分类都证明了明确的分类体系能显著提高记忆质量。
定义"不存什么"和"存什么"同样重要:可从当前状态派生的信息(代码模式、Git 历史、调试方案)不需要存储。Claude Code 的
WHAT_NOT_TO_SAVE_SECTION是这一原则的最佳实践。存储和召回的架构分离:轻量索引 + 按需召回的模式(Claude Code 的 MEMORY.md + sideQuery,OpenClaw 的向量搜索)优于全量注入,特别是在记忆体量增长后。
Prompt Cache 稳定性是隐藏的性能关键:跨 turn 的字节稳定性直接影响 API 成本。Claude Code 的
memoryAge()预计算和 Hermes Agent 的 Frozen Snapshot 模式都体现了这一点。后台提取优于内联提取:在对话主路径中做记忆提取会增加用户感知延迟。四个项目都采用了某种形式的异步/后台处理(fire-and-forget、debounce、队列化)。
9.2 可迁移的设计模式
模式 | 描述 | 来源 | 适用场景 |
|---|---|---|---|
闭合分类法 + 排除清单 | 有限类别 + 明确排除规则,约束 AI 行为 | Claude Code | RAG 系统的文档质量控制 |
索引-内容分离 | 轻量索引常驻上下文,详细内容按需召回 | Claude Code | 知识密集型 Agent、企业文档助手 |
后台提取 + 主 Agent 互斥 | fire-and-forget 后台 Agent + 写入检测跳过 | Claude Code | 日志分析、缓存预热、数据同步 |
Frozen Snapshot + 会话搜索 | 固定注入保护 cache,历史会话按需搜索 | Hermes Agent | 长期对话型产品 |
混合搜索 | 向量语义 + BM25 关键词 + MMR 去重 | OpenClaw | 任何需要搜索记忆库的场景 |
Dreaming 巩固 | 短期信号评分 → 门槛晋升 → 人类审计 | OpenClaw | 需要高质量、可审计的记忆系统 |
事实生命周期管理 | 为每条记忆分配 expected_valid_days,自动过期审查 | DeerFlow | CRM、用户画像系统 |
置信度梯度打分 | 显式陈述(0.9+) > 强暗示(0.7+) > 弱推断(0.5+) | DeerFlow | 需要区分事实可靠性的系统 |
十、结论
四个项目的 Memory 系统代表了 AI Agent 记忆设计的四条不同路径:
Claude Code 构建了最完整、最工程化的"四层存储 + 一层召回"记忆体系,适合对成本和可靠性要求极高的商业产品。
Hermes Agent 的双轨制(内置简洁 + 外部插件丰富)和审批流设计,适合开源社区中需要灵活性和用户控制权的场景。
OpenClaw 的模块化、多后端、混合搜索架构,适合需要自由组合和深度定制的平台型产品。
DeerFlow 通过高度结构化的 JSON 模型和事实生命周期管理,适合需要精确用户画像和知识管理的场景。
没有"最好"的 Memory 系统,只有最匹配场景的选择。这四个项目的设计决策都值得在构建自己的 AI Agent 记忆系统时参考借鉴。

Comments
Join the conversation
Emoji supported. Comments appear immediately.