OpenClaw中记忆海马体:QMD
目录

OpenClaw(前Clawdbot/Moltbot)的 qmd 记忆管理 是目前社区里讨论最多、最有特色的本地持久化记忆方案之一。
它本质上是一个 “文件优先 + 向量检索” 的混合记忆系统,而不是传统RAG数据库或KV缓存那一套。
核心设计理念
记忆 = 纯 Markdown 文件(人类可读、可 git 版本控制、可手动编辑)
不依赖任何专有数据库格式、不需要额外的 memory upsert API、Agent 直接用 写文件工具 就把记忆写到硬盘。读取/搜索靠 语义向量检索 + 文件系统。
这套设计,让记忆具有几个属性:
永久:重启、换电脑、过半年都还在(只要硬盘不坏)
无限容量:理论上只受硬盘限制
完全可控:你随时可以用 VSCode / Obsidian 打开改、删、整理
可迁移 / 可备份:直接复制整个 workspace 文件夹就行
典型的物理文件结构
默认 workspace 路径 ~/openclaw/ 或 ~/.openclaw/

两层记忆的分工
第1层(短期/原始)
文件为memory/YYYY-MM-DD.md,记录当天的原始对话、事实、待办及粗糙记录;
写入时机为几乎实时写、会话结束时批量写,单文件长度建议几千~2w字,主要作用是提供完整历史与时间线。
第2层(长期/精华)
文件为MEMORY.md,记录提炼后的知识、规则、用户偏好、重大结论及项目状态;
写入时机为重大事件发生时、每天/每周总结、用户手动补充,整体长度控制在8000~15000字,核心作用是几乎每个请求都会加载,为决策提供核心依据。
有些高手会再加第三层:PROJECT.md / PROJECTS/ 放具体项目知识,但主流还是双层。
qmd 到底是什么?
qmd 是 OpenClaw 社区对 “Quick Memory Database” 或类似向量化模块的俗称(不是官方命名,但到处都在用这个词)。
它主要是自动/手动建立向量索引。监听 memory/*.md 和 MEMORY.md 的变化,把新内容切块(chunk,通常 300–800 token 一块)。
然后用 embedding 模型(openai/text-embedding-3-small、bge-large-zh-v1.5、本地nomic-embed-text 等)生成向量,存进 sqlite + HNSW(或 faiss、usearch 等)
它给 Agent 提供的两个核心工具memory_search(query, limit=8, min_score=0.22),返回最相似的 topK 文本块 + 文件路径 + 行号范围 + 相似度
memory_get(path, start_line, line_count),用来精确读取某段文件内容(防越权)
Agent 在几乎所有需要“回想”的场景下,都会先调用 memory_search,再根据需要 memory_get 拉完整内容。
写入策略,全部由提示词控制,而不是硬编码。
主要看这些文件:
AGENTS.md 中的 <memory_write_strategy> 或类似段落,用prompt 解锁长期记忆
当出现以下情况时,主动把关键信息写入对应层:
-
用户明确说“记住”“记下来”“以后要用” → 写 memory/当天.md + 考虑是否提炼到 MEMORY.md
-
完成一个重要项目阶段/决定/用户偏好改变 → 提炼后追加到 MEMORY.md
-
每天对话结束前,做一次总结 → 写 memory/当天.md
-
发现 MEMORY.md 太长(>15000字) → 触发 compaction(压缩/提炼)
OpenClaw 的记忆系统之所以强,是因为它把“记忆”从黑盒变成了你硬盘上的一堆可编辑 Markdown 文件,同时又用向量检索让 AI 能快速找到需要的东西。
原文链接:https://mp.weixin.qq.com/s/A6_RryLjuqeypXEdbm5hQQ
来源:XT