关于 OpenClaw 架构最大的认知误区,是将其等同于“挂载了 Chroma/Milvus 的大模型”。实际上,OpenClaw 的记忆不是模型内部的隐式状态,也不是黑盒向量库,而是工作区里的 Markdown 文件 [Docs: Memory]。
官方文档直接写明:memory/YYYY-MM-DD.md 与 MEMORY.md 是默认记忆层,“Files are the source of truth”(文件就是唯一的真相来源)。模型真正“记住”的只有被写回磁盘的内容。所有的检索、向量索引、BM25 融合、QMD 引擎等,仅仅是围绕这些文件建立的加速召回层。
基于技术白皮书和开发者社区讨论,OpenClaw 的基础架构被抽象为相互独立但可组合的 三层记忆模型 [Tech Article]:
OpenClaw 的“结构化”并非预先定义强 schema 的知识图谱,而是先用固定文件布局建立记忆容器,再用检索工具和上下文规则赋予文件结构 [Docs: Workspace]。
官方将 Workspace 定义为 Agent 的 Home 目录。标准文件矩阵包括:AGENTS.md, SOUL.md, USER.md, IDENTITY.md, TOOLS.md 等核心设定文件。而真正的“动态记忆”被严格划分:
memory/YYYY-MM-DD.md:每日追加的日志笔记(Append-only)。MEMORY.md:经过 Agent 自主整理的持久偏好与核心事实。记忆并非“所有会话共享的一锅粥”。MEMORY.md 只在主私聊 session 中注入,绝不污染 group/shared context [Docs: Memory]。Direct chat 状态可汇聚到主 session,而群组拥有独立的隔离状态,保障了多任务处理的安全边界。
OpenClaw 不鼓励将全部记忆粗暴塞进 prompt。单文件默认有 20,000 字符注入上限,大文件会被强制截断 [Docs: Context]。这一限制从根本上解释了“为什么必须使用检索机制”:它降低了 Token 成本,并防止了长期记忆直接灌入导致的“大海捞针”噪声风险。
系统明确区分“Durable facts”和“日常上下文”。当当前会话逼近 auto-compaction(自动压缩)阈值前,OpenClaw 会触发一次静默的 pre-compaction memory flush(预压缩记忆落盘)。系统甚至默认使用 NO_REPLY 指令,让模型在用户无感知的情况下,先把值得长期保留的内容写入磁盘,完美衔接了“短期上下文丢失”与“长期记忆落盘”的缝隙 [Docs: Memory]。
在 memory-core 的源码中,系统硬性注入了 “Memory Recall” 指令。要求 Agent 在回答“过去做过什么、决策、偏好”时,必须先对文件运行 memory_search,再用 memory_get 拉取具体行 [GitHub: memory-core/index.ts]。这标志着检索机制被上升为 AI 代理不可违背的行为规范。
为了支持海量 Markdown 文件的召回,OpenClaw 提供了两套不同复杂度的检索引擎:
默认启用,自动监听 MEMORY.md 与 memory/ 变更。索引以 per-agent 形式存放在 ~/.openclaw/memory/<agentId>.sqlite 中。
memory_search 先在约 400 token / 80 token overlap 的块上做语义与关键词召回(返回 snippet、路径、行号),随后 LLM 再调用 memory_get 精确读取行。这种“粗召回+精读取”大幅提升了上下文利用率。vectorWeight * vectorScore + textWeight * textScore 融合。默认支持本地 sqlite-vec 向量检索 [Docs: Config]。lambda=0.7, halfLifeDays=30)使新记忆权重更高,以及 MMR(最大边界相关性)利用 Jaccard 相似度减少重复片段。在配置中开启 memory.backend = "qmd" 后,系统将切换到更强大的 QMD sidecar 进程 [GitHub: QMD]。
~/.openclaw/agents/<agentId>/qmd/,并在失败时可自动降级至 SQLite [Docs: Config]。qmd context add,在搜索结果中返回树状上下文描述,帮助 LLM 更精准地过滤信息。尽管基础盘是“File-first”,但官方技能库中已出现名为 Structured Memory 的插件。该技能在保持 Markdown 事实源的同时,在其之上构建按日期、模块、实体的重建索引与 Critical fact cards(关键事实卡片)[GitHub: Skills]。这标志着生态正向结构化检索(Structured Retrieval)深度演进。
vectorWeight=0.7 / textWeight=0.3 且 minScore=0.35 时,纯粹的精确关键词命中(如特定 ID、项目名)最高分只能到 0.30,从而被系统静默过滤 [GitHub Issue: #25183]。query 模式在 rerank 后偶发 SIGABRT 崩溃,导致 OpenClaw 获取空结果 [QMD Issue: #368]。目前官方推荐 searchMode=search 作为求稳配置。宏观研判: OpenClaw 并非追求极致的数据库架构创新,而是巧妙地将 Agent 的记忆打造成一个“人类可见、检索可插拔、上下文可治理、AI 行为受规约”的系统。它的护城河在于其工作流的优雅解耦和文件基石底座。
工程落地建议:
MEMORY.md 仅存核心法则(Durable facts),而 memory/YYYY-MM-DD.md 必须保持 Append-only(仅追加日志)以防核心状态崩溃。vectorWeight/textWeight) 和时间衰减 (lambda),而非盲目更换更庞大的 Embedding 模型。善用 openclaw memory status --deep 和 memory index --force 进行 CLI 排错。embeddinggemma-300M 严重偏向英文。强烈建议替换为 Qwen3-Embedding 等原生多语模型,并强制重建索引 [GitHub: QMD CJK Note]。