OpenClaw 记忆重复查询:机制本身就有,分层只是其中一种思路

用 OpenClaw 当个人助手,我注意到一个隐蔽问题:同一份记忆,会既被自动注入、又被显式搜索,在上下文里出现两次。

排查下来发现这不是 bug,而是 OpenClaw 记忆机制本身就有两条路径,它们天然会重叠。

问题:重复查询从哪来

OpenClaw 的记忆召回有两条路:

路径 A:自动注入(trigger recall)

路径 B:显式搜索(memory_search 工具)

问题就在这: 触发词命中 → 路径 A 已把某条记忆塞进上下文;agent 又显式搜 → 路径 B 再把同一份搜出来。同一个内容出现两次,浪费 token、稀释注意力。

一种处理思路:分层 + 命中即停

这里给的只是众多处理方式中的一种,能缓解一部分问题,不是唯一解、也不是"就该这么做"。

核心思路:给两条路径定优先级,命中就停,不重复搜。

层级来源触发成本
L1MEMORY.md / USER.md自动注入 + 会话加载秒回,0 成本
L2knowledge/index.md 导航知道去哪取,直接取毫秒级
L3向量搜索(memory_search)L1/L2 没命中才查历史数百 ms~数 s
L4Outline(MCP)前三层都没有才调1.5~2.5s

怎么缓解重复:

可能的好处: 减少重复、省 token、省延迟(L1 秒回,不进 L3 的 8s embedding、L4 的 2.5s MCP)。

但要看到取舍: 如果 L1 没搜到相关记忆,可能漏召回。用不用、怎么调,取决于实际场景。

为什么这条思路能成立

OpenClaw 的 memory 文档提到:自动注入只覆盖 MEMORY.md / USER.md(promoted/trusted entries),日文件和知识库不会自动注入。

这意味着两条路径在覆盖范围上天然不同

分层可以顺着这个边界来划分职责。这只是机制背景,方便理解思路的由来,不代表只能这么做。

落地时可以考虑的点

  1. 记忆写对地方:轻量长期事实进 MEMORY.md(走自动注入);流水进日文件(可显式搜);成体系进 Outline。
  2. 问答时命中即停:L1 已覆盖的,可不再重复调 L3/L4。
  3. 必要时调 maxResults:默认 6,注入前可调小,减少冗余命中。

小结

重复查询是 OpenClaw 记忆双路径(自动注入 + 显式搜索)机制本身的产物。 分层 + 命中即停只是其中一种缓解思路,能解决一部分重复和 token/延迟问题,也有取舍。用不用、怎么调,取决于你的实际场景。

← 返回文章列表