跳到主要内容

Memory 记忆系统

Memory 是 OpenClaw 的持久化记忆系统。OpenClaw 通过写入本地 Markdown 文件来"记住"信息——模型只记住被保存到磁盘的内容,没有隐藏状态。这些记忆文件存储在 Agent 的工作空间中,可以跨会话保持,重启 Gateway 后依然存在。

为什么需要 Memory?

没有 Memory 的 AI 每次都像第一次认识你:

  • 需要反复解释需求和偏好
  • 上下文容易丢失
  • 无法形成长期协作关系

有了 Memory 后:

  • 一次配置,长期有效:重要信息只需告诉 Agent 一次
  • 越用越懂你:Agent 会记住你的风格和习惯
  • 跨会话保持:重启 Gateway 后记忆依然存在
  • 语义搜索:配置嵌入向量后,支持智能检索相关记忆

工作空间文件结构

Agent 的工作空间(默认 ~/.openclaw/workspace)包含多个重要文件,共同构成完整的记忆和配置体系:

核心文件概览

文件用途自动创建
AGENTS.md操作指令 + 记忆(核心配置)
SOUL.md人格定义、边界、语气
MEMORY.md向量搜索记忆库
TOOLS.md工具使用约定和偏好
USER.md用户档案和称呼偏好
IDENTITY.mdAgent 名称和形象
HEARTBEAT.md心跳任务专用上下文
BOOTSTRAP.md首次运行引导(完成后删除)首次创建

运行 openclaw setup 会自动创建这些文件的默认模板。

AGENTS.md(操作指令与记忆)

AGENTS.md 是最重要的配置文件,包含 Agent 的操作指令和记忆内容。它会被自动注入到系统提示词中,告诉 Agent 如何工作以及记住重要信息。

# 操作指令

## 核心职责

- 帮助用户完成代码编写、调试和重构
- 执行文件操作和 Shell 命令
- 浏览网页获取信息

## 工作习惯记忆

- 用户偏好使用 TypeScript
- 代码风格遵循 Prettier 配置
- 提交信息使用 Conventional Commits 格式

## 项目相关记忆

- 项目路径:~/projects/main-app
- 技术栈:React + Node.js + PostgreSQL
- 部署方式:Docker Compose

## 重要规则

- 修改代码前先备份
- 发送邮件前需要用户确认
- 重要操作记录到日志文件

AGENTS.md 的特点:

  • 操作指令 + 记忆合一:既能指导 Agent 行为,也能存储重要事实
  • 每次会话加载:内容会自动注入到系统提示词
  • 用户可编辑:随时修改,立即生效

引导文件大小限制

当工作空间引导文件内容过长时,OpenClaw 会自动截断:

  • 单文件最大字符数:agents.defaults.bootstrapMaxChars(默认 20000)
  • 所有文件总字符数:agents.defaults.bootstrapTotalMaxChars(默认 150000)

SOUL.md(人格定义)

SOUL.md 定义 Agent 的性格、边界和交流风格,塑造 Agent "是谁"。

# 你是谁

你是一位严谨但友好的技术助手,专注于帮助用户提高工作效率。

## 性格特点

- 专业但不刻板
- 解释清晰,避免过度简化
- 主动提供上下文和相关建议

## 语言风格

- 中文为主,技术术语保留英文
- 使用代码块展示示例
- 复杂概念分步骤解释

## 行为边界

- 不主动执行危险操作(如删除文件)
- 敏感操作需要用户确认
- 不泄露 API Key 等敏感信息

## 自我认知

- 我是用户的技术助手
- 我帮助用户解决问题
- 我尊重用户的工作习惯

SOUL.md vs AGENTS.md

文件作用内容类型
SOUL.md定义 Agent 人格性格、语气、边界
AGENTS.md操作指令 + 记忆工作规则、事实信息

简单理解:SOUL.md 定义"Agent 是什么样的人",AGENTS.md 存储"Agent 如何工作以及记住什么"。

MEMORY.md(向量搜索记忆)

MEMORY.mdmemory/ 目录下的文件支持语义搜索,适合存储大量需要检索的信息。

# 项目文档摘要

## API 设计

用户服务提供以下端点:
- POST /api/users - 创建用户
- GET /api/users/:id - 获取用户信息
- PUT /api/users/:id - 更新用户

数据库连接字符串格式:
`postgresql://user:pass@host:5432/dbname`

## 会议记录摘要

2026-04-01 产品评审会议:
- 决定优先开发移动端
- API v2 需要向后兼容
- 下次评审时间:2026-04-15

按日期记忆

memory/ 目录支持按日期组织记忆:

