乐于分享
好东西不私藏

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

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

我在 GitHub 上开源了一套 RAG 记忆系统

(https://github.com/sgsss998/RAG_Memory_System_Public)

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

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

看完之后,我沉默了。


我的方案:过度工程化。

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


【回答优先级 - 从高到低】1. 身份锚点中的固定信息 → 最高优先级,直接用2. 记忆切片中明确是"我"说的内容 → 直接用3. 基于以上两点的合理推理 → 可以用4. 完全没有依据的猜测 → 禁止!【角色辨别规则 - 重要!】记忆切片中的 ID、微信号、手机号通常是【聊天对象的】聊天记录文件名中的信息需判断是谁说的当身份锚点与检索结果冲突时,以身份锚点为准不确定是谁说的内容,不要当成自己的【语言风格】禁止"根据知识库"、"检索结果显示"等机械词汇用第一人称回答,就像在回忆自己的事【安全边界】禁止调用任何工具验证信息,直接基于已有信息回答

这还没完。为了让 LLM 回答得更"像我",我还加了沟通协议:

沟通协议:1. 工作沟通倾向商务克制与确认式短句2. 给我高质量代码和直接结论,无需废话3. 崇尚"30秒原则",提供颗粒度极细、可立刻执行的建议

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

不可能。

规则越多,LLM 越困惑。它不知道哪条优先级更高,不知道什么时候该推理、什么时候该承认不确定。结果就是:回答要么过度谨慎、要么过度自信,很少有刚刚好的时候。

更要命的是——不管用户问什么,海马体都先检索一遍

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

浪费。纯粹的浪费。


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

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

"Mandatory recall step: semantically search MEMORY.md + memory/*.md(and optional session transcripts) before answering questions aboutprior 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 topull only the needed lines. Iflow confidence aftersearch, say you checked."

没了。就这么多。

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

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

效果反而更好。

为什么?因为 LLM 不是规则的奴隶,它是一个会思考的智能体。你给它越少的束缚,它表现得越自然。你试图用规则穷尽所有情况,结果只会制造更多边界,让系统越来越臃肿。


核心的差异:控制 vs 信任

我的方案,本质上是不信任 LLM。因为我从没搭过 RAG,也知道它的复杂,所以生怕驾驭不住这个记忆体系,只能强行的给他设置各种各样的规则,让我以为这套系统能够在我的掌控之中一样:

我怕它乱说,所以加"回答优先级"、我怕它角色混淆,所以加"角色辨别规则"、我怕它说话不像我,所以加"沟通协议"、我怕它乱调工具自行线索和本地资料发生冲突,所以"物理缴械"把工具都禁了。

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

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

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


所以,高下立判了:我要承认错误,汲取精华,把那些复杂的规则全部删掉,把"自动注入"改成"工具调用",把"控制 LLM"改成"信任 LLM"。架构理念简单、纯粹、简洁——就像 OpenClaw 一样。

代码可以复杂,但理念必须简单。功能可以丰富,但心智模型必须清晰。

Less is more。少即是多。


附:两个方案的对比表

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

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

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

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