乐于分享
好东西不私藏

openclaw的记忆工程

openclaw的记忆工程

openclaw没有内置复杂的记忆治理工程实现,仅通过分类的文本文件实现记忆介质的作用,后续应该会提供更多上下文管理相关勾子,通过这些勾子可以实现外挂独立的记忆治理能力。

文本文件内的记忆在agent运行时注入LLM上下文,但决策依旧取决于LLM如何理解。所以openclaw的记忆文件只负责记录,并不负责LLM在执行上一定遵从,这也就是说写入记忆的约定不一定被LLM稳定执行。

下面是openclaw记忆文件的基本结构与作用

记忆文本文件:

.openclaw/workspace/├── MEMORY.md          # 长期记忆(核心)├── IDENTITY.md        # 身份定义├── SOUL.md            # 性格与原则├── USER.md            # 用户信息├── TOOLS.md           # 工具配置├── HEARTBEAT.md       # 定时任务├── AGENTS.md          # 启动加载规则├── data/│   └── heartbeat-state.json  # 状态追踪└── memory/    └── YYYY-MM-DD.md  # 每日日志

文件

作用

更新频率

MEMORY.md

核心约定、技术经验

有新约定时更新

SOUL.md

性格、原则

很少更新

USER.md

用户信息、偏好

有新偏好时更新

memory/YYYY-MM-DD.md

每日日志

每天更新

heartbeat-state.json

任务状态

每次任务后更新

加载机制
每次会话启动时:1. 读取 SOUL.md → 我是谁2. 读取 USER.md → 你是谁3. 读取 memory/YYYY-MM-DD.md → 最近发生了什么4. 如果是主会话 → 读取 MEMORY.md → 长期记忆

通过以上方式确保助手每次醒来都能恢复上下文(但这不是程序化设定,所以不保证结果)

记忆文件的更新与维护:

我自己把openclaw的关键文件备份在github的私有库中,并在变更后触发自动备份,这是我给openclaw设定的任务,属于长期记忆并写入了memory.md中,以方便我看到文件的内容都记录了什么。我发现它的memory、heartbeat文件记录的内容并不是很完善,内容不仅杂乱还充斥了一些不重要信息,这会影响到你的使用体验。你可以要求它把内容发给你,然后要求它整理,或者教它怎么记录,设定一个更新原则,之后结构就好很多了。

我设定的更新流程

获取新信息    ↓判断:是否属于「我们的共同记忆」?    ↓是 → 用明确结论写入 MEMORY.md 对应分类否 → 放 Notion 或忽略    ↓git commit + git push 同步
其中「我们共同记忆」的定义,以及memory.md对应分类便是我要求过的更新规则。以下是我的文档更新规则(要求openclaw自己总结的):
文档维护原则
  • 结构化记录:按类别组织信息

  • 信息精简:避免冗余,只保留必要内容
  • 及时更新:配置变更后同步更新
  • 分类清晰:身份、约定、技术经验分开

记忆记录原则

应该记录的

  • 身份与关系(我们是谁、沟通偏好)
  • 约定与承诺(共识等)
  • 踩过的坑(技术经验、配置细节)
  • 你的偏好(文档风格、提醒方式)

不应该记录的

  • 通用知识
  • 可搜索到的信息
  • 与「我们的关系」无关的内容

记录风格

  • 使用明确结论,不要含糊描述
  • 核心原则:MEMORY.md 记录的是「我们的共同记忆」,不是「知识库」