workspace/
├── MEMORY.md
└── memory/
├── 2026-04-01.md
├── 2026-04-02.md
└── 2026-04-03.md

这种方式适合存储临时性、按时间组织的信息,如每日任务、会议记录等。

记忆后端(Memory Backends)

OpenClaw 支持多种记忆后端,从简单的内置引擎到高级的本地搜索和云端记忆。

内置引擎(默认)

基于 SQLite 的默认后端,开箱即用,无需额外依赖。

核心特性

特性说明
关键词搜索通过 FTS5 全文索引,使用 BM25 评分
向量搜索通过嵌入向量支持语义搜索
混合搜索结合关键词和向量,提供最佳结果
CJK 支持通过 trigram 分词支持中日韩文字

支持的嵌入向量提供商

提供商ID自动检测说明
OpenAIopenai默认使用 text-embedding-3-small
Geminigemini支持多模态(图片 + 音频)
Voyagevoyage
Mistralmistral
Ollamaollama本地部署,需显式配置
Locallocal是(优先)GGUF 模型,约 0.6 GB 下载

索引工作机制

OpenClaw 将 MEMORY.mdmemory/*.md 文件索引为约 400 token 的块,并存储到每个 Agent 独立的 SQLite 数据库中。

  • 索引位置~/.openclaw/memory/<agentId>.sqlite
  • 文件监控:记忆文件变更触发 1.5 秒防抖重新索引
  • 自动重建:当嵌入向量提供商、模型或分块配置变更时,自动重建索引
  • 手动重建openclaw memory index --force

配置示例

{
"agents": {
"defaults": {
"memorySearch": {
"provider": "openai",
"model": "text-embedding-3-small"
}
}
}
}

何时使用内置引擎

内置引擎适合大多数用户:

  • 开箱即用,无需额外依赖
  • 关键词和向量搜索都能很好处理
  • 支持所有嵌入向量提供商
  • 混合搜索结合两种检索方式的优势

QMD Memory Engine

QMD 是一个本地优先的搜索辅助程序,结合了 BM25、向量搜索和重排序功能。它作为独立进程与 OpenClaw 并行运行。

相比内置引擎的优势

功能说明
重排序和查询扩展提供更高质量的搜索结果
索引额外目录可以索引项目文档、团队笔记等任意磁盘内容
索引会话记录可以检索历史对话内容
完全本地通过 Bun + node-llama-cpp 运行,自动下载 GGUF 模型
自动回退如果 QMD 不可用,自动回退到内置引擎

先决条件

  1. 安装 QMD:bun install -g @tobilu/qmd
  2. SQLite 需要支持扩展(macOS:brew install sqlite
  3. QMD 必须在 Gateway 的 PATH 中
  4. macOS 和 Linux 开箱即用,Windows 推荐使用 WSL2

启用 QMD

{
"memory": {
"backend": "qmd"
}
}

启用后,OpenClaw 会在 ~/.openclaw/agents/<agentId>/qmd/ 创建集合,自动管理 sidecar 生命周期。

首次使用注意事项

首次搜索可能较慢,因为 QMD 会自动下载 GGUF 模型(约 2 GB)用于重排序和查询扩展。可以提前预热:

qmd query "test"

搜索范围

默认情况下,QMD 搜索结果只在 DM 会话中返回(不包括群组或频道)。可以通过配置修改:

{
"memory": {
"qmd": {
"scope": "all"
}
}
}

引用来源

memory.citationsautoon 时,搜索片段会包含 Source: <path#line> 页脚。设置为 off 可省略页脚。

何时使用 QMD

选择 QMD 的场景:

  • 需要重排序获得更高质量的搜索结果
  • 需要搜索项目文档或工作空间外的笔记
  • 需要检索历史会话内容
  • 需要完全本地的搜索,不依赖 API

索引额外路径

让 QMD 搜索工作空间之外的目录:

{
"memory": {
"backend": "qmd",
"qmd": {
"paths": [
{ "name": "docs", "path": "~/notes", "pattern": "**/*.md" },
{ "name": "project", "path": "~/projects/main-app/docs" }
]
}
}
}

索引会话记录

启用会话索引来检索历史对话:

{
"memory": {
"backend": "qmd",
"qmd": {
"sessions": {
"enabled": true,
"retentionDays": 30
}
}
}
}

何时使用 QMD

  • 需要重排序获得更高质量的搜索结果
  • 需要搜索项目文档或工作空间外的笔记
  • 需要检索历史会话内容
  • 需要完全本地的搜索,不依赖 API

Honcho Memory

Honcho 是 AI 原生的跨会话记忆系统,支持用户建模、语义搜索和多 Agent 感知。

