乐于分享
好东西不私藏

OpenClaw 记忆系统配置指南(坑后总结)

OpenClaw 记忆系统配置指南(坑后总结)

🧠折腾了几天,感觉总算把agent的失忆坑折腾出来了,在此做个总结,也方便我自己以后建新实例或者agent的记忆设置。

如果你也在纠结这个问题,不妨把整篇文档喂给你的龙虾,它应该自己能学会(我自己新建agent的时候也是这么做的,直接把经验总结甩给她,让她自己学)

---

📋 一、OpenClaw 的三层记忆体系

OpenClaw 有三层不同的记忆,它们各自独立、互相配合,构成一个完整的记忆系统。

第一层:大写 MEMORY.md —— 长期记忆

文件位置:~/.openclaw/workspace/MEMORY.md(每个 Agent 有自己独立的一份)

性质:人工维护的长期记忆文件,由 Agent 手动编写和更新。它是"金句本"和"核心数据库"——记录最重要、最值得留下来的信息。

典型内容:

  • 用户的基本信息、偏好、禁忌
  • Agent 的身份设定(SOUL.md 的浓缩版)
  • 重要的系统配置决策和教训
  • 已完成的重要事项清单
  • 工具使用经验(什么行、什么不行)

谁来写:Agent 自己在发现重要信息时主动写,或者从每日记忆(memory/)里提炼精华同步进来。没有自动写入机制,完全靠 Agent 自觉。

有什么用:每次新会话开始时,OpenClaw 会读取 MEMORY.md 作为系统上下文的一部分,让 Agent 在"失忆"重启后依然知道"我是谁、用户是谁、过去做过什么重要决定"。

第二层:小写 memory/YYYY-MM-DD.md —— 每日日记

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

性质:Agent 每天的日记本,按日期命名。记录当天做了什么事、有什么进展、待跟进什么。

典型内容:

  • 当天完成的任务清单
  • 遇到的问题和解决方案
  • 未完成的事项
  • 对话中的关键上下文

谁来写:通过 Heartbeat(心跳任务)或 Cron(定时任务)自动生成。大多数 Agent 每天凌晨 0 点会自动生成前一天的日记。

第三层:LCM(lossless-claw)—— 对话全量记录

文件位置:~/.openclaw/lcm.db(SQLite 数据库)

性质:OpenClaw 的"会话录像机"。所有对话的原始消息全部存档,包括每一条用户消息和 Agent 回复,一字不漏。

技术细节:

  • 由 lossless-claw 插件提供
  • 配置项在 openclaw.json 的 plugins.entries."lossless-claw" 下
  • contextThreshold
    :上下文压缩阈值(默认 0.75)
  • freshTailCount
    :保留最近多少条消息不被压缩

有什么用:

  • 当 Agent 需要回顾"具体某句话是怎么说的"时,可以去查 LCMDB
  • LCM 有"浓缩"机制,会把太长的历史对话压缩成摘要,只保留最近的细节
  • 相当于"全量录像 + 智能压缩",既不丢重要信息,又不会让上下文无限膨胀

🔧 二、三层记忆的协同关系

用户发消息     ↓ OpenClaw 读取 LCMDB(最新消息 + 压缩后的历史摘要)     ↓ 如果问了"用户之前说过什么" → 查 MEMORY.md(长期记忆)     ↓ 如果需要了解"最近发生了什么" → 查 memory/2026-03-29.md(每日日记)     ↓ Agent 综合三层记忆 + 当前输入 → 产出回复

实际例子:用户问:"Agent 3 上次整理云盘删了什么文件?" → 查 memory/ 的日记,找到相关记录。用户问:"Agent 1 的定位是什么?" → 查 MEMORY.md,找到 Agent 的身份设定。用户问:"上次和用户聊天的具体内容是什么?" → 查 LCMDB,直接读原始消息记录。

⚠️ 三、新建 Agent 时,三层记忆各缺什么

