首页 资讯 下载 教程 Skills 社群

OpenClaw 记忆系统深度解析

概述

OpenClaw 的记忆系统以纯 Markdown 文件作为数据源(source of truth),采用双层架构设计,让 AI 助手能够在多轮对话中保持上下文连贯性。本文将详细拆解这一系统的工作原理和配置方法。

双层记忆架构

OpenClaw 的记忆分为两层:日志记忆长期记忆

日志记忆(Daily Logs)

日志记忆按日期存储在 memory/YYYY-MM-DD.md 路径下,每天自动创建新文件:

~/.openclaw/memory/
├── 2026-01-28.md
├── 2026-01-29.md
├── 2026-01-30.md
└── ...

日志记忆适合记录日常交互中的临时笔记和常规操作记录。

长期记忆(MEMORY.md)

长期记忆存储在 MEMORY.md 文件中,用于保存跨会话的重要信息:

# MEMORY.md 示例结构

## 用户偏好
- 偏好使用中文交流
- 代码风格偏好:使用 2 空格缩进

## 决策记录
- 项目技术栈选定为 TypeScript + Lit
- 部署方案确认使用 Docker Compose

写入策略

记忆系统的写入遵循明确的分层原则:

内容类型 写入目标 示例
决策与偏好 长期记忆 MEMORY.md 用户偏好的编程语言、项目架构决策
日常笔记 日志记忆 YYYY-MM-DD.md 今天讨论的问题、临时备忘

自动记忆刷新机制

当对话上下文即将达到模型的 token 限制时,OpenClaw 会在上下文压缩之前自动触发记忆刷新(memory flushing),将当前会话中的重要信息持久化到对应的记忆文件中,避免关键信息因压缩而丢失。

混合检索:Vector + BM25

OpenClaw 采用向量检索(Vector Search)与关键词检索(BM25)相结合的混合搜索策略,在语义理解和精确匹配之间取得平衡。

记忆工具

系统提供两个核心工具供 AI 使用:

  • memory_search:基于语义和关键词的混合检索,适合模糊查询
  • memory_get:直接获取指定路径的记忆文件内容
// 记忆搜索配置示例
{
  "memory": {
    "search": {
      "hybridWeight": 0.7,  // 向量检索权重,0-1 之间
      "maxResults": 10
    }
  }
}

嵌入模型配置

记忆系统的向量检索依赖嵌入模型(Embedding Provider),OpenClaw 支持多种提供商:

// ~/.openclaw/openclaw.json
{
  "memory": {
    "embedding": {
      "provider": "openai",       // 可选:openai / gemini / local
      "model": "text-embedding-3-small"
    }
  }
}

本地嵌入模型

如果希望完全离线运行记忆系统,可以配置本地嵌入模型:

{
  "memory": {
    "embedding": {
      "provider": "local",
      "model": "all-MiniLM-L6-v2"
    }
  }
}

SQLite 加速

当记忆文件数量增多时,OpenClaw 使用 SQLite 作为索引加速层,显著提升检索性能:

{
  "memory": {
    "acceleration": {
      "engine": "sqlite",
      "dbPath": "~/.openclaw/memory/index.db"
    }
  }
}

SQLite 索引会在后台自动维护,无需手动干预。

嵌入缓存

为减少重复计算开销,记忆系统内置嵌入缓存机制。已经计算过的文本片段不会重复请求嵌入模型,有效降低 API 调用成本。

实验性功能:会话记忆

会话记忆(Session Memory)是当前处于实验阶段的功能,它允许在单次会话内维护一个更精细的短期记忆结构。启用方式:

{
  "memory": {
    "session": {
      "enabled": true  // 实验性,默认关闭
    }
  }
}

注意:会话记忆功能尚未稳定,生产环境建议谨慎使用。

故障排查

记忆检索结果不准确?

  • 检查嵌入模型是否正确配置并可用
  • 尝试调整 hybridWeight 参数平衡语义与关键词检索

记忆文件未自动创建?

  • 确认 ~/.openclaw/memory/ 目录存在且有写入权限
  • 使用 openclaw doctor --fix 检查配置完整性

SQLite 索引异常?

  • 删除 index.db 文件后重启,系统会自动重建索引