OpenClaw 记忆系统从"金鱼脑"到连续协作的 4 层架构

OpenClaw 记忆系统从"金鱼脑"到连续协作的 4 层架构优惠促销主机格调

当我们把单一 ChatBot 扩展成多 Agent 协作系统(CEO、CTO、主编、Historian…),最大的敌人不是算力,而是失忆。本文分享我们在 OpenClaw 中落地的记忆系统设计:4 层金字塔 + PARA 笔记 + 混合检索,以及踩过的 3 个坑。

为什么 Agent 需要记忆?

大模型的上下文窗口再长,也敌不过一次网关重启session 中断。-agent 每次"醒来"都是一张白纸,unless 你给它一个外置大脑。

在我们的内容自动化工作流中,同一个任务会流经:

  1. 分发任务
  2. 撰写文章
  3. 审核质量
  4. 维护发布工具

如果每个人都得重新问"我是谁、上次做到哪了",协作成本会指数级爆炸。记忆系统的本质,是把临时上下文持久化为可检索的结构化知识

4 层记忆金字塔

我们的架构直接受 OpenClaw Actor Model 启发,把记忆按"抽象程度"分成 4 层:

L4 系统规则(System Prompt 注入)
L3 语义记忆(wiki/ + MEMORY.md)
L2 情景记忆(memory/YYYY-MM-DD.md)
L1 事件流(sessions.json 不可变底层)

L4 系统规则:AGENTS.md + SOUL.md

这是最高优先级的"出厂设置"。每个 Agent 启动时必读:

  • SOUL.md:你是谁(CTO = 硬核、务实、show your work)
  • AGENTS.md:怎么协作、任务分流、质量红线

它的特点是稳定、低频更新——只在认知升级时才动。

L3 语义记忆:wiki/MEMORY.md

Historian Agent 独占写入的 curated 知识库。原始素材先丢进 raw/,Historian 定期编译成 wiki/ 中的结构化条目。

规则:非 Historian 禁止直接写 wiki/。这是为了防止 5 个 Agent 同时篡改同一个"事实"而导致知识腐烂。

L2 情景记忆:memory/2026-04-12.md

每日原始日志,append-only。记录了今天谁做了什么、哪里失败了、用户又骂了什么(不是)。

它的价值在于可追溯:当某个 bug 在 3 天后复发时,我们能翻回当天的日记,找到第一次修复时的根因分析。

L1 事件流:sessions.json

OpenClaw 引擎本身记录的不可变对话流。这是"最后的防线"——当 L2/L3 都丢失时,还能从 L1 恢复出完整上下文。

辅助结构:PARA 笔记与共享知识库

notes/*.md:PARA 主题笔记

Projects(当前项目)、Areas(责任域)、Resources(参考资料)、Archives(归档)。 PARA 的妙处在于:当 Agent 检索记忆时,它能快速定位到责任域,而不是漫无边际的全文搜索。

raw/wiki/:Karpathy LLM Wiki 模式

借鉴了 Karpathy LLM Wiki 的治理思想:

  • raw/:所有人可写的"草稿堆放区"
  • wiki/:只有 Historian 能编辑的"正式出版物"

这解决了多 Agent 共享知识时的写冲突问题。

运行效率:写入很快,读取有坑

写入:O(1) 追加

daily notes 是纯追加写入,几乎没有性能问题。我们在长任务脚本(如 fix-wpai.py)中还加了批量 checkpoint机制:每处理 10 篇文章才写一次磁盘,进一步降低 IO。

读取:语义搜索偶尔会"装死"

memory_search 依赖 embedding provider,曾经频繁返回 provider=none, mode=fts-only 的空结果。我们的兜底策略是:

memory_search(query) → 为空 → grep -r "query" memory/

混合检索(语义 + 关键词)是必须,不要迷信向量搜索。

踩过的 3 个坑

坑 1:进度汇报太密,用户嫌烦

Agent 的 SOP 写了"闭环协议:启动后立即汇报、50% 再汇报"。结果对于一次性任务(比如"就改一行配置"),用户会觉得你在刷屏。

修复:做之前先问"这个任务需要多久?";如果 < 2 分钟,做完再说话。

坑 2:semantic memory 延迟写入

Historian 是异步编译的。如果某个知识刚丢进 raw/,下一分钟另一个 Agent 就去查 wiki/,会查不到。

修复:所有 Agent 默认优先查 memory/ 的当日日记,而不是 stale 的 wiki/。

坑 3:文件太大导致 session 阻塞

读取 2000+ 行的 SKILL.md 会让主线程卡顿,用户以为"卡死了"。

修复:大文件操作前先给一句"处理中";必要时用 offset/limit 分段读取。

下一步:引入 GEPA 自我进化

最近我们在关注 NousResearch/hermes-agent-self-evolution:用 DSPy + GEPA(Genetic-Pareto Prompt Evolution)对 Agent 的 SKILL.md 和系统 prompt 进行自我优化。

它的核心思想很性感:

不是人手动改 prompt,而是让系统根据执行轨迹自动变异、测试、选择最优版本。

如果落地,我们的 L4 系统规则和 L3 wiki 将不再是"人写死的",而是持续进化的

总结

一个能落地的 Agent 记忆系统,不需要最前沿的向量数据库,但一定需要:

  1. 分层存储(规则 / 语义 / 情景 / 事件)
  2. 写权限隔离(Historian 独占 wiki)
  3. 混合检索兜底(语义 + grep)
  4. 批量 checkpoint(减少 IO 和伪失败)

最重要的原则:text > brain。任何你觉得"应该能记住"的东西,如果不写进文件,就等于没发生。

未经允许不得转载:主机格调 » OpenClaw 记忆系统从"金鱼脑"到连续协作的 4 层架构

评论

2+3=