三藏签名

2026/8/31

四大Agent源码级对比:记忆系统

AgentMemory

对Deeflow、Openclaw、Hermes、CloudeCode这四种流行的Agent做了一下记忆系统的整理和对比

四大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 行为。

类型

含义

写入时机

不应保存的内容

user

用户角色、偏好、知识水平

了解到用户信息时

负面评价

feedback

行为纠正 + 正向确认

用户纠正或确认做法时

仅保存纠正而忽视确认

project

项目背景、决策、截止日期

了解到不可从代码推导的项目信息时

可从 git log 推导的内容

reference

外部系统指针

了解到外部资源位置时

系统的具体内容(只存指针)

后台 Forked Agent 提取

  • 与主 Agent 互斥:扫描助手消息是否有 tool_use 写入了 isAutoMemPath() 范围,有则跳过

  • 权限沙箱:允许只读 tools + 限制 memory 目录内写入,禁止 MCP、Agent、写型 Bash

  • 闭包管理游标lastMemoryMessageUuid 标记处理进度,inProgress 互斥锁 + pendingContext trailing 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/sync

3.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

模式

行为

false(默认)

自由写入

true

前台交互:inline 审批;其他:stage 到 /memory pending,通过 /memory approve/reject 管理

会话搜索(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 文件存储

文件

用途

加载策略

MEMORY.md

长期记忆:持久事实、偏好和决策

每次 DM 会话开始时加载

memory/YYYY-MM-DD.md

日记:运行上下文和观察

今天和昨天的自动加载

DREAMS.md

梦境日记: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_searchmemory_get 两个工具

  • 三种 Query Mode:

模式

发送内容

推荐超时

message

仅最新用户消息

3-5s

recent

最新用户消息 + 最近对话尾

15s

full

完整对话

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 prompt

Memory Wiki 是 Companion Plugin,在基础记忆之上添加结构化知识库层,提供 wiki_searchwiki_getwiki_applywiki_lint 等专属工具。


五、DeerFlow — 结构化事实存储

5.1 架构概览

MemoryMiddleware (after_agent 触发)
        ↓
MemoryManager (backend 抽象层)
        ↓
DeerMem backend → memory.json(结构化 JSON)
        ↓
注入 System Prompt

5.2 核心特点

两种工作模式

模式

行为

适用场景

Middleware(默认)

MemoryMiddleware 在每次 agent 执行后触发,队列化 + debounce(默认 30s)后异步更新

被动、稳定的背景学习

Tool(实验性)

注册 memory_searchmemory_addmemory_updatememory_delete 四个工具,由模型自主决定读写

模型主动管理记忆

高度结构化的记忆模型

{
  "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 分类 + 置信度 + 有效期

类别

含义

典型置信度

preference

工具/风格偏好

0.9-1.0(显式陈述)

knowledge

技术掌握

0.7-0.8(强暗示)

context

背景事实

0.9-1.0

behavior

工作习惯

0.5-0.6(推断模式)

goal

目标/计划

0.7-1.0

correction

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

DIR_EXISTS_GUIDANCE Prompt 优化(省去 ls/mkdir)、Session Memory Compact(免 API 调用总结)、Feature Gate 双路径注入、memoryAge() 预计算保证 Prompt Cache 稳定性、后台提取 Agent 与主 Agent 互斥设计

Hermes Agent

8 个外部 Memory Provider 插件体系(Honcho/OpenViking/Mem0/Hindsight/Holographic/RetainDB/ByteRover/Supermemory)、write_approval 审批流 + /memory pending 命令、FTS5 会话全文搜索(无需 LLM,~20ms 延迟)、子系统级别写入镜像(memory/skills 独立审批门控)

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

expected_valid_days 事实生命周期自动管理、6 类闭合 Fact 分类 + 置信度打分体系、Correction 检测(自动识别 Agent 错误并纠正)、Consolidation 合并相似事实、Middleware 与 Tool 双模式切换


八、设计哲学差异

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 系统,可以归纳出以下通用设计原则:

  1. 分类法 > 自由存储:放任 AI 自由保存内容会导致信息噪音。Claude Code 的 4 类闭合分类法和 DeerFlow 的 6 类 Fact 分类都证明了明确的分类体系能显著提高记忆质量。

  2. 定义"不存什么"和"存什么"同样重要:可从当前状态派生的信息(代码模式、Git 历史、调试方案)不需要存储。Claude Code 的 WHAT_NOT_TO_SAVE_SECTION 是这一原则的最佳实践。

  3. 存储和召回的架构分离:轻量索引 + 按需召回的模式(Claude Code 的 MEMORY.md + sideQuery,OpenClaw 的向量搜索)优于全量注入,特别是在记忆体量增长后。

  4. Prompt Cache 稳定性是隐藏的性能关键:跨 turn 的字节稳定性直接影响 API 成本。Claude Code 的 memoryAge() 预计算和 Hermes Agent 的 Frozen Snapshot 模式都体现了这一点。

  5. 后台提取优于内联提取:在对话主路径中做记忆提取会增加用户感知延迟。四个项目都采用了某种形式的异步/后台处理(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.

No comments yet.