结论:刚创建的新 Agent,三层记忆全部不完整。

第一层 MEMORY.md —— 白纸一张

新 Agent 的 workspace 里可能有 MEMORY.md 文件,但内容是模板,没有真实记忆。表现:Agent 重启后不记得任何上下文,不知道用户是谁,不知道自己的职责。

第二层 memory/ —— 没有日记和定时任务

新 Agent 缺少:

  • 1没有当天的 memory 文件:memory/YYYY-MM-DD.md 不存在
  • 2没有每日记忆 Cron:没有定时任务自动生成每天的日记

⚠️ 教训(2026-03-30):不加 --session-key 的 isolated cron 会执行成功,但 workspace 里的文件是临时的——cron 结束后文件就消失了,看起来像"执行成功但没写入"。这个问题导致全部 5 个 Agent 的每日记忆都失效了整整一天才发现。

第三层 LCM —— 配置缺失或错误

新 Agent(或新的 OpenClaw 实例)通常在这一层最容易出问题:

  • 1plugins.slots.contextEngine 没有设为 "lossless-claw"
  • 2plugins.entries."lossless-claw".config 没有配

需要的配置:

"plugins": {  "slots": { "contextEngine": "lossless-claw" },  "entries": {    "lossless-claw": {      "enabled": true,      "config": {        "freshTailCount": 32,        "contextThreshold": 0.75      }    }  }}# 然后执行openclaw gateway restart

🔍 四、Embedding 搜索:让 Agent 理解语义

在三层记忆之上,还有一套"搜索基础设施"——Embedding 搜索(向量嵌入搜索)。它不是独立的记忆层,而是让三层记忆都能被"语义理解"地查找到的能力。

什么是 Embedding(嵌入)?

Embedding 是把文字转换成"数字向量"的技术。两句话意思几乎一样,但文字不同时,向量嵌入后两句话的"数字向量"非常接近——所以语义搜索能找到它们。

Embedding 能做到的事:搜"用户的配置规则" → 能找到"改配置前必须先汇报"(文字不完全相同,但意思一样)。搜"OpenClaw 的对话记忆" → 能找到"LCM 数据库存档"。搜"每天写的日记" → 能找到"memory/ 日期文件"。

硅基流动 BAAI/bge-m3(推荐国内用户)

  • 完全免费(free tier 足够日常使用)
  • 国内访问,速度快
  • 支持中文语义理解
"agents": {  "defaults": {    "memorySearch": {      "provider": "openai",      "model": "BAAI/bge-m3",      "remote": {        "baseUrl": "https://api.siliconflow.cn/v1/",        "apiKey": "sk-你的硅基流动API密钥"      }    }  }}

混合搜索:向量 + 关键词

BAAI/bge-m3 配置好之后,OpenClaw 默认会使用混合搜索(Hybrid Search)

搜索方式
占比
擅长
向量搜索
70%
语义理解、近义词
关键词搜索(BM25)
30%
精确匹配、代码符号

📋 五、Heartbeat 和 Cron 在记忆系统里的角色

Heartbeat(心跳)—— 轻量定时检查

Heartbeat 是 OpenClaw 的"定期小检查"机制。每隔一定时间,Agent 会自动执行 HEARTBEAT.md 里规定的任务。

典型心跳任务:

  • 检查今天的 memory/ 文件是否已写
  • 检查 MEMORY.md 是否有重要内容需要更新
  • 检查有没有遗漏的待办事项

Cron(定时任务)—— 每日记忆生成器

Cron 是"定时自动执行的任务",每天在指定时间运行一次。

⚠️ --session-key 参数是本配置最关键的地方!缺少此参数会导致 isolated session 的 workspace 文件变成临时文件,cron 执行完就消失,不会真正写入 memory/ 目录。

Heartbeat
Cron
频率
定期(每30分钟等)
每天一次
时机
随时
固定时间
任务
检查、轻量操作
生成每日记忆
独立性
和对话共用一个 Agent
独立进程

