AI Agent 记忆系统三剑客
LanceDB、Dreaming 与 Memory Wiki 深度解析
前言
一个没有记忆的 AI Agent,每次对话都是从零开始——它不认识你,不知道你关心什么,不记得你们之前讨论过什么。
OpenClaw 的记忆系统由三个各司其职的组件构成:LanceDB(语义检索中枢)、Dreaming(夜间整理员)和 Memory Wiki(结构化知识库)。三者如何分工?数据如何在它们之间流转?本文用真实案例讲清楚。
一、三者关系总览
daily notes (memory/YYYY-MM-DD.md)
→ 03:00 Dreaming → 提炼 durable facts →
AGENTS.md + Memory Wiki
二、各组件详解
2.1 LanceDB(memory-lancedb-pro)
职责:语义记忆中枢——记住说过的话、做过的事,随时可以自然语言搜索找到。
数据来源:session 结束时,agent_end hook 自动运行 Smart Extraction,生成 text 和 metadata(l0/l1/l2 分层摘要)并存入 LanceDB。
id - 唯一标识符
text - 记忆摘要原文
vector - BGE-M3 向量嵌入(语义检索用)
category - fact / decision / preference / entity / other
scope - global / agent:main / agent:xxx
importance - 重要程度 0.0 ~ 1.0
timestamp - 创建时间戳
metadata - { l0_abstract, l1_overview, l2_content }
检索方式:Hybrid Search = Embedding 向量检索 + BGE-Reranker 精排,支持自然语言 query。
触发时机:
- Session 结束自动 capture(主要途径)
- memory_store API 手动写入
- import + upgrade 批量导入
2.2 Dreaming(memory-core)
职责:夜间记忆整理员——每天 03:00 读取前一天的 daily notes,提炼 durable facts,更新 AGENTS.md 并部分推送至 Wiki。
配置:cron 定时任务 0 3 * * *
写入 AGENTS.md + 部分内容 → Memory Wiki
durable facts 示例:
- "用户偏好飞书作为主要沟通渠道"
- "腾讯文档 token 已更新为 fca92af3..."
- "多 Agent 协作必须使用 qwen3-coder-plus 模型"
2.3 Memory Wiki(memory-wiki)
职责:结构化长期知识库——以 Obsidian 风格的 .md 文件沉淀知识,支持双向链接和结构化检索。
Vault 结构:
wiki/main/ ├── index.md ← 知识库总览 ├── AGENTS.md ← AI 行为准则和工作模式 ├── concepts/ ← 概念页面(积累后自动生成) ├── entities/ ← 实体页面(人物、项目、系统) ├── sources/ ← 源文件索引(每个工作日一个 page) ├── syntheses/ ← 综合分析报告 └── reports/ ← 健康检查报告
特点:
- frontmatter 元数据(pageType、id、title、status 等)
- wikilink 双向链接(
[[page-name]]) - 支持渲染为 HTML 页面
三、实例解析:从对话到知识沉淀的全流程
场景:用户让 AI 写一篇关于 memory-lancedb-pro 的技术文章。
第一步:对话 → LanceDB(Session 结束时自动 capture)
| 字段 | 内容 |
|---|---|
id | m_1744365600_xxx |
text | "User asked AI to write a technical article about memory-lancedb-pro. AI wrote a 6-section article covering storage structure, capture flow, retrieval flow, installation, pitfalls, and backup strategy." |
category | episodic |
scope | agent:main |
importance | 0.75 |
metadata.l0 | "AI为用户写作了一篇关于memory-lancedb-pro的技术文章" |
metadata.l1 | "- 文章包含6个章节\n- 涵盖存储结构、Capture流程、检索流程、安装步骤、踩坑实录、备份策略\n- 用户要求导出MD和HTML格式" |
下次用户问"你记得我们写过什么技术文档吗",LanceDB 用语义搜索找到这条记录。
第二步:写入每日笔记 → Dreaming 提炼(凌晨 03:00)
当天 memory/2026-04-11.md 中的原始记录:
## 文章写作 - 用户让AI写 memory-lancedb-pro 技术文章 - AI生成了6个章节 - 用户要求删除4.4节,保留完整安装和踩坑指南 - 文章最终保留在 workspace/docs/memory-lancedb-pro-blog.md
凌晨 03:00,Dreaming 分析后生成 durable facts:
Deductible Fact(confidence: 0.82):
"AI于04-11为用户撰写memory-lancedb-pro实战文章"
提炼写入 AGENTS.md:
"用户257830配置了技术文章写作工作流。文章格式要求:MD原始版 + HTML展示版 + 封面图(16:9)。文章保留位置:workspace/docs/"
第三步:Memory Wiki 结构化沉淀(Dreaming 写入后)
Wiki 中生成的 sources/2026-04-11.md 页面:
--- pageType: source id: source.2026-04-11 title: 2026 04 11 sourceType: session ingestedAt: 2026-04-12T03:00:00Z status: active --- # 2026 04 11 ## Content Summary - AI为用户撰写memory-lancedb-pro技术文章(6章节) - 用户要求删除内置image工具相关内容 - 文章导出MD和HTML两种格式,存于 workspace/docs/ - 生成配套封面图(16:9)供文章使用
Wiki index.md 同步更新 source 列表:
### Sources - [2026 04 06](sources/2026-04-06.md) - [2026 04 07](sources/2026-04-07.md) - ... - [2026 04 11](sources/2026-04-11.md) ← 新增
四、三者对比
| 维度 | LanceDB | Dreaming | Memory Wiki |
|---|---|---|---|
| 核心职责 | 语义检索中枢 | 夜间记忆整理 | 结构化知识沉淀 |
| 数据来源 | Session capture | 分析 daily notes | Dreaming 写入 + bridge 索引 |
| 数据形态 | 结构化记录 + 向量 | 提炼的 durable facts | .md 页面 + frontmatter |
| 触发时机 | 每次 session 结束 | 每天 03:00 | Dreaming 执行后 |
| 检索方式 | 语义向量搜索 | — | 标题/标签/双向链接 |
| 存储位置 | ~/.openclaw/memory/lancedb-pro/ | daily notes + AGENTS.md | ~/.openclaw/wiki/main/ |
五、当前系统配置
{
"plugins": {
"entries": {
"memory-lancedb-pro": {
"enabled": true,
"config": {
"embedding": { "model": "BAAI/bge-m3" },
"retrieval": { "mode": "hybrid" },
"llm": { "model": "THUDM/GLM-4-9B-0414" }
}
},
"memory-core": {
"enabled": true,
"config": {
"dreaming": { "enabled": true, "frequency": "0 3 * * *" }
}
},
"memory-wiki": {
"enabled": true,
"config": {
"vault": { "path": "/root/.openclaw/wiki/main", "renderMode": "native" },
"bridge": { "enabled": true, "readMemoryArtifacts": true, "indexDailyNotes": true }
}
}
}
}
}
六、重要更新:Dreaming 与 LanceDB 的互斥关系(2026-04-12)
⚠️ 以下内容待官方文档确认,当前为观察与推断,仅供参考。
6.1 官方 README 说了什么
memory-lancedb-pro 的 README 明确指出:
"When memory-lancedb-pro is active, your system has two independent memory layers that do not auto-sync"
这意味着两者是完全独立的存储层,写入一个不会被另一个自动召回。
README 建议:"A fact written into memory/YYYY-MM-DD.md is visible in startup context, but memory_recall will not find it unless it was also written via memory_store (or auto-captured by the plugin)."
也就是说:daily notes(Dreaming 的输入)≠ LanceDB 的检索内容,两者不自动同步。
6.2 当前系统记忆层现状
截至 2026-04-12,系统共运行三层记忆存储:
| 存储层 | 位置 | 状态 | 用途 |
|---|---|---|---|
| LanceDB | ~/.openclaw/memory/lancedb-pro/ | ✅ 正常使用 | 语义检索(memory_recall) |
| tdai | ~/.openclaw/memory-tdai/ | ❌ 已禁用 | 向量检索(已关闭) |
| daily notes | memory/YYYY-MM-DD.md | ✅ 正常写入 | Session 日志、启动上下文 |
| Memory Wiki | ~/.openclaw/wiki/main/ | ✅ 正常 | 结构化知识沉淀 |
6.3 待确认事项
- memory-core(Dreaming)写入的内容去哪儿了? 如果 LanceDB 不自动捕获 Dreaming 的输出,那么 Dreaming 提炼的 durable facts 是否真的被长期保留?
- Dreaming 和 LanceDB 是否推荐同时启用? 官方 README 未明确说明,从架构看两者功能有重叠,可能存在资源竞争或重复记录。
- 是否应该将 Dreaming 的输出也写入 LanceDB? 目前两者完全独立,Dreaming 产生的 AGENTS.md 更新和 Wiki 页面不在 LanceDB 的检索范围内。
建议: 在官方明确之前,保持当前配置,持续观察两个系统的运行状态。
七、常见问题
Q1:Dreaming 和 LanceDB 会重复记录吗?
不完全重复,但存在数据隔离的问题:
- LanceDB 记录的是"这次对话说了什么、做了什么",粒度细,面向检索
- Dreaming 提炼的是"经过分析认为值得长期记住的事实",粒度粗,面向沉淀
- 关键问题:Dreaming 提炼的内容默认写入 AGENTS.md 和 Wiki,不会自动进入 LanceDB,因此两者在检索层面是隔离的
Q2:Memory Wiki 的 entities 和 concepts 是自动生成的吗?
目前还需要更多记忆积累才会自动生成。从当前 index.md 看,entities 和 concepts 均显示为 "No entities yet",说明还需要更多相关记忆触发。
Q3:为什么 Dreaming 选择 03:00?
03:00 是业务低峰期,确保前一天所有 session 都已结束归档,同时不影响白天高峰期的响应速度,有足够时间完成整理再迎接新一天。