Skip to content

11.4 记忆系统深入


想象一下这个场景:

你问 OpenClaw:"上周客户张三说的那个关键需求是什么来着?"

OpenClaw 回复:"抱歉,我没有找到相关记录。"

你:"不可能啊,我明明跟你说过的!"

翻开 memory/ 目录,发现那条记录在上周的日志里——但已经被 Compaction 压缩掉了。

记忆丢失了。

这就是理解记忆系统的重要性——知道它怎么工作,才能防止记忆丢失,才能让 AI 真正"记住"你想要它记住的事。

这一节,我们用 25 分钟,深入理解 OpenClaw 的记忆系统原理。


准备工作

开始前,确认你有:

  • [x] OpenClaw 已运行过一段时间(有记忆记录)
  • [x] Obsidian 已打开工作区
  • [x] 约 25 分钟时间

第一步:理解两层记忆架构

OpenClaw 有两层记忆,就像你有一个"日记本"和一个"档案柜"。

1.1 日记本(memory/ 目录)

特点:

属性说明
位置memory/YYYY-MM-DD.md
格式每天一个文件
写入方式仅追加,不修改
生命周期短期(默认 30 天)
用途记录当天对话、临时信息

示例内容:

markdown
# 2026-03-10

## 今日对话
- 用户让我帮忙写周报
- 确认了客户张三的需求变更
- 讨论了新项目的排期

## 新学到的
- 用户喜欢更简洁的列表格式
- 客户张三的项目延期到3月底
- 王五的联系方式是 wangwu@example.com

在 Obsidian 中查看:

打开 memory/ 目录,可以看到每天的日志。最新的是今天,往下翻是之前的记录。

1.2 档案柜(MEMORY.md)

特点:

属性说明
位置MEMORY.md (工作区根目录)
格式单个文件,手动整理
写入方式精心编辑,结构化
生命周期长期有效
用途存储重要信息、用户偏好、持久规则

示例内容:

markdown
# 长期记忆

## 用户偏好
- 喜欢简洁的回复,不要废话
- 用中文交流
- 代码块要加语法高亮

## 重要客户
- [[客户张三]] - 电商项目,偏好周报形式
- [[客户李四]] - 咨询项目,需要详细文档

## 项目信息
- #项目/电商 - 预计3月上线
- #项目/官网 - 已完成设计阶段

## 持久规则
- 每次回复结尾问"还有其他需要吗?"
- 代码块必须加语法高亮

1.3 两者的协作关系

对话发生 → AI 判断重要性 →
  ├── 临时信息 → 写入 memory/YYYY-MM-DD.md (日记本)
  └── 重要信息 → 写入 MEMORY.md (档案柜)

定期整理 → 日记本中的重要内容 → 归档到 MEMORY.md

第二步:记忆搜索机制

2.1 关键词搜索(BM25)

默认启用。AI 用关键词匹配搜索记忆:

查询:"客户张三"
匹配:包含"客户"、"张三"的记录

优点: 快速,精确 缺点: 语义相似但用词不同时可能漏掉

2.2 向量搜索(语义搜索)

OpenClaw 支持向量嵌入,实现语义搜索:

查询:"那个电商项目的联系人"
匹配:即使没有"联系人"这个词,也能找到客户张三的记录

2.3 配置向量搜索

编辑 ~/.openclaw/openclaw.json

json5
{
  agents:{
    defaults:{
      memorySearch:{
        provider"openai"  // 或 "local" 使用本地模型
        model"text-embedding-3-small"
        remote:{
          apiKey"YOUR_API_KEY"
        }
      }
    }
  }
}

2.4 混合搜索(推荐)

结合语义搜索和关键词搜索,效果最好:

json5
{
  agents:{
    defaults:{
      memorySearch:{
        query:{
          hybrid:{
            enabledtrue
            vectorWeight0.7  // 语义权重
            textWeight0.3     // 关键词权重
          }
        }
      }
    }
  }
}

效果对比:

查询纯关键词混合搜索
"Mac Studio gateway host"可能漏掉"运行 gateway 的机器"能找到语义相似的记录
"a828e60"精确匹配精确匹配
"上周那个客户说的需求"可能找不到能找到相关记录

2.5 测试搜索效果

在 Obsidian 中打开 memory/ 目录,找一个记录。

然后问 OpenClaw:

搜索记忆,找到关于 [你找的内容] 的记录。

看看 AI 能不能找到。


第三步:理解 Compaction 和记忆丢失

3.1 什么是 Compaction?

OpenClaw 的会话有 token 限制。当接近上限时,会触发压缩(Compaction)

会话开始 ──────────────────────────────> 接近上限

                                        Compaction 触发

                                    早期对话被归档/丢弃

风险: 压缩前的内容如果没有写入记忆文件,就会丢失。

3.2 Compaction 的触发条件

配置默认值说明
softThresholdTokens4000开始警告的 token 数
hardThresholdTokens8000强制压缩的 token 数

3.3 自动记忆刷新

OpenClaw 会在压缩前自动触发一轮静默写入:

json5
{
  agents:{
    defaults:{
      compaction:{
        memoryFlush:{
          enabledtrue
          softThresholdTokens4000
          systemPrompt"Session nearing compaction. Store durable memories now."
        }
      }
    }
  }
}

这意味着: 即使你不说,AI 也会在会话即将压缩前尝试保存重要记忆。

3.4 你的保护措施

规则 1: 重要内容立即固化

记住:客户张三的项目延期到3月底。
把这个信息写入 MEMORY.md 的长期记忆部分。

规则 2: 定期整理日记本

