Memory 记忆系统教程

intermediate
## 记忆系统概述 OpenClaw 的记忆系统有一个核心设计理念:**模型只记住保存到磁盘的内容**。 这意味着智能体的"记忆"不是什么神秘的向量数据库或复杂的知识图谱——它就是纯 Markdown 文件。智能体通过读写这些文件来"记住"和"回忆"信息。 为什么这样设计? - **透明可控**:你可以直接打开文件查看智能体记住了什么 - **可编辑**:你可以手动修改记忆内容,纠正错误或补充信息 - **可迁移**:记忆文件就是普通文本,可以备份、同步、版本控制 - **不依赖外部服务**:不需要向量数据库,不需要云服务 ## 三个核心文件 OpenClaw 的记忆系统由三个核心文件组成,各有不同的用途。 ### MEMORY.md — 长期记忆 `MEMORY.md` 是智能体的"长期记忆本",存储需要跨会话保留的重要信息。 位置:`~/.openclaw/workspace/MEMORY.md` 典型内容: ```markdown # 长期记忆 ## 用户偏好 - 喜欢使用 TypeScript,不喜欢 JavaScript - 代码风格偏好:函数式编程 - 常用编辑器:VS Code ## 项目信息 - 当前项目:龙虾技能库 - 技术栈:Node.js + Express + MySQL - 部署方式:PM2 + Nginx ## 重要约定 - 数据库密码不要写在代码里 - 部署前必须跑测试 - Git 提交信息用中文 ``` MEMORY.md 在每个会话开始时会被加载到智能体的上下文中,所以智能体在新会话中也能"记住"之前的信息。 ### memory/YYYY-MM-DD.md — 每日笔记 每日笔记是智能体的"日记本",按日期自动创建,记录当天的重要事件和发现。 位置:`~/.openclaw/workspace/memory/2025-01-15.md` 典型内容: ```markdown # 2025-01-15 ## 完成的任务 - 修复了教程列表页的搜索功能 - 添加了标签筛选功能 ## 发现的问题 - ssr.ts 文件超过 3000 行,需要考虑拆分 - Redis 缓存偶尔失效,需要排查 ## 用户提到的 - 下周要上线新的排行榜功能 - 需要支持深色模式 ``` 每日笔记的特点: - 自动按日期创建新文件 - 不会加载到每个会话的上下文中(太多了会占用 Token) - 通过 `memory_search` 工具按需搜索 - 适合记录细节信息和临时笔记 ### DREAMS.md — 实验性记忆 `DREAMS.md` 是 OpenClaw 的实验性功能(Dreaming),用于存储经过"梦境处理"的记忆。 位置:`~/.openclaw/workspace/DREAMS.md` > **注意**:Dreaming 是实验性功能,默认未启用。它的工作方式可能在未来版本中变化。 ## 记忆工具 OpenClaw 提供了两个内置工具来操作记忆。 ### memory_search — 语义搜索 `memory_search` 工具可以在所有记忆文件中进行语义搜索,找到与查询最相关的内容。 工作方式: 1. 智能体收到一个需要回忆的问题 2. 调用 `memory_search` 搜索相关记忆 3. 返回匹配的记忆片段 4. 智能体基于记忆片段回答问题 示例对话: ``` 用户:上次我们讨论的数据库优化方案是什么? 智能体:(调用 memory_search 搜索"数据库优化") 找到相关记忆: - 2025-01-10.md: 讨论了索引优化,决定为 skills 表的 slug 字段添加唯一索引 - MEMORY.md: 数据库使用 MySQL,服务器 IP 10.0.8.10 根据记忆,上次我们讨论了为 skills 表的 slug 字段添加唯一索引来优化查询性能... ``` 语义搜索的优势在于它不是简单的关键词匹配——即使你用不同的措辞描述同一件事,它也能找到相关内容。 ### memory_get — 读取记忆 `memory_get` 工具直接读取指定的记忆文件内容。 ``` 用户:看看我的长期记忆里有什么 智能体:(调用 memory_get 读取 MEMORY.md) ``` 与 `memory_search` 的区别: | 工具 | 用途 | 方式 | |------|------|------| | `memory_search` | 搜索相关记忆 | 语义匹配,返回最相关的片段 | | `memory_get` | 读取完整文件 | 直接读取指定文件的全部内容 | ## 自动记忆刷新 OpenClaw 有一个智能的自动记忆刷新机制,确保重要信息不会在对话压缩(compaction)时丢失。 ### 什么是对话压缩 当对话变得很长时,OpenClaw 会触发"压缩"——将之前的对话总结为一段摘要,释放上下文空间。但压缩可能会丢失一些细节信息。 ### 自动保存机制 在压缩发生之前,OpenClaw 会自动执行以下操作: 1. **扫描即将被压缩的对话内容** 2. **识别重要信息**(用户偏好、项目决策、关键发现等) 3. **将重要信息保存到记忆文件**(MEMORY.md 或当天的每日笔记) 4. **然后再执行压缩** 这样即使对话被压缩了,重要信息已经安全地保存在记忆文件中,后续可以通过 `memory_search` 找回。 ### 手动保存记忆 你也可以主动要求智能体记住某些信息: ``` 用户:记住,我们的项目部署到 106.52.9.75 这台服务器 智能体:好的,我已经将这个信息保存到长期记忆中。 (将信息写入 MEMORY.md) ``` 或者更具体地: ``` 用户:把今天讨论的数据库优化方案记到笔记里 智能体:已记录到今天的笔记中。 (将信息写入 memory/2025-01-15.md) ``` ## Dreaming 实验性功能 Dreaming 是 OpenClaw 的一个实验性功能,灵感来自人类睡眠时大脑整理记忆的过程。 ### 工作原理 1. **短期信号收集**:在日常对话中,系统会标记"有趣"的信号(用户反复提到的话题、重要的决策、情绪变化等) 2. **信号评分**:每个信号会被评估重要性分数 3. **梦境处理**:在空闲时(类似"睡眠"),系统会处理这些信号: - 高分信号提升为长期记忆(写入 MEMORY.md) - 低分信号逐渐衰减 - 相关信号被关联和整合 4. **记忆提升**:经过梦境处理的记忆会更加结构化和精炼 ### 启用 Dreaming Dreaming 默认未启用,因为它还在实验阶段。如果你想尝试: ```json5 { "memory": { "dreaming": { "enabled": true } } } ``` > **提醒**:Dreaming 功能会消耗额外的 API Token(因为需要调用模型来处理信号),且行为可能在未来版本中变化。建议在非生产环境中尝试。 ## CLI 记忆管理命令 OpenClaw 提供了一组 CLI 命令来管理记忆系统。 ### 查看记忆状态 ```bash openclaw memory status ``` 输出示例: ``` 记忆状态: MEMORY.md: 2.3 KB (上次更新: 2025-01-15) 每日笔记: 12 个文件 DREAMS.md: 0.8 KB 索引状态: 已建立 (14 个文档) ``` ### 搜索记忆 在命令行中搜索记忆内容: ```bash openclaw memory search "数据库优化" ``` 输出示例: ``` 找到 3 条相关记忆: [1] memory/2025-01-10.md (相关度: 0.92) 讨论了为 skills 表添加索引优化查询性能... [2] MEMORY.md (相关度: 0.78) 数据库服务器 IP: 10.0.8.10,使用 MySQL... [3] memory/2025-01-08.md (相关度: 0.65) 发现慢查询问题,排行榜接口响应超过 2 秒... ``` ### 重建索引 如果你手动编辑了记忆文件,需要重建搜索索引: ```bash openclaw memory index ``` 这会重新扫描所有记忆文件,更新语义搜索索引。通常在以下情况需要执行: - 手动编辑了 MEMORY.md 或每日笔记 - 从备份恢复了记忆文件 - 搜索结果不准确时 ## 记忆管理最佳实践 ### 1. 定期整理 MEMORY.md MEMORY.md 会随着使用不断增长。建议定期检查和整理: - 删除过时的信息 - 合并重复的条目 - 按主题分类组织 ```bash # 直接编辑 nano ~/.openclaw/workspace/MEMORY.md # 或者让智能体帮你整理 openclaw agent --message "帮我整理一下长期记忆,删除过时的信息" ``` ### 2. 善用每日笔记 每日笔记适合记录: - 当天完成的任务 - 遇到的问题和解决方案 - 临时的想法和计划 - 需要后续跟进的事项 ### 3. 主动告诉智能体该记什么 智能体不会自动记住所有对话内容。如果有重要信息,明确告诉它: ``` 用户:记住这个——以后所有 API 接口都要加上速率限制 ``` ### 4. 备份记忆文件 记忆文件就是普通的 Markdown 文件,可以用 Git 管理: ```bash cd ~/.openclaw/workspace git init git add MEMORY.md memory/ git commit -m "备份记忆文件" ``` 这样你就有了记忆的版本历史,可以随时回溯。 ## 记忆系统的局限性 了解记忆系统的局限有助于更好地使用它: - **MEMORY.md 占用上下文**:MEMORY.md 在每个会话开始时加载,内容太多会占用宝贵的上下文窗口空间 - **每日笔记不自动加载**:每日笔记需要通过 `memory_search` 主动搜索,智能体不会自动"想起" - **语义搜索有精度限制**:搜索结果可能不完全准确,特别是对于非常具体的技术细节 - **压缩可能丢失细节**:虽然有自动保存机制,但对话压缩时仍可能丢失一些不被认为"重要"的细节 ## 小结 OpenClaw 的记忆系统简单而实用: - 记忆就是 Markdown 文件,透明可控 - MEMORY.md 存长期记忆,每日笔记存日常细节 - `memory_search` 语义搜索,`memory_get` 直接读取 - 对话压缩前自动保存重要信息 - CLI 命令管理记忆状态和索引 记忆系统让智能体从"金鱼记忆"变成了真正能积累经验的助手。善用它,你的智能体会越用越懂你。 #OpenClaw记忆 #Memory系统 #长期记忆 #语义搜索 #龙虾技能库