记忆系统架构
OpenClaw 的记忆系统模仿人类记忆机制,分为短期记忆、中期记忆和长期记忆三层,确保 Agent 既能记住重要信息,又不会被海量数据淹没。
🧠 三层记忆模型
| 层级 | 存储位置 | 保留时间 | 用途 |
|---|---|---|---|
| 短期记忆 | 会话历史 | 当前对话 | 理解上下文、多轮对话 |
| 中期记忆 | memory/YYYY-MM-DD.md | 7-30 天 | 每日日志、临时记录 |
| 长期记忆 | MEMORY.md | 永久 | 重要决策、经验教训 |
📁 文件结构
~/.openclaw/workspace/
├── MEMORY.md # 长期记忆( curated )
├── memory/
│ ├── YYYY-MM-DD.md # 中期记忆(每日日志)
│ ├── working-buffer.md # 工作缓冲区(近期修正)
│ ├── SESSION-STATE.md # 会话状态(WAL Protocol)
│ ├── archive/ # 归档文件(>30 天)
│ │ └── evolver/ # Evolver 归档
│ └── evolution/ # 进化记录
│ └── memory_graph.jsonl # 记忆图谱
└── .learnings/ # 学习记录
├── LEARNINGS.md # 学到的新知识
└── ERRORS.md # 遇到的错误🔄 记忆流转过程
1. 信息输入
用户对话/工具执行结果
↓
会话历史(短期记忆)2. 记忆筛选
会话结束前
↓
自我改进系统分析
↓
├─ 普通对话 → 丢弃
├─ 有趣事实 → memory/YYYY-MM-DD.md
├─ 重要决策 → MEMORY.md
└─ 错误纠正 → .learnings/3. 定期整理
心跳检查(每 30 分钟)
↓
├─ 归档旧日志(>30 天)
├─ 压缩冗余内容
└─ 更新长期记忆📊 各层级详解
短期记忆:会话历史
位置: ~/.openclaw/sessions/*.jsonl
特点:
- 保存当前对话的完整历史
- 用于理解上下文、多轮对话
- 自动清理(7 天/500 条/10MB)
示例:
jsonl
{"role":"user","content":"如何部署 OpenClaw?"}
{"role":"assistant","content":"使用安装脚本..."}中期记忆:每日日志
位置: memory/YYYY-MM-DD.md
特点:
- 记录每天的重要事件
- 保留 7-30 天
- 定期归档到
memory/archive/
示例:
markdown
# 2026-03-21 工作记录
## 系统优化
- 更新 GA4 ID 为 G-8EX34WH1CQ
- 创建 SEO 监控脚本
- 部署自我改进系统文档
## 故障排查
- Gateway Scope 问题持续 ~130h
- 需手动执行 `openclaw gateway auth --scope operator.read`长期记忆:MEMORY.md
位置: MEMORY.md
特点:
- curated(精心筛选)的重要信息
- 永久保存
- 手动/半自动更新
内容类型:
- 重要决策
- 经验教训
- 用户偏好
- 系统配置
示例:
markdown
## 经验教训 (Lessons Learned)
1. **ClawHub 限流**: 下载 API 20 次/分钟,批量安装需延迟
2. **systemd 冲突**: 不要同时使用系统服务和用户服务
3. **Gateway 故障模式分类**:
- (a) 瞬断/崩溃 → systemd 可自愈
- (b) 配置问题 → 需人工干预🔍 记忆检索
语义检索
使用本地 Embedding 模型(embeddinggemma-300m):
bash
# 搜索记忆
openclaw -c "memory_search query='上次 Gateway 故障'"返回结果:
json
{
"path": "MEMORY.md",
"startLine": 79,
"endLine": 87,
"score": 0.39,
"snippet": "Gateway 故障模式分类..."
}检索策略
| 策略 | 说明 |
|---|---|
| 混合检索 | 向量相似度 + 文本匹配 |
| 时间衰减 | 近期记忆权重更高 |
| MMR 去重 | 避免返回相似结果 |
🛠️ 实现细节
1. WAL Protocol(Write-Ahead Logging)
目的:确保重要信息不丢失
流程:
响应前 → 写入 SESSION-STATE.md
→ 记录关键决策
→ 下次会话可读2. Working Buffer
位置: memory/working-buffer.md
用途:
- 记录近期修正
- 捕获上下文危险区
- 心跳时审核
3. 记忆压缩
触发条件:
- 活跃文件 > 20 个
- 总量 > 1MB
- 单个文件 > 100KB
压缩策略:
原始文件 → 提取关键信息 → 写入 MEMORY.md
→ 归档到 archive/
→ 删除原文件📈 性能优化
1. 向量索引
工具: LanceDB(本地向量数据库)
特点:
- 增量更新
- 支持混合检索
- 低延迟(<100ms)
2. 缓存策略
| 层级 | 缓存内容 | 过期时间 |
|---|---|---|
| L1 | 最近检索结果 | 5 分钟 |
| L2 | 向量索引 | 持久化 |
| L3 | 记忆文件 | 持久化 |
3. 磁盘管理
自动清理:
bash
# 每日清理脚本
/root/.openclaw/workspace/scripts/evolver-cleanup.sh 7归档策略:
- 7 天内:活跃文件
- 7-30 天:归档
30 天:可删除
🎯 使用建议
日常使用
无需操作,系统自动管理:
- ✅ 对话自动记录到会话历史
- ✅ 重要事件自动写入每日日志
- ✅ 经验教训自动提取到 MEMORY.md
手动干预
何时需要:
- 发现记忆错误 → 编辑对应文件
- 需要记住特定信息 → 写入
memory/YYYY-MM-DD.md - 清理磁盘空间 → 运行清理脚本
最佳实践
- 信任自动系统 - 不要频繁手动修改
- 定期审查 - 每月检查 MEMORY.md 是否准确
- 备份重要记忆 - 使用 Git 提交记录
❓ 常见问题
Q: 记忆会泄露给其他人吗?
A: 不会。记忆文件存储在本地:
- 主会话:读取 MEMORY.md
- 群聊/共享会话:不读取MEMORY.md
Q: 记忆太多会影响性能吗?
A: 不会。系统自动管理:
- 向量索引:只加载相关部分
- 自动归档:旧文件压缩
- 缓存策略:减少重复加载
Q: 可以导出记忆吗?
A: 可以。所有记忆都是 Markdown 文件:
bash
# 导出所有记忆
tar -czf memory-backup.tar.gz ~/.openclaw/workspace/memory/🔗 相关文档
设计理念:模仿人类记忆机制,自动筛选重要信息,让 Agent 越用越聪明。