每周花 5 分钟,在 Obsidian 里: 1。 打开 memory/ 目录 2。 浏览最近一周的日志 3。 把重要信息复制到 MEMORY.md

规则 3: 使用 Obsidian 检查

打开 Obsidian,看看 MEMORY.md 是否包含你认为重要的信息。


第四步:记忆最佳实践

4.1 什么值得记住

类型是否写入 MEMORY.md示例
用户偏好✅ 是"我喜欢简洁格式"
客户信息✅ 是"张三的邮箱是 xxx"
项目状态✅ 是"电商项目延期到3月"
持久规则✅ 是"每次回复加 emoji"
临时对话❌ 否日常问答
一次性任务❌ 否"帮我写个周报"

4.2 让 AI 知道什么重要

SOUL.md 中添加:

markdown
## 记忆规则

### 必须写入长期记忆的信息
- 用户明确说"记住这个"的内容
- 客户的联系方式、偏好
- 项目的重要节点和状态变更
- 用户的持久偏好

### 只需临时记录的信息
- 日常问答
- 一次性任务
- 已经完成的待办事项

4.3 记忆格式规范

推荐格式:

markdown
# 长期记忆

## 用户偏好
- [偏好描述] #标签

## 重要人物
- [[姓名]] - [关系/角色] - [关键信息]

## 项目状态
- #项目/[项目名] #状态/[状态] - [描述]

## 待办事项
- [ ] [待办内容] #优先级/[级别]

4.4 记忆清理

定期(每月)在 Obsidian 中:

1。 打开 MEMORY.md 2。 检查是否有:

  • 过期的信息(项目已完成)
  • 重复的信息(同一客户多处记录)
  • 冲突的信息(前后矛盾) 3。 整理、合并、删除

第五步:记忆对账自动化

5.1 什么是记忆对账?

确认 AI 记住的内容 = 你想让它记住的内容。

5.2 手动对账

定期问 OpenClaw:

查看你的 MEMORY.md,告诉我你记住了哪些关于我的重要信息。
有没有你认为重要但我没有记下来的?

5.3 创建对账清单

memory/audit-checklist.md

markdown
# 记忆对账清单

## 每周检查
- [ ] 用户偏好是否准确
- [ ] 客户信息是否完整
- [ ] 项目状态是否最新
- [ ] 是否有重复或冲突的记忆

## 检查命令
发送给 AI:"帮我检查并整理 MEMORY.md,删除过期的,合并重复的"

5.4 用 HEARTBEAT 自动对账

HEARTBEAT.md 中添加:

markdown
## 每周记忆检查(周日 21:00 执行)
- [ ] 检查 memory/ 目录,整理重要信息到 MEMORY.md
- [ ] 删除已确认过期的记忆
- [ ] git commit 记忆变更

第六步:高级记忆配置

6.1 记忆保留时间

json5
{
  agents:{
    defaults:{
      memory:{
        retentionDays30  // 日记本保留天数
      }
    }
  }
}

6.2 记忆索引

OpenClaw 使用 SQLite + FTS5 建立记忆索引,支持:

  • 全文搜索
  • 向量搜索(如果配置)
  • 混合搜索

索引文件位于:~/.openclaw/memory.db

6.3 多 Agent 记忆隔离

每个 Agent 有独立的工作区,记忆也是隔离的:

~/.openclaw/
├── workspace/         # 默认 Agent 的记忆
│   ├── MEMORY.md
│   └── memory/
├── workspace-lead/    # lead Agent 的记忆
│   ├── MEMORY.md
│   └── memory/
└── workspace-dev/     # dev Agent 的记忆
    ├── MEMORY.md
    └── memory/

故障排查

问题检查步骤
AI 找不到记忆确认记忆文件存在;检查搜索配置
记忆没有更新确认 AI 有写入权限;检查文件是否被锁定
向量搜索不工作检查 API key 是否正确;确认 provider 配置
Compaction 太频繁调整 threshold 值;减少单次对话长度
记忆文件损坏从 Git 恢复;检查文件编码

试一试

练习 1: 查看记忆结构

1。 在 Obsidian 打开 memory/ 目录 2。 看最近一周的日记本内容 3。 对比 MEMORY.md,看看哪些该整理过去

练习 2: 测试向量搜索

1。 配置向量搜索 2。 问 OpenClaw:

搜索记忆,找到关于"我喜欢什么格式"的内容。

3。 看看它能否找到相关记录,即使措辞不同

练习 3: 记忆对账

1。 问 OpenClaw:

查看你的 MEMORY.md,列出你记住了哪些关于我的信息。

2。 检查是否有遗漏或错误

练习 4: 配置混合搜索

编辑 ~/.openclaw/openclaw.json,启用混合搜索,测试效果。


记忆系统最佳实践总结

实践说明
重要信息立即固化说"记住这个",并要求写入 MEMORY.md
每周整理把日记本里的重要内容归档到 MEMORY.md
定期对账每月检查一次 MEMORY.md 的准确性
Git 备份每次重要变更后 commit
Obsidian 可视化用 Obsidian 定期浏览和整理
配置混合搜索结合语义和关键词搜索

这一节,你了解了

学了什么核心理解
两层记忆日记本(memory/ 临时)+ 档案柜(MEMORY.md 长期)
搜索机制BM25 关键词 + 向量语义 + 混合搜索
Compaction会话压缩前的自动刷新机制
防止丢失重要信息立即固化,定期整理
最佳实践对账、备份、可视化三件套

下一节

记忆系统搞懂了,但 OpenClaw 和 Obsidian 还能更深一步结合。

下一节,我们讲:软链接与多 Agent 知识共享 —— 让多个 Agent 共用同一个 Obsidian 知识库。

基于 MIT 许可发布