小龙虾居然比你更健忘?OpenClaw 记忆系统指南,让它永远记住你

0 阅读7分钟

每次重启会话,AI 就变成"第一次见面"的陌生人?这篇文章教你用 OpenClaw 的记忆系统,彻底解决这个让人崩溃的问题。


开篇:一个真实的崩溃现场

你跟 AI 聊了整整两个小时,教了它你的写作风格、技术偏好、工作流习惯……

然后第二天打开新会话。

它问你:"你是做什么工作的?"

你:……

这不是 bug,这是所有基于大模型的 AI 助手的"原罪"——上下文窗口是有限的,会话结束了,记忆就消失了。

但 OpenClaw 在这件事上,走了一条非常务实的路。


OpenClaw 记忆系统的核心哲学:文件就是真理

先说结论:OpenClaw 的记忆不在云端,不在数据库,就在你本地的 Markdown 文件里。

源码里有一句话说得特别直接:

"The files are the source of truth; the model only 'remembers' what gets written to disk."

翻译一下:文件是唯一的事实来源,模型只"记住"写入磁盘的内容。

这个设计思路让人拍案叫绝——简单、透明、可控。你随时可以打开文件看、改、删,完全掌握 AI 记住了什么。


记忆文件的两层架构

OpenClaw 把记忆分成两类,各司其职:

第一层:每日日志 memory/YYYY-MM-DD.md

  • 存放路径:~/.openclaw/workspace/memory/2026-03-16.md
  • 定位:流水账,今天发生了什么、讨论了什么、做了什么决定
  • 特点:仅追加(append-only),会话开始时自动读取今天和昨天的内容

想象它是你的工作日报——不需要精炼,但要记录。

第二层:长期记忆 MEMORY.md

  • 存放路径:~/.openclaw/workspace/MEMORY.md
  • 定位:精华提炼,跨越时间都需要记住的偏好、习惯、重要结论
  • 关键限制:只在主会话(私聊)中加载,群聊和共享上下文中不加载

为什么要这个限制?安全考虑。MEMORY.md 里可能有你的个人偏好、私人信息——这些内容不应该在群聊中"泄露"给其他人。


手把手:三分钟激活记忆系统

第一步:创建工作区目录和文件

mkdir -p ~/.openclaw/workspace/memory
touch ~/.openclaw/workspace/MEMORY.md

注意MEMORY.md 默认不存在,需要你手动创建。这是有意为之的设计——系统不会替你做这个决定。

第二步:往 MEMORY.md 里写点什么

# 我的个人上下文## 基本信息
- 工作角色:全栈开发工程师
- 技术栈偏好:TypeScript + React + Node.js
- 写作风格:简洁直接,不喜欢废话
​
## 工作习惯
- 代码注释用英文
- 提交信息遵循 Conventional Commits 规范
- 每天早上 9 点开始工作,专注时不要问太多问题
​
## 重要约定
- 帮我写代码时优先考虑可读性,不要过度优化
- 如果不确定,先问我,别自作主张

第三步:告诉 Agent 要读它

在你的 ~/.openclaw/workspace/AGENTS.md 里加上这段:

## 会话启动
1. 读取 SOUL.md
2. 读取 memory/YYYY-MM-DD.md(今天 + 昨天)
3. 如果是主会话(直接与用户对话):读取 MEMORY.md

好了,你的 AI 助手现在有长期记忆了。


进阶功能 1:语义搜索记忆

记忆文件多了之后,怎么找到相关内容?OpenClaw 提供了 向量语义搜索

Agent 有两个工具:

  • memory_search:语义搜索,找"意思相近的"内容
  • memory_get:精准读取,指定文件和行号

配置语义搜索,在 ~/.openclaw/config.json5 里:

{
  agents: {
    defaults: {
      memorySearch: {
        provider: "openai",  // 也支持 gemini、voyage、mistral、local(离线)
        remote: {
          apiKey: "YOUR_OPENAI_API_KEY"
        }
      }
    }
  }
}

不想用 API 密钥? 用本地模式:

{
  agents: {
    defaults: {
      memorySearch: {
        provider: "local",
        local: {
          modelPath: "/path/to/your/gguf/model"
        },
        fallback: "none"
      }
    }
  }
}

OpenClaw 会自动优先级尝试:local → openai → gemini → voyage → mistral,找到能用的就用。


进阶功能 2:自动记忆刷新(上下文压缩前的"遗嘱")

这是 OpenClaw 最有意思的机制之一,值得单独讲清楚。

问题:当一次会话聊得太长,上下文窗口快满了,系统会自动压缩(compaction)——把早期内容摘要成一段话。压缩之后,细节就永远消失了。

解决方案:在压缩发生之前,系统会悄悄触发一个"记忆刷新"——发一条无声的提示给 Agent,让它把重要内容写入 memory/YYYY-MM-DD.md

用户完全感知不到这个过程(除非你开了 verbose 日志),但重要信息被安全地保存下来了。

配置它(其实默认就是开着的):

