## 记忆系统概述
OpenClaw 的记忆系统有一个核心设计理念:**模型只记住保存到磁盘的内容**。
这意味着智能体的"记忆"不是什么神秘的向量数据库或复杂的知识图谱——它就是纯 Markdown 文件。智能体通过读写这些文件来"记住"和"回忆"信息。
为什么这样设计?
- **透明可控**:你可以直接打开文件查看智能体记住了什么
- **可编辑**:你可以手动修改记忆内容,纠正错误或补充信息
- **可迁移**:记忆文件就是普通文本,可以备份、同步、版本控制
- **不依赖外部服务**:不需要向量数据库,不需要云服务
## 三个核心文件
OpenClaw 的记忆系统由三个核心文件组成,各有不同的用途。
### MEMORY.md — 长期记忆
`MEMORY.md` 是智能体的"长期记忆本",存储需要跨会话保留的重要信息。
位置:`~/.openclaw/workspace/MEMORY.md`
典型内容:
```markdown
# 长期记忆
## 用户偏好
- 喜欢使用 TypeScript,不喜欢 JavaScript
- 代码风格偏好:函数式编程
- 常用编辑器:VS Code
## 项目信息
- 当前项目:龙虾技能库
- 技术栈:Node.js + Express + MySQL
- 部署方式:PM2 + Nginx
## 重要约定
- 数据库密码不要写在代码里
- 部署前必须跑测试
- Git 提交信息用中文
```
MEMORY.md 在每个会话开始时会被加载到智能体的上下文中,所以智能体在新会话中也能"记住"之前的信息。
### memory/YYYY-MM-DD.md — 每日笔记
每日笔记是智能体的"日记本",按日期自动创建,记录当天的重要事件和发现。
位置:`~/.openclaw/workspace/memory/2025-01-15.md`
典型内容:
```markdown
# 2025-01-15
## 完成的任务
- 修复了教程列表页的搜索功能
- 添加了标签筛选功能
## 发现的问题
- ssr.ts 文件超过 3000 行,需要考虑拆分
- Redis 缓存偶尔失效,需要排查
## 用户提到的
- 下周要上线新的排行榜功能
- 需要支持深色模式
```
每日笔记的特点:
- 自动按日期创建新文件
- 不会加载到每个会话的上下文中(太多了会占用 Token)
- 通过 `memory_search` 工具按需搜索
- 适合记录细节信息和临时笔记
### DREAMS.md — 实验性记忆
`DREAMS.md` 是 OpenClaw 的实验性功能(Dreaming),用于存储经过"梦境处理"的记忆。
位置:`~/.openclaw/workspace/DREAMS.md`
> **注意**:Dreaming 是实验性功能,默认未启用。它的工作方式可能在未来版本中变化。
## 记忆工具
OpenClaw 提供了两个内置工具来操作记忆。
### memory_search — 语义搜索
`memory_search` 工具可以在所有记忆文件中进行语义搜索,找到与查询最相关的内容。
工作方式:
1. 智能体收到一个需要回忆的问题
2. 调用 `memory_search` 搜索相关记忆
3. 返回匹配的记忆片段
4. 智能体基于记忆片段回答问题
示例对话:
```
用户:上次我们讨论的数据库优化方案是什么?
智能体:(调用 memory_search 搜索"数据库优化")
找到相关记忆:
- 2025-01-10.md: 讨论了索引优化,决定为 skills 表的 slug 字段添加唯一索引
- MEMORY.md: 数据库使用 MySQL,服务器 IP 10.0.8.10
根据记忆,上次我们讨论了为 skills 表的 slug 字段添加唯一索引来优化查询性能...
```
语义搜索的优势在于它不是简单的关键词匹配——即使你用不同的措辞描述同一件事,它也能找到相关内容。
### memory_get — 读取记忆
`memory_get` 工具直接读取指定的记忆文件内容。
```
用户:看看我的长期记忆里有什么
智能体:(调用 memory_get 读取 MEMORY.md)
```
与 `memory_search` 的区别:
| 工具 | 用途 | 方式 |
|------|------|------|
| `memory_search` | 搜索相关记忆 | 语义匹配,返回最相关的片段 |
| `memory_get` | 读取完整文件 | 直接读取指定文件的全部内容 |
## 自动记忆刷新
OpenClaw 有一个智能的自动记忆刷新机制,确保重要信息不会在对话压缩(compaction)时丢失。
### 什么是对话压缩
当对话变得很长时,OpenClaw 会触发"压缩"——将之前的对话总结为一段摘要,释放上下文空间。但压缩可能会丢失一些细节信息。
### 自动保存机制
在压缩发生之前,OpenClaw 会自动执行以下操作:
1. **扫描即将被压缩的对话内容**
2. **识别重要信息**(用户偏好、项目决策、关键发现等)
3. **将重要信息保存到记忆文件**(MEMORY.md 或当天的每日笔记)
4. **然后再执行压缩**
这样即使对话被压缩了,重要信息已经安全地保存在记忆文件中,后续可以通过 `memory_search` 找回。
### 手动保存记忆
你也可以主动要求智能体记住某些信息:
```
用户:记住,我们的项目部署到 106.52.9.75 这台服务器
智能体:好的,我已经将这个信息保存到长期记忆中。
(将信息写入 MEMORY.md)
```
或者更具体地:
```
用户:把今天讨论的数据库优化方案记到笔记里
智能体:已记录到今天的笔记中。
(将信息写入 memory/2025-01-15.md)
```
## Dreaming 实验性功能
Dreaming 是 OpenClaw 的一个实验性功能,灵感来自人类睡眠时大脑整理记忆的过程。
### 工作原理
1. **短期信号收集**:在日常对话中,系统会标记"有趣"的信号(用户反复提到的话题、重要的决策、情绪变化等)
2. **信号评分**:每个信号会被评估重要性分数
3. **梦境处理**:在空闲时(类似"睡眠"),系统会处理这些信号:
- 高分信号提升为长期记忆(写入 MEMORY.md)
- 低分信号逐渐衰减
- 相关信号被关联和整合
4. **记忆提升**:经过梦境处理的记忆会更加结构化和精炼
### 启用 Dreaming
Dreaming 默认未启用,因为它还在实验阶段。如果你想尝试:
```json5
{
"memory": {
"dreaming": {
"enabled": true
}
}
}
```
> **提醒**:Dreaming 功能会消耗额外的 API Token(因为需要调用模型来处理信号),且行为可能在未来版本中变化。建议在非生产环境中尝试。
## CLI 记忆管理命令
OpenClaw 提供了一组 CLI 命令来管理记忆系统。
### 查看记忆状态
```bash
openclaw memory status
```
输出示例:
```
记忆状态:
MEMORY.md: 2.3 KB (上次更新: 2025-01-15)
每日笔记: 12 个文件
DREAMS.md: 0.8 KB
索引状态: 已建立 (14 个文档)
```
### 搜索记忆
在命令行中搜索记忆内容:
```bash
openclaw memory search "数据库优化"
```
输出示例:
```
找到 3 条相关记忆:
[1] memory/2025-01-10.md (相关度: 0.92)
讨论了为 skills 表添加索引优化查询性能...
[2] MEMORY.md (相关度: 0.78)
数据库服务器 IP: 10.0.8.10,使用 MySQL...
[3] memory/2025-01-08.md (相关度: 0.65)
发现慢查询问题,排行榜接口响应超过 2 秒...
```
### 重建索引
如果你手动编辑了记忆文件,需要重建搜索索引:
```bash
openclaw memory index
```
这会重新扫描所有记忆文件,更新语义搜索索引。通常在以下情况需要执行:
- 手动编辑了 MEMORY.md 或每日笔记
- 从备份恢复了记忆文件
- 搜索结果不准确时
## 记忆管理最佳实践
### 1. 定期整理 MEMORY.md
MEMORY.md 会随着使用不断增长。建议定期检查和整理:
- 删除过时的信息
- 合并重复的条目
- 按主题分类组织
```bash
# 直接编辑
nano ~/.openclaw/workspace/MEMORY.md
# 或者让智能体帮你整理
openclaw agent --message "帮我整理一下长期记忆,删除过时的信息"
```
### 2. 善用每日笔记
每日笔记适合记录:
- 当天完成的任务
- 遇到的问题和解决方案
- 临时的想法和计划
- 需要后续跟进的事项
### 3. 主动告诉智能体该记什么
智能体不会自动记住所有对话内容。如果有重要信息,明确告诉它:
```
用户:记住这个——以后所有 API 接口都要加上速率限制
```
### 4. 备份记忆文件
记忆文件就是普通的 Markdown 文件,可以用 Git 管理:
```bash
cd ~/.openclaw/workspace
git init
git add MEMORY.md memory/
git commit -m "备份记忆文件"
```
这样你就有了记忆的版本历史,可以随时回溯。
## 记忆系统的局限性
了解记忆系统的局限有助于更好地使用它:
- **MEMORY.md 占用上下文**:MEMORY.md 在每个会话开始时加载,内容太多会占用宝贵的上下文窗口空间
- **每日笔记不自动加载**:每日笔记需要通过 `memory_search` 主动搜索,智能体不会自动"想起"
- **语义搜索有精度限制**:搜索结果可能不完全准确,特别是对于非常具体的技术细节
- **压缩可能丢失细节**:虽然有自动保存机制,但对话压缩时仍可能丢失一些不被认为"重要"的细节
## 小结
OpenClaw 的记忆系统简单而实用:
- 记忆就是 Markdown 文件,透明可控
- MEMORY.md 存长期记忆,每日笔记存日常细节
- `memory_search` 语义搜索,`memory_get` 直接读取
- 对话压缩前自动保存重要信息
- CLI 命令管理记忆状态和索引
记忆系统让智能体从"金鱼记忆"变成了真正能积累经验的助手。善用它,你的智能体会越用越懂你。
#OpenClaw记忆 #Memory系统 #长期记忆 #语义搜索 #龙虾技能库