🦞 OpenClaw 的记忆机制 + User 机制详解

一、记忆系统架构

OpenClaw 采用双层记忆设计,模拟人类的短期记忆和长期记忆:

┌─────────────────────────────────────────┐
│         AI Agent 工作记忆               │
│      (LLM Context Window)               │
│                                         │
│  ┌───────────────────────────────────┐  │
│  │  当前对话上下文                    │  │
│  │  + 最近 1-2 天的日志               │  │
│  │  + MEMORY.md 中的长期记忆          │  │
│  └───────────────────────────────────┘  │
└─────────────────────────────────────────┘
              ↓ 接近上下文限制时
┌─────────────────────────────────────────┐
│      预压缩记忆刷新机制                  │
│   (Pre-compaction Memory Flush)         │
│                                         │
│  AI 自主决定保存什么到磁盘               │
└─────────────────────────────────────────┘

┌─────────────────────────────────────────┐
│         持久化存储 (磁盘)                │
│                                         │
│  ├─ memory/2026-02-10.md (短期记忆)    │
│  ├─ memory/2026-02-09.md               │
│  └─ MEMORY.md (长期记忆)                │
└─────────────────────────────────────────┘

二、两层记忆详解

2.1 第一层:短期记忆(Daily Logs)

文件位置~/.openclaw/workspace/memory/YYYY-MM-DD.md

特点

  • 自动创建:每天自动创建新文件
  • 追加模式:只追加,不修改历史内容
  • 自动加载:会话启动时自动加载当天和前一天的日志
  • 临时性:提供最近的时间上下文

2.2 第二层:长期记忆(MEMORY.md)

文件位置~/.openclaw/workspace/MEMORY.md

特点

  • 精选内容:只保存重要、稳定的信息
  • 手动或自动更新:可以手动编辑,也可以由 AI 自动写入
  • 持久性:跨会话保持
  • 简洁性:应保持精简,避免冗余

三、记忆是如何更新的?

3.1 自动更新机制:预压缩记忆刷新

这是 OpenClaw 最核心的记忆机制!

触发条件:当前上下文令牌数 > 软阈值(默认 4000 tokens)

工作流程

  1. 监控上下文使用 → 持续监控令牌数 → 接近限制
  2. 触发静默代理回合(Silent Agentic Turn):系统自动插入特殊提示,要求 AI 将重要信息写入持久化存储
  3. AI 自主决策:没有硬性规则,AI 根据上下文自己判断什么重要
  4. 写入磁盘:AI 执行文件写入操作
  5. 压缩上下文:保存完成后,旧的对话历史被总结或丢弃,释放上下文空间

关键特点

  • ✅ 每个压缩周期只执行一次
  • ✅ 完全由 AI 自主判断保存什么
  • ✅ 使用标准工具,没有特殊的 memory_write 工具
  • ✅ 工作空间只读时跳过

3.2 手动更新机制

用户也可以显式要求 AI 保存信息:

用户: "请记住,我们的生产环境部署时间是每周三凌晨 2 点"
AI: "好的,我会将这个重要信息保存到长期记忆中。"
    [执行 write_to_file("MEMORY.md", ...)]

四、记忆是如何使用的?

4.1 混合检索机制

OpenClaw 使用 BM25 + 向量搜索的混合方式检索记忆:

用户查询

┌─────────────────────────────────────┐
│   混合检索(Hybrid Search)          │
│                                     │
│  ┌──────────────┐  ┌─────────────┐  │
│  │ BM25 搜索    │  │ 向量搜索     │  │
│  │ (关键词匹配) │  │ (语义理解)   │  │
│  │ 权重: 30%    │  │ 权重: 70%   │  │
│  └──────────────┘  └─────────────┘  │
│         ↓                 ↓         │
│      合并结果 + 加权评分            │
└─────────────────────────────────────┘

返回最相关的记忆片段 → 注入到 AI 的上下文中
  • BM25(30% 权重):使用 SQLite FTS5 全文搜索,擅长精确匹配关键词
  • 向量语义搜索(70% 权重):使用 embeddings + 余弦相似度,擅长概念匹配

4.2 记忆加载时机

会话启动时

  1. 加载 MEMORY.md(长期记忆)
  2. 加载 memory/今天.md
  3. 加载 memory/昨天.md
  4. 加载其他配置文件(SOUL.md, AGENTS.md 等)

对话过程中:根据用户查询动态检索相关记忆,注入到当前上下文中。


五、AI 如何判断什么需要保存?

OpenClaw 没有硬性规则,完全依赖 AI 的判断力。

AI 在预压缩刷新时会考虑:

  1. 重要性评估:这是一次性信息还是需要长期记住?
  2. 信息分类
  • 短期信息 → memory/YYYY-MM-DD.md(今天的活动、临时决策)
  • 长期信息 → MEMORY.md(用户偏好、项目约定、关键配置)
  1. 去重和整合:避免重复,更新已有信息

六、记忆系统的哲学

文件即真相(Files as Source of Truth)

所有记忆都是人类可读的 Markdown 文件,用户可以直接查看、编辑、删除,可以用 Git 进行版本控制,没有黑盒数据库。

上下文窗口 = 临时缓存

LLM 上下文窗口 ≈ RAM(易失性)
磁盘文件 ≈ 硬盘(持久性)

类似计算机的虚拟内存机制!

AI 自主性

信任 AI 的判断力,不设置僵硬的规则,让 AI 像人类一样决定什么值得记住。


七、USER.md vs MEMORY.md

工作空间完整文件结构

~/.openclaw/workspace/
├── SOUL.md       # AI 的个性和价值观
├── AGENTS.md     # 操作规则和安全策略
├── TOOLS.md      # 本地环境配置
├── IDENTITY.md   # AI 的角色定义
├── USER.md       # 👈 关于用户的静态信息
├── MEMORY.md     # 👈 动态的长期记忆
├── HEARTBEAT.md  # 主动监控清单
├── BOOTSTRAP.md  # 启动配置
└── memory/       # 每日日志目录

核心区别

USER.md   = "关于你的用户手册"(相对静态)
MEMORY.md = "我们一起经历的事情"(动态变化)

USER.md   = 回答 "我是谁"
MEMORY.md = 回答 "我在做什么"
维度USER.mdMEMORY.md
性质静态档案动态记忆
内容关于用户的事实关于经历的记录
更新频率很少(几个月一次)频繁(几乎每天)
主语”用户是…""我们做了…”
示例”用户擅长 Python""上周决定用 FastAPI”

它们如何协同工作

用户提问

1. 加载 USER.md  → 了解用户是谁、擅长什么
2. 加载 MEMORY.md → 了解最近在做什么、遇到什么问题
3. 加载 memory/今天.md → 了解今天和昨天的具体活动
4. 综合所有信息 → 提供个性化、有上下文的回答

八、总结

USER.md  = "我的简历和偏好"
MEMORY.md = "我的工作日志和经验"

使用建议

  1. 初次设置:认真填写 USER.md
  2. 日常使用:让 AI 维护 MEMORY.md
  3. 定期维护:每周整理 MEMORY.md,每季度更新 USER.md
  4. 保持分离:不要混淆两者的内容

这种设计让 AI 既能了解你这个人(USER.md),又能记住你们一起做过的事(MEMORY.md),从而提供更加个性化和有上下文的帮助!

Logo

京ICP备2025112521号-1