反思我的RAG设计-为什么OpenClaw更优雅


我在 GitHub 上开源了一套 RAG 记忆系统(https://github.com/sgsss998/RAG_Memory_System_Public)

折腾了大半个月,功能齐备:混合检索、权重系统、身份锚点、角色辨别、推理边界……代码写了小两千行,prompt 磨了几十版,自以为挺完善了。

然后我认真研究了 OpenClaw 的记忆模块源码。

看完之后,我沉默了。

我的方案:过度工程化

每次用户问问题,代理网关先把问题截下来,送去海马体检索,捞几条相关记忆,然后塞进 prompt 里,再发给 LLM。为了让 LLM 正确使用这些记忆,我让 AI写了一堆规则:

【回答优先级 - 从高到低】
1. 身份锚点中的固定信息 → 最高优先级,直接用
2. 记忆切片中明确是"我"说的内容 → 直接用
3. 基于以上两点的合理推理 → 可以用
4. 完全没有依据的猜测 → 禁止!
【角色辨别规则 - 重要!】
- 记忆切片中的 ID、微信号、手机号通常是【聊天对象的】
...

但问题来了:这些规则,LLM 真的能完美遵守吗?

不可能。

规则越多,LLM 越困惑。更要命的是——不管用户问什么,海马体都先检索一遍。

“帮我写个 hello world”——检索。 “今天天气怎么样”——检索。 “1+1 等于几”——检索。

浪费。纯粹的浪费。

OpenClaw 的方案:信任

再来看 OpenClaw 的方案,我读出了两个字:信任。

它给 LLM 装了一个工具,叫 memory_search。工具描述就几行字:

"Mandatory recall step: semantically search MEMORY.md + memory/*.md
(and optional session transcripts) before answering questions about
prior work, decisions, dates, people, preferences, or todos;
returns top snippets with path + lines."

然后 system prompt 里加一句话:

"Before answering anything about prior work, decisions, dates, people,
preferences, or todos: run memory_search... then use memory_get to
pull only the needed lines. If low confidence after search, say you checked."

没了。就这么多。

LLM 读到问题,自己判断要不要搜记忆。要搜就调工具,不要搜就直接回答。检索结果只拉需要的几行,不是整篇文档。

没有”回答优先级”的复杂规则,没有”角色辨别”的冗长说明,没有”沟通协议”的风格限制。OpenClaw 信任 LLM,让 LLM 自己决定怎么回答。

效果反而更好。

核心的差异:控制 vs 信任

我的方案,本质上是不信任 LLM。我怕它乱说,所以加”回答优先级”;我怕它角色混淆,所以加”角色辨别规则”;我怕它说话不像我,所以加”沟通协议”。

每一条规则,都是对 LLM 能力的不信任。结果就是:LLM 被绑得死死的,变成了一个只会照本宣科的复读机。

而 OpenClaw 的方案,本质上是信任 LLM

它相信 LLM 知道什么时候该搜索、什么时候该推理、什么时候该承认不确定。它不给 LLM 穿小鞋,不限制 LLM 的表达风格。它只给 LLM 一个工具、一个简单的使用说明,然后放手让它干。

两个方案的对比

维度我的方案OpenClaw
检索触发每次都检索LLM 按需调用
Token 消耗固定开销按需消耗
Prompt 规则几十条几行
LLM 自主性被动接受主动决策
风格限制强制约束自然表达
失败处理复杂兜底”说查过了”
心智模型控制信任

我那套”精心设计”的 RAG 系统,在 OpenClaw 面前,就像一个过度焦虑的父母,对孩子管得太多、太细,反而绑住了孩子的手脚。

OpenClaw 像一个开明的父母,给孩子一个工具、一个简单的说明,然后放手让它自己去探索。

不得不服,OpenClaw,有点东西。