Skip to content

OpenClaw 的记忆机制基于工作区内的 Markdown 文件:MEMORY.md 存储持久化事实,每日笔记(memory/YYYY-MM-DD.md)存放短期上下文,可选 DREAMS.md 记录梦境摘要。默认 SQLite 后端支持混合搜索(语义+关键词),配置 embedding provider 后自动生效。记忆 flush 在压缩前自动保存未落盘的内容,无需手动干预。如果需要跨会话用户建模,可选 Honcho 插件。

OpenClaw Memory 记忆系统:MEMORY.md 和每日笔记配置与排查

OpenClaw 通过在工作区内写入 纯 Markdown 文件 来实现跨会话记忆。模型只“记得”被保存到磁盘的内容——没有隐藏状态。这意味着所有记忆都可通过文件系统直接查看和编辑。

工作原理

智能体工作区(默认 ~/.openclaw/workspace)中有三类记忆文件:

  • MEMORY.md — 长期记忆。存放持久化的事实、偏好和决策。每次私信(DM)会话开始时加载。
  • memory/YYYY-MM-DD.md(或 memory/YYYY-MM-DD-<slug>.md)— 每日笔记。存放运行中的上下文和观察。当天和昨天的笔记自动加载;会话记忆钩子(/new/reset)写入的带 slug 变体也会一并加载。
  • DREAMS.md(可选)— 梦境日记和梦境摘要,供人类审阅,包含基于历史回填的条目。

文件分工

  • MEMORY.md:精炼层。存放持久事实、偏好、常驻决策及简短摘要,在主私信会话开始时可用。不是原始转录本或每日日志。
  • memory/YYYY-MM-DD.md:工作层。存放详细每日笔记、观察、会话摘要及日后可能仍有用的原始上下文。这些文件会被 memory_searchmemory_get 索引,但不会在每个回合都注入引导提示。

随着时间的推移,智能体会自动从每日笔记中提炼有用内容到 MEMORY.md,并清理过时的长期条目。生成的工作区指令和心跳流可以定期执行此操作,无需手动编辑每个细节。

