📌 写在前面
你是否想过,当你告诉 AI 助手「我更喜欢简洁的回答」或「我的邮箱是 xxx」时,这些信息它是如何记住的?
作为 OpenClaw 的核心能力之一,记忆系统让 AI 不仅能理解当前对话,还能记住历史交互中的关键信息。今天,我们就来深入解析这套系统的工作原理和架构设计。
🔍 现状:OpenClaw 已有的记忆能力
在深入设计之前,先看看目前 OpenClaw 已经具备了哪些记忆功能:
1. 文件记忆层
基于 Markdown 文件的简单存储方式:
- 每日笔记
( memory/YYYY-MM-DD.md):记录每天的对话要点 - 长期记忆
( MEMORY.md):跨会话的重要信息沉淀
这种方式的优点是简单可靠,缺点是难以进行语义检索。
2. 向量记忆层 (LanceDB)
这是目前的核心能力,基于向量相似度的语义搜索:
用户消息 → 向量化 → LanceDB 存储 ↓Agent 推理 ← 语义匹配 ← 向量相似度计算已实现的功能:
✅ 语义搜索 ( memory_search)✅ 语义读取 ( memory_get)✅ 自动捕获重要信息 (auto-capture) ✅ 自动召回相关记忆 (auto-recall) ✅ 5种记忆分类:偏好 / 事实 / 决策 / 实体 / 其他 ✅ 记忆遗忘 (GDPR 合规)
🎯 进阶一:记忆优先级机制
为什么需要优先级?
并不是所有记忆都同等重要。想象以下场景:
优先级自动判定算法
function autoDetectPriority(text: string, category: MemoryCategory): MemoryPriority { const lower = text.toLowerCase(); // 关键记忆:联系方式、姓名等 if (/手机|电话|邮箱|email|名字|地址/i.test(lower)) { return MemoryPriority.CRITICAL; } // 高优先级:偏好和决策 if (category === 'preference' || category === 'decision') { return MemoryPriority.HIGH; } // 中优先级:一般事实 if (category === 'fact') { return MemoryPriority.MEDIUM; } return MemoryPriority.LOW;}过期机制设计
不同优先级的记忆应该有不同的生命周期:
const EXPIRATION_POLICY = { [MemoryPriority.CRITICAL]: null, // 永不过期 [MemoryPriority.HIGH]: 365 * 24, // 1年 [MemoryPriority.MEDIUM]: 90 * 24, // 90天 [MemoryPriority.LOW]: 30 * 24, // 30天};关键记忆(如联系方式)永不过期,低优先级记忆(如临时缓存)会自动清理。
🕸️ 进阶二:记忆关联图谱
从"记忆点"到"记忆网"
传统的记忆系统把每条记忆当作孤立的信息点。但现实中,记忆是相互关联的:
用户「我叫张三」+ 「我在上海工作」+ 「我喜欢喝咖啡」→ 形成了「张三 —[认识]→ 上海」「张三 —[喜欢]→ 咖啡」的关系
图谱数据模型
// 实体节点interface MemoryNode { id: string; type: 'person' | 'place' | 'object' | 'concept'; name: string; memoryIds: string[]; // 关联的记忆}// 关系边interface MemoryEdge { sourceId: string; targetId: string; relation: 'knows' | 'likes' | 'works_at' | 'lives_in'; strength: number; // 关系强度 0-1}实体识别与关系抽取
使用 LLM 从记忆文本中自动提取实体和关系:
原始记忆:「用户张三在上海的科技公司工作,喜欢在周末去陆家嘴喝咖啡」提取结果:- 实体:张三(人)、上海(地点)、科技公司(组织)、陆家嘴(地点)、咖啡(物品)- 关系:张三 —[工作于]→ 科技公司、张三 —[居住]→ 上海、张三 —[喜欢]→ 咖啡
🏗️ 完整系统架构
经过上述设计,完善后的记忆系统架构如下:
┌─────────────────────────────────────────────────┐│ 输入层 (Input) ││ 用户消息 / 工具调用 / 外部事件 │└─────────────────────┬───────────────────────────┘ ↓┌─────────────────────────────────────────────────┐│ 处理层 (Processing) ││ 意图识别 │ 实体抽取 │ 优先级判定 │└─────────────────────┬───────────────────────────┘ ↓┌─────────────────────────────────────────────────┐│ 存储层 (Storage) ││ 文件存储 │ 向量存储 │ 图谱存储 ││ (Markdown) │ (LanceDB) │ (Graph) │└─────────────────────┬───────────────────────────┘ ↓┌─────────────────────────────────────────────────┐│ 查询层 (Query) ││ 语义搜索 │ 图谱推理 │ 上下文组装 │└─────────────────────┬────────────────────── ────┘ ↓┌─────────────────────────────────────────────────┐│ 输出层 (Output) ││ Agent Context / Web Dashboard / API │└─────────────────────────────────────────────────┘📊 功能特性一览
🚀 实施计划
Phase 1:优先级机制
⬜ 扩展 LanceDB schema 添加 priority, tags, expiresAt 字段 ⬜ 实现优先级自动判定算法 ⬜ 实现过期记忆清理定时任务 ⬜ 修改召回算法,优先返回高优先级记忆
Phase 2:图谱存储(
⬜ 设计图谱数据库 ⬜ 实现实体识别 LLM prompt ⬜ 实现关系抽取逻辑 ⬜ 提供图谱查询 API
Phase 3:可视化与优化
⬜ 开发记忆 Dashboard ⬜ 图谱可视化 ⬜ 性能优化与测试
📝 总结
OpenClaw 的记忆系统从最初的简单文件存储,发展到向量检索,再到未来的关联图谱,正在逐步构建一个多层次、可扩展、智能化的记忆体系。
核心设计理念:
- 分层存储
:文件层 + 向量层 + 图谱层,各司其职 - 智能优先级
:不是所有记忆都同等重要 - 关系先行
:从孤立的记忆点,到互联的记忆网络 - 自动生命周期
:自动捕获、自动召回、自动过期
这样的设计,让 AI Agent 不仅能「记住」,更能「记住重要的」「记住关联的」。
夜雨聆风