{
  agents: {
    defaults: {
      compaction: {
        reserveTokensFloor: 20000,
        memoryFlush: {
          enabled: true,
          softThresholdTokens: 4000,
          systemPrompt: "Session nearing compaction. Store durable memories now.",
          prompt: "Write any lasting notes to memory/YYYY-MM-DD.md; reply with NO_REPLY if nothing to store.",
        }
      }
    }
  }
}

触发逻辑(从源码扒出来的):

触发条件 = 当前 token 数 >= (上下文窗口 - reserveTokensFloor - softThresholdTokens)

而且每次压缩周期只触发一次,不会重复骚扰你。


进阶功能 3:QMD 后端(实验性,强力玩家专属)

如果你有大量 Markdown 笔记(几百上千篇),普通的 SQLite 向量索引可能不够用。OpenClaw 支持接入 QMD——一个结合了 BM25 + 向量 + 重排序的本地搜索引擎。

{
  memory: {
    backend: "qmd",
    qmd: {
      includeDefaultMemory: true,
      update: { interval: "5m" },
      paths: [
        { name: "personal-notes", path: "~/Documents/notes", pattern: "**/*.md" }
      ]
    }
  }
}

QMD 完全本地运行,不需要联网,首次启动会自动下载 GGUF 模型。

踩坑提醒:macOS 上需要 brew install sqlite(brew 版,不是系统自带的),因为 QMD 需要支持扩展的 SQLite。


进阶功能 4:把笔记/图片/音频也纳入记忆

如果你想让 Agent 记住的不只是文字,还有截图、语音备忘录……OpenClaw 支持 多模态记忆索引(需要 Gemini Embedding 2):

{
  agents: {
    defaults: {
      memorySearch: {
        provider: "gemini",
        model: "gemini-embedding-2-preview",
        extraPaths: ["~/Desktop/screenshots", "~/voice-notes"],
        multimodal: {
          enabled: true,
          modalities: ["image", "audio"]
        },
        remote: {
          apiKey: "YOUR_GEMINI_API_KEY"
        }
      }
    }
  }
}

支持的图片格式:.jpg.png.webp.gif.heic 支持的音频格式:.mp3.wav.m4a.flac


实用技巧速查

技巧 1:让 Agent 主动记东西

直接告诉它:"记住这个,我的 API key 前缀格式是 sk-xxx"。

好的 Agent 会自动把这句话写入 memory/今天.md。如果它没写,你可以说:"帮我写到 MEMORY.md 里。"

记住源码里的箴言: "如果你想记住什么,就写到文件里。心理笔记在会话重启后不存在,文件可以。"

技巧 2:检查记忆状态

openclaw memory status

会告诉你:记忆文件路径、文件数量、是否有问题。

技巧 3:额外索引团队文档

{
  agents: {
    defaults: {
      memorySearch: {
        extraPaths: [
          "../team-wiki",           // 团队 Wiki(工作区相对路径)
          "/srv/shared-notes"       // 共享笔记(绝对路径)
        ]
      }
    }
  }
}

技巧 4:控制记忆搜索范围

默认只在私聊中触发记忆搜索(防止在群聊中泄露个人信息)。如果你想在特定频道也用,可以配置 scope

{
  memory: {
    qmd: {
      scope: {
        default: "deny",
        rules: [
          { action: "allow", match: { chatType: "direct" } }
        ]
      }
    }
  }
}

常见问题 FAQ

Q:MEMORY.md 没有效果,Agent 好像没读它?

A:检查 AGENTS.md 里有没有明确指示读取它。另外确认你是在"主会话"(直接对话),不是群聊或 bot 频道。

Q:语义搜索没反应?

A:运行 openclaw memory status 看看哪里报错。最常见的问题是没有配置 API key,或者 memorySearch.provider 没有设置,而系统找不到可用的 embedding 服务。

Q:想完全关掉记忆功能?

A:

{
  plugins: {
    slots: {
      memory: "none"
    }
  }
}

Q:记忆文件越来越大怎么办?

A:定期让 Agent 帮你"整理"——让它把一个月的日志提炼成几条要点,更新 MEMORY.md,然后归档旧日志。这本来就是 MEMORY.md 设计的初衷:提炼的精华,而非原始日志。


总结:记忆系统的使用哲学

OpenClaw 的记忆系统给了我一个全新的视角:AI 的"记忆"本质上是一个内容管理问题,而不是技术问题。

文件是事实,模型是消费者。你控制文件,你就控制记忆。

最后送上三条行动指南:

  1. 今天就创建 MEMORY.md,把你最重要的偏好和习惯写进去
  2. 养成习惯:重要决定和结论,主动让 Agent 写入记忆
  3. 定期维护:每个月回顾一次,把有用的内容精炼到 MEMORY.md

你的 AI 助手能有多强,很大程度上取决于你给它的"记忆"有多好。


文中所有技术细节均基于 OpenClaw 源码验证,包括 src/auto-reply/reply/memory-flush.tsdocs/concepts/memory.mdsrc/agents/tools/memory-tool.ts 等核心文件。欢迎对照源码自行探索。