特点

  • 跨会话记忆持久化
  • 用户建模和个性化
  • 多 Agent 感知
  • 语义搜索

通过插件安装:

openclaw plugins install @openclaw/honcho

记忆搜索配置

嵌入向量提供商

记忆搜索需要嵌入向量提供商来支持语义搜索。OpenClaw 会自动检测可用的提供商:

自动检测顺序

  1. local - 如果配置了本地模型路径
  2. openai - 如果有 OpenAI API Key
  3. gemini - 如果有 Gemini API Key
  4. voyage - 如果有 Voyage API Key
  5. mistral - 如果有 Mistral API Key

手动配置提供商

{
"agents": {
"defaults": {
"memorySearch": {
"provider": "openai",
"model": "text-embedding-3-small"
}
}
}
}

API Key 环境变量

提供商环境变量
OpenAIOPENAI_API_KEY
GeminiGEMINI_API_KEY
VoyageVOYAGE_API_KEY
MistralMISTRAL_API_KEY

混合搜索配置

混合搜索结合了向量相似度(语义含义)和 BM25(关键词匹配),提供更准确的搜索结果。

{
"agents": {
"defaults": {
"memorySearch": {
"query": {
"hybrid": {
"enabled": true,
"vectorWeight": 0.7,
"textWeight": 0.3,
"mmr": {
"enabled": true,
"lambda": 0.7
},
"temporalDecay": {
"enabled": true,
"halfLifeDays": 30
}
}
}
}
}
}
}

参数说明

  • vectorWeight:向量搜索权重(0-1)
  • textWeight:BM25 权重(0-1)
  • mmr:最大边际相关性,增加结果多样性
  • temporalDecay:时间衰减,较新的内容权重更高

多模态记忆(Gemini)

使用 Gemini Embedding 2 可以索引图片和音频:

{
"agents": {
"defaults": {
"memorySearch": {
"provider": "gemini",
"model": "gemini-embedding-2-preview",
"multimodal": {
"enabled": true,
"modalities": ["all"],
"maxFileBytes": 10000000
}
}
}
}
}

支持的格式

  • 图片:.jpg, .jpeg, .png, .webp, .gif, .heic, .heif
  • 音频:.mp3, .wav, .ogg, .opus, .m4a, .aac, .flac

索引额外路径

让记忆搜索索引工作空间之外的文件:

{
"agents": {
"defaults": {
"memorySearch": {
"extraPaths": [
"../team-docs",
"/srv/shared-notes"
]
}
}
}
}

自动记忆刷新

在压缩对话之前,OpenClaw 会运行一个静默回合,提醒 Agent 将重要上下文保存到记忆文件。这是默认启用,无需配置。

可以通过配置调整行为:

{
"agents": {
"defaults": {
"compaction": {
"memoryFlush": true
}
}
}
}

CLI 记忆命令

OpenClaw 提供专门的记忆管理命令:

# 查看记忆索引状态
openclaw memory status

# 重新索引记忆文件
openclaw memory index

# 语义搜索记忆
openclaw memory search "API 设计规范"
openclaw memory search --query "数据库连接配置"

其他配置文件

TOOLS.md(工具使用约定)

记录工具使用的偏好和约定:

# 工具使用约定

## 代码编辑

- 使用 4 空格缩进
- 字符串优先使用单引号
- 组件使用函数式写法

## Shell 命令

- 优先使用 npm 而非 yarn
- Git 提交前运行 lint
- 禁止使用 rm -rf 无确认

## 浏览器操作

- 截图保存到 ~/screenshots/
- 超时时间默认 30 秒

USER.md(用户档案)

记录用户个人信息:

# 用户档案

## 基本信息

- 称呼:张工
- 角色:全栈开发工程师
- 团队:产品研发部

## 偏好称呼

- 工作场景:张工
- 非正式场合:老张

## 时区

- Asia/Shanghai (UTC+8)

IDENTITY.md(Agent 身份)

定义 Agent 的名称和形象:

# Agent 身份

## 名称

Claw Assistant

## 形象

一只红色的龙虾,专业但亲切

## 表情符号

🦞

HEARTBEAT.md(心跳上下文)

心跳任务专用的轻量级上下文文件,仅在心跳运行时加载:

# 心跳检查

每次心跳时执行以下检查:

1. 检查系统资源使用情况
2. 查看是否有重要通知
3. 确认服务正常运行

记忆管理最佳实践

结构化组织

使用清晰的标题和层级组织记忆:

# 推荐的组织方式

## 项目配置

| 项目 | 路径 | 技术栈 |
|------|------|--------|
| alpha | ~/projects/alpha | React, Node.js |
| beta | ~/projects/beta | Vue, Python |

## 开发规范