🔧 六、新建 Agent 的完整记忆系统配置清单

第一步:检查基本文件

# 检查 workspace 里有哪些文件ls ~/.openclaw/workspace-/# 检查 memory/ 目录是否存在ls ~/.openclaw/workspace-/memory/

第二步:配置 LCM(第三层记忆)

"plugins": {  "slots": { "contextEngine": "lossless-claw" },  "entries": {    "lossless-claw": {      "enabled": true,      "config": { "freshTailCount": 32, "contextThreshold": 0.75 }    }  }}# 然后执行openclaw gateway restart

第三步:建每日记忆 Cron(第二层记忆)

⚠️ 必须预先创建 memory/ 目录!如果目录不存在,cron 执行时会因写文件失败而报错。这个坑在 2026-03-30 被发现——5 个 Agent 的 cron 全都因为 memory/ 目录缺失而没有真正写入文件。

openclaw cron add \  --agent <agentId> \  --name "每日记忆生成" \  --cron "0 0 * * *" \  --timezone "Asia/Shanghai" \  --task "请完成以下任务:1. 使用 lcm_expand_query 查询昨天的所有对话摘要2. 生成一份记忆文档,保存到 <workspace>/memory/YYYY-MM-DD.md3. 完成后只回复:「📝 昨日记忆已生成,文件:memory/YYYY-MM-DD.md」" \  --workspace ~/.openclaw/workspace-<agentId> \  --isolated \  --session-key "memory-<agentId>"

第四步:创建 memory/ 目录

mkdir -p ~/.openclaw/workspace-<agentId>/memory/touch ~/.openclaw/workspace-<agentId>/memory/YYYY-MM-DD.md

第五步:配置向量搜索

"agents": {  "defaults": {    "memorySearch": {      "provider": "openai",      "model": "BAAI/bge-m3",      "remote": {        "baseUrl": "https://api.siliconflow.cn/v1/",        "apiKey": "sk-你的硅基流动API密钥"      }    }  }}# 建向量索引openclaw memory index --agent <agentId>

第六步:验证配置

# 检查是否有 sessionKey(非空才是正确的)openclaw cron list --json 2>/dev/null | grep sessionKey# 验证向量搜索openclaw memory search "测试query" --agent <agentId>

✅ 正确的 cron 应该在 cron list 中显示 sessionKey: "memory-<agentId>"(非空);如果显示空,说明 isolated session 是临时的,文件不会真正写入。

✅ 七、常见问题

Q:LCM 的 contextThreshold 设多少合适?0.75 是默认值,意思是"当上下文超过 75% 的 token 上限时,开始压缩历史"。如果 Agent 经常聊长话题,可以适当调低(比如 0.6);如果对话普遍很短,可以调高(比如 0.85)。

Q:向量搜索和关键词搜索哪个更好?OpenClaw 默认是 hybrid 混合模式:向量占 70% 权重,关键词占 30%。两者结合效果最好,一般不需要改。

Q:每天的 memory 文件会无限积累吗?不会。每个 Agent 的 memory/ 目录下会有很多个 YYYY-MM-DD.md,但 LCM 有压缩机制,Agent 在读取历史时不会一次读进全部文件。建议每过一段时间(比如一个月),把同一个月的内容合并清理一次。

Q:Cron 跑的时候 Agent 在忙怎么办?Isolated cron 是在独立进程里跑的,不占用正常 Agent 的资源。即使 Agent 正在和人聊天,凌晨 0:00 的 Cron 也会准时执行。

Q:硅基流动的 API Key 怎么获取?访问 https://siliconflow.cn 注册账号,在个人中心 → API 密钥页面获取。BAAI/bge-m3 模型在免费额度内足够日常使用。

📚 三层记忆总结

MEMORY.md 是"金句本",memory/YYYY-MM-DD.md 是"日记本",lcm.db 是"录像机"。三层各司其职,Agent 才能真正记住"我是谁、用户是谁、过去发生了什么"。