Skip to content

记忆系统架构

OpenClaw 的记忆系统模仿人类记忆机制,分为短期记忆中期记忆长期记忆三层,确保 Agent 既能记住重要信息,又不会被海量数据淹没。


🧠 三层记忆模型

层级存储位置保留时间用途
短期记忆会话历史当前对话理解上下文、多轮对话
中期记忆memory/YYYY-MM-DD.md7-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
  • 清理磁盘空间 → 运行清理脚本

最佳实践

  1. 信任自动系统 - 不要频繁手动修改
  2. 定期审查 - 每月检查 MEMORY.md 是否准确
  3. 备份重要记忆 - 使用 Git 提交记录

❓ 常见问题

Q: 记忆会泄露给其他人吗?

A: 不会。记忆文件存储在本地:

  • 主会话:读取 MEMORY.md
  • 群聊/共享会话:不读取MEMORY.md

Q: 记忆太多会影响性能吗?

A: 不会。系统自动管理:

  • 向量索引:只加载相关部分
  • 自动归档:旧文件压缩
  • 缓存策略:减少重复加载

Q: 可以导出记忆吗?

A: 可以。所有记忆都是 Markdown 文件:

bash
# 导出所有记忆
tar -czf memory-backup.tar.gz ~/.openclaw/workspace/memory/

🔗 相关文档


设计理念:模仿人类记忆机制,自动筛选重要信息,让 Agent 越用越聪明。

基于 OpenClaw 开源项目