- 代码风格:Prettier
- 提交格式:Conventional Commits
- 分支策略:GitFlow

## 重要 API Key 存放位置

- 使用 SecretRef 管理,不要写入文件

保持精简

记忆文件不是日记,只记录:

  • 反复使用的信息
  • 重要决策和约定
  • 难以重新获取的知识

定期维护

# 检查工作空间状态
openclaw status

# 查看配置文件
cd ~/.openclaw/workspace
ls -la

定期清理:

  • 删除过时信息
  • 合并重复内容
  • 归档历史记录到 memory/ 目录

敏感信息处理

不要在记忆文件中存储敏感信息

# 错误示例 ❌

API Key: sk-xxxxx
密码: mypassword123

# 正确示例 ✓

API Key: 使用环境变量 ANTHROPIC_API_KEY
数据库密码: 使用 SecretRef 管理

使用 SecretRef 管理敏感信息:

{
"secrets": {
"providers": {
"env": {
"source": "env"
}
}
},
"agent": {
"model": {
"apiKey": {
"ref": {
"provider": "env",
"id": "ANTHROPIC_API_KEY"
}
}
}
}
}

文件位置汇总

文件位置说明
AGENTS.md~/.openclaw/workspace/AGENTS.md操作指令 + 记忆
SOUL.md~/.openclaw/workspace/SOUL.md人格定义
MEMORY.md~/.openclaw/workspace/MEMORY.md向量搜索记忆
TOOLS.md~/.openclaw/workspace/TOOLS.md工具使用约定
USER.md~/.openclaw/workspace/USER.md用户档案
IDENTITY.md~/.openclaw/workspace/IDENTITY.mdAgent 身份
HEARTBEAT.md~/.openclaw/workspace/HEARTBEAT.md心跳上下文
日期记忆~/.openclaw/workspace/memory/YYYY-MM-DD.md日记式记忆
索引存储~/.openclaw/memory/{agentId}.sqlite搜索索引

多 Agent 记忆隔离

每个 Agent 有独立的工作空间,记忆完全隔离:

~/.openclaw/
├── workspace/ # main Agent 工作空间
│ ├── AGENTS.md
│ ├── SOUL.md
│ └── MEMORY.md
└── agents/
├── writer/ # writer Agent 工作空间
│ └── workspace/
│ ├── AGENTS.md
│ └── SOUL.md
└── developer/ # developer Agent 工作空间
└── workspace/
├── AGENTS.md
└── SOUL.md

每个 Agent 的记忆索引也相互独立,存储在各自的 SQLite 数据库中。

常见问题

记忆不生效

原因:文件路径错误或格式问题。

解决

# 检查工作空间配置
openclaw config get agents.defaults.workspace

# 验证配置
openclaw doctor

# 检查记忆文件是否存在
ls ~/.openclaw/workspace/MEMORY.md

记忆搜索无结果

原因:未配置嵌入向量提供商或未建立索引。

解决

# 检查记忆搜索状态
openclaw memory status

# 配置嵌入向量提供商
export OPENAI_API_KEY="sk-xxx"

# 重新索引
openclaw memory index --force

QMD 首次搜索很慢

原因:QMD 首次使用时会下载 GGUF 模型(约 2GB)。

解决:提前预热:

qmd query "test"

QMD 未找到

原因:QMD 不在 Gateway 的 PATH 中。

解决:创建符号链接:

# 如果 OpenClaw 作为服务运行
sudo ln -s ~/.bun/bin/qmd /usr/local/bin/qmd

群聊中 QMD 结果为空

原因:默认搜索范围只允许 DM 会话。

解决

{
"memory": {
"qmd": {
"scope": "all"
}
}
}

AGENTS.md 过大

原因:长期使用积累了大量信息。

解决

  • 将历史信息移到 memory/ 目录
  • 使用 QMD 后端进行语义搜索,减少 AGENTS.md 内容
  • 定期归档过时信息
  • 调整 bootstrapMaxChars 增加限制

搜索超时

原因:QMD 搜索超时(默认 4 秒)。

解决

{
"memory": {
"qmd": {
"limits": {
"timeoutMs": 120000
}
}
}
}

记忆搜索被禁用

原因:未检测到嵌入向量提供商。

解决

# 检查状态
openclaw memory status

# 设置提供商
export OPENAI_API_KEY="sk-xxx"
# 或在配置中显式设置

索引结果过时

原因:文件监控可能在罕见情况下遗漏变更。

解决

openclaw memory index --force

sqlite-vec 未加载

原因:扩展加载失败。

解决:OpenClaw 会自动回退到进程内余弦相似度计算。检查日志了解具体加载错误。

下一步