OpenClaw 三层记忆系统实战:让 AI 代理真正记住你
作者:心痛的小鱼 | 2026-04-03
前言
用 OpenClaw 一段时间了,最大的感触是:每次跟 AI 说"上次那个项目",它一脸茫然。
后来搞懂了三层记忆系统,才发现原来 AI 是可以"记住"之前的。配置一套下来,确实省事不少。
效果演示
没有记忆时:
我:帮我看看上次那个项目的问题
AI:抱歉,我不知道你说的是哪个项目
我:就是上周讨论的 Vue 项目
AI:还是不知道,你得重新描述一下背景...
有记忆时:
我:帮我看看上次那个项目的问题
AI:找到了!你说的是 FastAPI + Vue3 项目,上次讨论的问题是 CORS 配置...
我:帮我在这个项目里加个导出功能
AI:好的,在 src/api/export.ts,已经帮你加好了...
核心工作场景
项目持续开发,第二天继续优化:
用户:昨天开发的项目,我又想到一个要优化的功能:XXX
AI 工作流:
1. 当前会话 context → 没有
2. 向量库搜索 → 找到相关记忆碎片 + 来源文件
3. 加载 memory 文件 → 获取开发进度
4. 加载 OB 文档 → 找到 PRD、功能列表
5. 定位源代码 → 找到对应文件
6. 发送大模型优化 → 完成开发
7. 通知用户
向量搜索返回示例:
{
"text": "项目开发进度:第一天完成了用户模块...",
"source": "memory/2026-04-02.md",
"relevance": 0.95
}
一、为什么需要记忆系统?
没有记忆的 AI 每次对话都要重新交代背景,效率拉满。
OpenClaw 的三层记忆系统灵感来源于人的记忆分层:
| 记忆层 | 时间 | 容量 | 特点 |
|---|---|---|---|
| 瞬时记忆 | 几秒 | 很少 | 看一眼就忘 |
| 短时记忆 | 几分钟 | 有限 | 工作记忆 |
| 长时记忆 | 几天到几年 | 无限 | 知识沉淀 |
二、三层记忆系统解析
2.1 工作记忆(Working Memory)
位置:当前会话上下文(Context)
特点:最快,但容量有限,受模型 context window 限制
2.2 会话记忆(Session Memory)
位置:文件系统
~/.openclaw/workspace/memory/YYYY-MM-DD.md
~/.openclaw/workspace/MEMORY.md
特点:跨对话持久化,Markdown 格式
2.3 长期记忆(Long-term Memory)
向量记忆(Vector Memory)
插件:memory-lancedb-pro
特点:可语义检索,支持自然语言查询,返回结果包含来源引用
# 语义搜索(返回结果包含文件来源)
results = memory_recall(query="项目 PRD", limit=5)
# 返回: [{"text": "...", "source": "memory/2026-04-02.md", "relevance": 0.95}, ...]
# 存储记忆
memory_store(text="重要信息", scope="global", importance=0.8)
Obsidian 知识库
位置:/home/user/obsidian-vault/
特点:结构化知识 + 双向链接 + Git 同步
三、安装配置
3.1 注册向量模型
使用向量记忆前,需要先注册一个专用的小模型来生成向量。
推荐使用 SiliconFlow 平台(siliconflow.cn/):
- 注册一个免费账号
- 获取 API Key
- 支持 BGE-M3 等多种向量模型
# 在 OpenClaw 配置中注册
openclaw config set embeddings.model "BAAI/bge-m3"
openclaw config set embeddings.dimensions 1024
openclaw config set embeddings.api_key "your-siliconflow-api-key"
3.2 完整配置示例
在 openclaw.json 中添加:
{
"plugins": {
"slots": {
"memory": "memory-lancedb-pro"
},
"entries": {
"memory-lancedb-pro": {
"enabled": true,
"config": {
"embedding": {
"model": "BAAI/bge-m3",
"dimensions": 1024
},
"autoCapture": true,
"autoRecall": true,
"extractMinMessages": 2,
"extractMaxChars": 8000,
"retrieval": {
"mode": "hybrid",
"vectorWeight": 0.7,
"bm25Weight": 0.3,
"minScore": 0.35,
"rerank": "cross-encoder",
"rerankModel": "BAAI/bge-reranker-v2-m3"
},
"scopes": {
"default": "global",
"definitions": {
"global": { "description": "所有代理共享记忆" },
"agent:pm": { "description": "PM 机器人私有" },
"agent:front-dev": { "description": "前端开发私有" },
"agent:back-dev": { "description": "后端开发私有" },
"agent:qa-ops": { "description": "测试运维私有" },
"agent:bingbing": { "description": "冰冰私有" }
}
}
}
}
}
}
}
核心配置说明:
| 配置 | 说明 |
|---|---|
autoCapture | 自动捕获重要对话存入向量库 |
autoRecall | 自动检索相关记忆注入上下文 |
extractMinMessages | 连续 N 条消息才提取记忆(防噪音) |
extractMaxChars | 单次提取最大字符数 |
retrieval.mode | 检索模式:hybrid(混合向量+关键词) |
scopes | 多代理记忆隔离配置 |
Scope 记忆共享规则:
| Scope | 说明 |
|---|---|
global | 所有代理共享,一处存入处处可搜 |
agent:xxx | 单一代理私有,只能自己搜 |
# 存入全局共享记忆
memory_store(text="项目背景", scope="global", importance=0.8)
# 存入私有记忆
memory_store(text="冰冰的偏好", scope="agent:bingbing", importance=0.6)
3.3 验证安装
openclaw gateway restart
# 测试
memory_store(text="测试记忆", scope="global")
memory_recall(query="测试")
3.4 ⚠️ 配置避坑指南
常见配置错误:
| 错误配置 | 风险 | 正确做法 |
|---|---|---|
memorySearch.extraPaths 指向 OB | 每次搜索都解析 Markdown,重复且慢 | 用同步脚本导入向量库,不用 extraPaths |
| OB 同步 + autoCapture 同一 scope | 内容重复存储 | OB 同步到 obsidian scope,autoCapture 用 agent:xxx scope |
autoRecall 搜索所有 scopes 无去重 | 同一内容返回多条 | 检索结果按 scope 分组,取最新版本 |
正确架构:
┌─────────────────────────────────────────────────────┐
│ 向量库(lancedb-pro) │
├─────────────────────────────────────────────────────┤
│ autoCapture → agent:xxx scope(对话记忆) │
│ OB 同步脚本 → obsidian scope(知识库) │
│ global scope(共享知识) │
└─────────────────────────────────────────────────────┘
↓ autoRecall(搜索所有 scopes,自动去重)
推荐配置:
{
"plugins": {
"entries": {
"memory-lancedb-pro": {
"enabled": true,
"config": {
"autoCapture": true,
"autoRecall": true,
"scopes": {
"default": "agent:main", // ✅ 改为各代理私有
"definitions": {
"global": { "description": "所有代理共享" },
"agent:pm": { "description": "PM 机器人私有" },
"agent:front-dev": { "description": "前端开发私有" },
"agent:back-dev": { "description": "后端开发私有" },
"agent:qa-ops": { "description": "测试运维私有" },
"global:team": { "description": "团队共享知识" },
"global:project": { "description": "项目共享知识" },
"obsidian": { "description": "OB 知识库" }
}
}
}
}
}
}
}
⚠️ 重要:默认 scope 必须是 agent:xxx(各代理私有),不要用 global,否则会导致记忆污染!
禁止配置:
// ❌ 不要这样配!
"memorySearch": {
"extraPaths": ["/path/to/obsidian"]
}
四、记忆流转机制
用户:记住这个信息
↓
memory_store(text="项目 PRD", importance=0.8)
↓
同时写入:
├── 本地文件:memory/YYYY-MM-DD.md
└── 向量库:lancedb-pro(自动生成 embedding)
用户:继续开发项目
↓
memory_recall(query="项目 PRD")
↓
向量库搜索 → 返回匹配碎片 + 文件来源
↓
加载来源文件 → 获取完整上下文
↓
执行任务(AI 知道项目结构、技术栈、历史讨论)
3.5 OB 知识库自动同步
OB 知识库需要定时同步到向量库的 obsidian scope,才能被检索到。
脚本路径:
/home/user/.openclaw/workspace/skills/04-management/obsidian-sync/obsidian-sync-v2.py
工作流程:
Step 1: 扫描 OB 目录
→ 支持目录:30-Knowledge, 40-Meetings, 20-Projects, 00-Inbox
Step 2: 智能去重
→ 提取标题并归一化(去掉日期、版本号)
→ 同标题只保留最新版
Step 3: 生成同步数据
→ 读取文件内容,提取标签,生成摘要
Step 4: 写入向量库
→ scope="obsidian"
→ importance=0.7, category="fact"
手动执行:
cd /home/user/.openclaw/workspace
python3 skills/04-management/obsidian-sync/obsidian-sync-v2.py
效果:
| 指标 | 数值 |
|---|---|
| 扫描文件 | ~70 个 |
| 去重后 | ~63 个 |
| 同步用时 | ~3 秒 |
| 检索速度 | <100ms |
五、使用方法
5.1 本地文件 vs 向量库
| 特性 | 本地 Memory 文件 | 向量记忆(lancedb-pro) |
|---|---|---|
| 存储 | memory/YYYY-MM-DD.md | LanceDB 向量数据库 |
| 格式 | Markdown 纯文本 | 向量 Embedding |
| 搜索 | 关键词搜索 | 语义搜索(自然语言) |
| 返回 | 整文件 | 匹配碎片 + 来源引用 |
memory_store() 同时写入两个地方
5.2 手动模式
# 存储记忆(同时写入本地文件和向量库)
memory_store(
text="项目 PRD:第一天完成了用户模块...(详细描述)",
category="fact",
importance=0.8
)
# 检索时:向量库返回匹配结果 + 来源文件
results = memory_recall(query="项目进度")
# results[0].source 指向 memory/2026-04-02.md
5.3 每日日志
每天自动创建 memory/YYYY-MM-DD.md,记录当日重要事件。
六、常用命令
# 搜索(返回结果包含来源)
memory_recall(query="关键词", limit=5)
# 存储(同时写入文件和向量库)
memory_store(text="重要信息", scope="global", importance=0.8)
# 更新
memory_update(memoryId="xxx", text="新内容")
# 删除
memory_forget(query="过时信息")
七、最佳实践
| 建议 | 说明 |
|---|---|
| 详细记录 | memory_store 时写清楚上下文,方便向量检索 |
| 设置权重 | importance 0-1,重要的设高一点 |
| 定期整理 | 每周回顾,提炼重要记忆 |
| 文档分离 | OB 中存详细文档,memory 中做索引引用 |
八、总结
三层记忆系统,说白了就是让 AI 记住之前聊过什么:
- 工作记忆 → 当前会话,聊完就没
- 会话记忆 → memory 文件,下次还能找到
- 长期记忆 → 向量库,搜一句就能定位到具体文档
用了这段时间,最大的感受是:不用每次都跟 AI 说"上次那个项目",它自己能找到。省了不少重复解释的功夫。
相关资源:
- OpenClaw 文档:docs.openclaw.ai
标签:#OpenClaw #AI助手 #记忆系统 #生产力工具 #教程
码字不易,如果对你有帮助,欢迎点赞收藏~