提示:如果 MEMORY.md 增长超过引导文件预算,OpenClaw 会保持磁盘文件完整,但截断注入模型上下文的副本。此时应把详细材料移回 memory/*.md,只在 MEMORY.md 保留持久摘要,或明确提高引导限制。可通过 /context list/context detailopenclaw doctor 查看原始大小、注入大小及截断状态。

提示:想让智能体记住某件事,直接告诉它:“记住我偏好 TypeScript。”它会自动写入相应文件。

推断承诺(Commitments)

某些未来跟进不是持久事实。例如提到明天的面试,有用的记忆可能是“面试后跟进”,而不是“永久存入 MEMORY.md”。

承诺(Commitments) 是专门为此设计的可选短期跟进记忆。OpenClaw 在后台静默推理,限定于同一智能体和渠道,并通过心跳交付到期检查。显式提醒仍通过定时任务实现。

记忆工具

智能体有两个专门操作记忆的工具:

  • memory_search — 使用语义搜索找到相关笔记,即使措辞与原文件不同。
  • memory_get — 读取特定记忆文件或行范围。

这两个工具由当前激活的记忆插件提供(默认 memory-core)。

Memory Wiki 伴侣插件

如果你希望持久记忆更像一个维护中的知识库而非原始笔记,可使用内置的 memory-wiki 插件。

memory-wiki 将持久知识编译成一个 wiki vault,包含:

  • 确定性页面结构
  • 结构化声索与证据
  • 矛盾与新鲜度追踪
  • 生成仪表盘
  • 供智能体/运行时消费的编译摘要
  • wiki 原生工具:wiki_searchwiki_getwiki_applywiki_lint

它不替代活跃记忆插件。活跃记忆插件仍然负责召回、晋升和梦境。memory-wiki 在旁边添加一个带有溯源的知识层。

参见 Memory Wiki

记忆搜索

当配置了 embedding provider 后,memory_search 使用混合搜索——结合向量相似性(语义含义)与关键词匹配(ID 和代码符号等精确词)。只要拥有任一支持 provider 的 API key,即可开箱即用。

信息:OpenClaw 从可用 API key 自动检测 embedding provider。如果配置了 OpenAI、Gemini、Voyage 或 Mistral key,记忆搜索会自动启用。

搜索工作原理、调优选项及 provider 配置详见 记忆搜索

记忆后端

后端说明
内置(默认)SQLite 基础,开箱即用,支持关键词搜索、向量相似度和混合搜索,无额外依赖。
QMD本地优先侧载,支持重排序、查询扩展,可索引工作区外目录。
HonchoAI 原生跨会话记忆,用户建模、语义搜索、多智能体感知,需要插件安装。
LanceDB内置 LanceDB 支持,OpenAI 兼容嵌入,自动召回/捕获,支持本地 Ollama 嵌入。

详细说明:

知识 wiki 层

Memory Wiki:将持久记忆编译成带有溯源、仪表盘、桥接模式、Obsidian 友好工作流的 wiki vault。

自动记忆刷新(Memory Flush)

压缩(compaction) 汇总对话之前,OpenClaw 会执行一次静默轮次,提醒智能体将重要上下文保存到记忆文件。此功能默认开启,无需配置。

如果想在本地模型上保持此清理轮次,可设置精确的记忆刷新模型覆盖:

json
{
  "agents": {
    "defaults": {
      "compaction": {
        "memoryFlush": {
          "model": "ollama/qwen3:8b"
        }
      }
    }
  }
}

该覆盖仅适用于记忆刷新轮次,不会继承活跃会话的回退链。

提示:记忆刷新防止压缩时丢失上下文。如果你的智能体在对话中有重要事实尚未写入文件,它们会在摘要发生前自动保存。

梦境(Dreaming)

梦境是可选的记忆后台巩固流程。它收集短期信号,给候选内容打分,仅将合格项晋升到长期记忆(MEMORY.md)。

特性:

  • 可选: 默认关闭。
  • 定时: 启用后,memory-core 自动管理一个周期性 cron 作业用于完整梦境清扫。
  • 阈值控制: 晋升必须通过评分、召回频率和查询多样性门槛。
  • 可审阅: 阶段摘要和梦境条目写入 DREAMS.md 供人审阅。

阶段行为、评分信号和 Dream Diary 细节详见梦境

基于历史回填与实时晋升

梦境系统现在有两个紧密关联的审查通道:

  • 实时梦境:从短期梦境存储(memory/.dreams/)工作,正常深度阶段据此决定哪些内容可以晋升到 MEMORY.md
  • 基于历史回填:读取历史 memory/YYYY-MM-DD.md 笔记作为独立日文件,并将结构化的审查输出写入 DREAMS.md

当你使用:

bash
openclaw memory rem-backfill --path ./memory --stage-short-term

回填的候选内容不会直接晋升,而是暂存到与正常深度阶段相同的短期梦境存储中。这意味着:

  • DREAMS.md 保持为人机审查界面。
  • 短期存储保持为机器排序界面。
  • MEMORY.md 仍然只通过深度晋升写入。

如果你认为回放没有用,可以移除暂存工件而不影响普通梦境条目或正常召回状态:

bash
openclaw memory rem-backfill --rollback
openclaw memory rem-backfill --rollback-short-term

CLI 命令

bash
openclaw memory status          # 检查索引状态和 provider
openclaw memory search "query"  # 从命令行搜索
openclaw memory index --force   # 强制重建索引

进一步阅读

常见问题

为什么我让智能体记住的事情,在切换通道后就消失了?

如果使用内置或 QMD 后端,记忆存储在智能体工作区(文件),只要智能体 ID 和工作区路径不变,切换通道(如从 WhatsApp 到 Telegram)不会丢失记忆。但如果使用 Honcho 后端,需要确保在 Honcho 中正确配置跨会话用户映射。默认情况下,不同通道视为不同用户会话。

如何让智能体删除某个记忆?

直接告诉智能体:“删除 MEMORY.md 里关于 X 的内容。”智能体会自动使用 memory_get 读取文件并执行编辑。也可以通过 CLI 手动编辑:openclaw memory status 确认文件路径,然后手动编辑。

MEMORY.md 太长了会影响模型响应吗?

会。MEMORY.md 在每次 DM 会话开始时完整加载,如果文件很大(例如超过几 KB),会占用大量上下文窗口,可能导致模型忽略重要信息或超出 token 限制。建议使用 /context list 查看注入大小,如果显示“truncated”,需精简 MEMORY.md 或提高引导限制。可以启用梦境功能自动管理长期记忆。

相关