OpenClaw 三层记忆系统详解
摘要: 深入解析 OpenClaw 的记忆架构,包括 LCM 上下文管理、lossless-claw 会话记忆、memory-lancedb-pro 长期记忆三层协作机制。
📚 目录
架构总览
OpenClaw 采用三层记忆架构,各自负责不同层面的信息管理:
┌─────────────────────────────────────────────────────────┐
│ 用户对话 │
│ ↓ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ LCM (Lossless Context Management) │ │
│ │ 作用:自动压缩旧对话,腾出上下文空间 │ │
│ │ 触发:上下文达到 80-90% 时自动 │ │
│ │ 存储:会话内摘要(临时) │ │
│ └─────────────────────────────────────────────────┘ │
│ ↓ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ lossless-claw (插件) │ │
│ │ 作用:智能判断哪些内容值得保留 │ │
│ │ 触发:对话进行中实时分析 │ │
│ │ 存储:会话级记忆(临时 + 半持久) │ │
│ └─────────────────────────────────────────────────┘ │
│ ↓ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ memory-lancedb-pro (插件) │ │
│ │ 作用:长期记忆存储,跨会话检索 │ │
│ │ 触发:smartExtraction 判断重要信息 │ │
│ │ 存储:LanceDB 向量数据库(持久化) │ │
│ └─────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘1️⃣ LCM (Lossless Context Management) — 内置系统
| 维度 | 说明 |
|---|---|
| 本质 | OpenClaw 内置的上下文管理机制(不是插件) |
| 职责 | 当对话历史太长时,自动压缩旧消息为摘要 |
| 触发 | 上下文使用率达到 80-90% 时自动触发 |
| 存储 | 会话内的摘要(session summary),对话结束后可能丢失 |
| 用户干预 | ❌ 无需手动操作,全自动 |
| 类比 | 像人类的"短期记忆整理" — 把刚才的对话压缩成要点 |
工作流程:
消息 1,2,3,4,5... → [上下文快满了] → LCM 自动压缩 → 摘要 (1-3) + 消息 4,5...2️⃣ lossless-claw — 会话记忆插件
| 维度 | 说明 |
|---|---|
| 本质 | OpenClaw 插件,增强会话级记忆管理 |
| 职责 | 智能判断哪些对话内容值得保留,防止重要信息被 LCM 压缩掉 |
| 触发 | 对话进行中实时分析 |
| 存储 | 会话级记忆(比 LCM 更持久,但仍限于会话) |
| 用户干预 | ❌ 自动运行 |
| 类比 | 像"会议记录员" — 标记哪些内容是重点,不能被摘要覆盖 |
3️⃣ memory-lancedb-pro — 长期记忆插件
| 维度 | 说明 |
|---|---|
| 本质 | OpenClaw 插件,长期记忆存储系统 |
| 职责 | 将重要信息持久化到 LanceDB 向量数据库,支持跨会话检索 |
| 触发 | smartExtraction 判断内容重要性 + autoCapture 自动写入 |
| 存储 | ~/.openclaw/memory/lancedb-pro/(永久保存) |
| 检索 | autoRecall 自动检索相关记忆注入当前对话 |
| 类比 | 像人类的"长期记忆" — 记住你的偏好、重要决定、关键事实 |
核心配置
json
{
"enabled": true,
"config": {
"embedding": {
"provider": "openai-compatible",
"baseURL": "http://localhost:11434/v1",
"model": "nomic-embed-text",
"dimensions": 768
},
"autoCapture": true, // 自动写入
"autoRecall": true, // 自动检索
"smartExtraction": true, // AI 判断重要性
"extractMinMessages": 2, // 至少 2 条消息才提取
"extractMaxChars": 8000 // 单次提取最多 8000 字符
}
}🔄 三者协作流程
用户:我今天决定用 gemma4:e4b 跑日常对话,26b 留给复杂任务
↓
┌─────────────────────────────────────────┐
│ lossless-claw 检测到"重要决定" │
│ → 标记这条消息不能被 LCM 随意压缩 │
└─────────────────────────────────────────┘
↓
┌─────────────────────────────────────────┐
│ memory-lancedb-pro smartExtraction 判断 │
│ → 这是"用户偏好/决策",值得长期记住 │
│ → autoCapture 触发 → 写入 LanceDB │
└─────────────────────────────────────────┘
↓
┌─────────────────────────────────────────┐
│ LCM 继续管理上下文长度 │
│ → 但不会压缩被 lossless-claw 标记的内容 │
└─────────────────────────────────────────┘
↓
[下次对话]
↓
┌─────────────────────────────────────────┐
│ memory-lancedb-pro autoRecall 自动检索 │
│ → 找到"用户偏好使用 gemma4:e4b" │
│ → 注入当前对话上下文 │
└─────────────────────────────────────────┘📊 对比总结
| 特性 | LCM | lossless-claw | memory-lancedb-pro |
|---|---|---|---|
| 类型 | 内置系统 | 插件 | 插件 |
| 存储时长 | 会话内(临时) | 会话内(半持久) | 永久(跨会话) |
| 触发方式 | 上下文满自动 | 实时分析 | smartExtraction |
| 存储位置 | 会话缓存 | 会话缓存 | LanceDB 文件 |
| 检索能力 | ❌ | ❌ | ✅ 向量检索 |
| 用户干预 | 无需 | 无需 | 无需 |
💡 实践建议
适用场景
| 场景 | 推荐配置 |
|---|---|
| 日常对话 | 三层全开,自动运行 |
| 重要决策 | 手动确认写入 LanceDB |
| 敏感信息 | 关闭 autoCapture,手动管理 |
| 长对话 | 依赖 LCM 自动压缩 |
性能优化
- 嵌入模型:使用本地 Ollama + nomic-embed-text(免费、离线)
- 向量维度:768 维平衡精度与存储
- 批量写入:设置
extractMinMessages: 2减少碎片
📝 参考资料
官方文档
社区资源
相关技术
🔖 标签
#OpenClaw #Memory #LanceDB #AI-Agent #上下文管理 #向量数据库
最后更新: 2026-04-08
作者: Yi
许可: MIT