乐于分享
好东西不私藏

OpenClaw 记忆系统完全解析:从向量数据库到关联图谱,详解现代 AI Agent 的记忆架构设计

OpenClaw 记忆系统完全解析:从向量数据库到关联图谱,详解现代 AI Agent 的记忆架构设计

📌 写在前面

你是否想过,当你告诉 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 合规)

🎯 进阶一:记忆优先级机制

为什么需要优先级?

并不是所有记忆都同等重要。想象以下场景:

记忆类型
重要性
示例
关键信息
🔴 最高
手机号、邮箱、重大决策
偏好信息
🟠 高
「我喜欢简洁的回答」
一般事实
🔵 中
「项目用 TypeScript」
临时信息
⚪ 低
缓存数据、临时状态

优先级自动判定算法

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 的记忆系统从最初的简单文件存储,发展到向量检索,再到未来的关联图谱,正在逐步构建一个多层次、可扩展、智能化的记忆体系

核心设计理念:

  1. 分层存储
    :文件层 + 向量层 + 图谱层,各司其职
  2. 智能优先级
    :不是所有记忆都同等重要
  3. 关系先行
    :从孤立的记忆点,到互联的记忆网络
  4. 自动生命周期
    :自动捕获、自动召回、自动过期

这样的设计,让 AI Agent 不仅能「记住」,更能「记住重要的」「记住关联的」。