OpenClaw 工作原理解析:从消息输入到完整反馈
OpenClaw 的架构,以及它处理智能体执行、工具调用、浏览器操作等功能的实现逻辑,其中诸多设计思路对 AI 工程师极具借鉴价值。深入了解 Clawd 的底层运行机制,能让我们更清晰地认识这套系统的功能边界,更重要的是,明确它的优势与短板。
Clawd 的技术本质
大家都知道,OpenClaw 是一款个人智能助手,可本地部署或通过大模型 API 调用,甚至在手机上就能轻松操作,但它的技术本质究竟是什么?OpenClaw 的核心是一个基于 TypeScript 开发的命令行应用(CLI),既非 Python 开发、也非基于 Next.js 的网页应用。作为一个独立运行进程,它的核心功能包括:
- 在本地设备运行并启动网关服务器,处理全渠道连接(电报、WhatsApp、斯拉克等);
- 调用大语言模型 API(Anthropic、OpenAI、本地模型等);
- 本地执行各类工具指令;
- 实现用户对电脑的各类操作需求。
技术框架
为了更通俗地解释其架构,我们以”向 Clawd 发送消息到获取反馈”的完整流程为例说明。
(流程链路:用户消息 → 通道适配器 → 网关服务器 → 会话路由器 → 智能体运行器 → 模型解析器 → 系统提示词构建器 → 历史加载器 → 会话 → 任务通道队列 → 上下文窗口防护机制 → 大语言模型 API → 智能体循环 → 反馈通路 → 通道适配器 → 最终文本)
在即时通讯工具中向 Clawd 发送指令后,会依次触发以下环节:
1. 通道适配器
通道适配器接收用户消息并进行预处理,包括消息标准化、提取附件等。不同的即时通讯工具和输入流,都配有专属的适配器。
2. 网关服务器
作为任务与会话的协调中枢,网关服务器接收用户消息并将其分发至对应会话,是 Clawd 的核心模块,可处理多个并行的请求。
Clawd 为了防止 AI 在处理多任务时把数据搞乱(竞态条件),放弃了那种看似高级但容易出错的”多线程异步”写法,而是采用了最稳妥的”排队叫号(命令队列)“机制。默认所有任务都乖乖排队(串行),只有明确安全的任务才允许插队同时做(显式并行),从而保证了系统极高的稳定性和可靠性。
那么,OpenClaw 怎么保证配置了一个 Agent,当有很多用户同时向他发送消息、让他处理任务的时候,怎么保证这个任务能够稳定执行呢?
我们可以把 OpenClaw 想象成一家 “只有一个超级大脑(Agent),但拥有完美管理系统的超级咨询公司”。当一大群客户(多个用户)同时涌进来提需求时,为了保证这个超级大脑不崩溃、不串台、稳定输出,Clawd 设计了 五道防线。
第一道防线:大堂经理精准分流(网关服务器)
当很多消息同时涌来时,第一步绝不能让所有消息直接砸到 Agent 脸上。
- 机制:网关服务器就像银行的”大堂经理”。它接收所有消息后,会根据来源(比如 Telegram、WhatsApp)和发送者,把消息精准分发到对应的 “会话(Session)” 中。
- 作用:确保张三的消息进了张三的档案袋,李四的消息进了李四的档案袋,物理隔离,绝不混淆。
第二道防线:VIP 专属排队窗口(任务通道与命令队列)
(这里就用到了咱们上一问聊过的核心概念!)
- 机制:网关分发后,每一个独立的会话,都会分配一个专属的”任务通道”。
- 比喻:就像银行给每个客户分配了专属的 VIP 柜台。
- 张三在 1 号窗口,他的 5 个任务在 1 号窗口乖乖排队(串行执行)。
- 李四在 2 号窗口,他的任务在 2 号窗口排队。
- 为什么能保稳定? 因为 Agent 在 1 号窗口处理张三的任务时,绝对不会受到 2 号窗口李四任务的干扰。这就彻底消灭了前面提到的”竞态条件”(比如张三的任务和李四的任务同时去修改同一个文件导致崩溃)。各干各的,互不干扰,系统自然就稳了。
第三道防线:大脑的”防过载与急救”机制(智能体运行器)
就算任务分开了,Agent 的”大脑(大模型 API)“和”记忆力(上下文窗口)“也是有限度的。Clawd 做了极其聪明的兜底设计:
- API 自动切换(备用大脑):如果当前使用的大模型 API(比如 Claude)突然宕机、限流或者密钥失效,智能体运行器会自动把这个密钥”关小黑屋(冷却)“,并瞬间切换到备用模型或备用密钥。用户根本感觉不到中间出了故障。
- 上下文压缩(防脑爆):如果用户一直聊,对话记录太长,快把大模型的”上下文窗口(短期记忆容量)“撑爆了怎么办?系统不会直接崩溃,而是触发 “上下文防护机制”——让大模型把前面的长对话总结压缩成一段摘要,腾出空间继续工作;如果实在压缩不了,就”优雅降级”(体面地停止执行),而不是直接报错死机。
第四道防线:防死循环的”安全绳”(智能体循环限制)
- 机制:Agent 在执行任务时,经常需要调用工具(比如读文件、执行代码、上网搜索),这被称为”智能体循环”。Clawd 给这个循环设置了一个最大次数限制(默认约 20 次)。
- 为什么能保稳定? 假设 Agent 遇到了一个极其复杂的任务,或者因为理解错误陷入了”死循环”(比如一直在反复读取同一个报错文件)。如果没有安全绳,这个任务就会永远卡在那里,耗尽服务器资源。有了 20 次的限制,一旦达到上限,系统会强制掐断,防止单个任务拖垮整个系统。
第五道防线:影分身之术(子智能体机制)
- 机制:如果某个用户的任务实在太庞大,主 Agent 还可以”生”出一个子智能体。
- 比喻:主 Agent 相当于项目经理,他把大任务拆分,派给子智能体(独立会话)去后台慢慢干。主 Agent 自己则腾出手来,继续接待其他新客户,或者通过”轮询”去查看子智能体的进度。这大大提高了系统的吞吐能力。
3. 智能体运行器
这是真正承载 AI 能力的模块。该模块会确定待调用的模型、匹配对应的 API 密钥(若密钥失效,会将该配置标记为冷却状态并尝试下一个),若主模型调用失败,会自动切换至备用模型。
智能体运行器会结合可用工具、技能、记忆内容动态生成系统提示词,再加入会话历史(存储于 .jsonl 文件),随后将完整提示词传入上下文窗口防护机制,校验是否有足够的上下文空间。若上下文空间即将耗尽,系统会选择压缩会话内容(对上下文进行总结)或优雅降级终止执行。
4. 大语言模型 API 调用
大模型调用环节会以流式方式返回结果,同时对不同服务商的 API 做了一层抽象封装;若所调用的模型支持深度思考功能,该模块还会触发模型的扩展思考逻辑。
5. 智能体循环
若大模型返回工具调用指令,Clawd 会在本地执行该指令,并将执行结果补充至对话中。这一过程会反复执行,直至大模型返回最终文本结果,或达到最大循环次数(默认约 20 次)。正是在这一环节,Clawd 实现了其核心能力——电脑操作功能。
6. 反馈通路
这一环节的逻辑较为常规:执行结果会通过原消息通道反馈给用户,同时会话数据会以基础的 jsonl 格式持久化存储,文件中每行都是一个 json 对象,记录了用户消息、工具调用指令、执行结果、模型反馈等内容,这也是 Clawd 的记忆实现方式——基于会话的记忆机制。
以上就是 Clawd 的基础架构,接下来我们聊聊其中几个关键的核心模块。
Clawd 的记忆机制
没有完善的记忆系统,AI 助手的能力便会大打折扣。Clawd 通过两套系统实现记忆功能:
- 以 jsonl 格式存储的会话记录;
- 存储为 Markdown 格式的记忆文件,文件位于 MEMORY.md 或 memory/ 文件夹中。
在检索环节,Clawd 采用了向量检索与关键词匹配相结合的混合检索方式,兼具两种方式的优势。例如检索”认证漏洞(authentication bug)“时,系统既能找到提及”认证问题(auth issues)“的文档(语义匹配),也能精准定位包含该精确短语的内容(关键词匹配)。
其中,向量检索基于 SQLite 实现,关键词检索则借助 SQLite 的扩展模块 FTS5 完成,嵌入向量生成服务商支持自定义配置。这些 Markdown 记忆文件由智能体通过常规的”写入”文件工具生成,无专属的记忆写入 API,智能体只需向 memory/*.md 路径写入内容即可。
当新的对话开始时,系统会提取上一轮的对话内容,并将其总结为 Markdown 格式的文件。
Clawd 的记忆系统设计出乎意料地简洁,无需合并记忆文件,也无需按每月/每周的周期压缩记忆内容。这种简洁性是优势还是缺陷,因人而异,但我始终推崇可解释的简洁设计,而非混乱复杂的架构。
Clawd 的记忆会永久保存,且新老记忆的权重基本一致,不存在记忆衰减曲线。
Clawd 的核心能力:电脑操作实现
这是 Clawd 的核心壁垒之一:可接管本地电脑并实现各类操作。其实现逻辑与大家的直观认知基本一致。
Clawd 会向智能体开放较高权限的电脑操作能力,相关风险由用户自行承担。它通过执行工具(exec tool)在设备上运行 Shell 命令,支持三种运行环境:
- 沙箱环境(默认):命令在 Docker 容器中运行;
- 本地宿主机;
- 远程设备。
除此之外,Clawd 还配备了各类工具:
- 文件系统工具(支持读取、写入、编辑);
- 基于 Playwright 实现的浏览器工具,可生成语义快照;
- 进程管理工具,用于执行后台长期运行的命令、终止进程等。
安全机制(或近乎缺失?)
与 Claude Code 类似,Clawd 为用户设置了命令白名单,用户可对各类命令进行权限审批,支持三种操作:单次允许、始终允许、拒绝,并会向用户弹出审批提示。Clawd 的安全机制与 Claude Code 的设计思路高度相似,核心是在用户允许的范围内,给予智能体最大的自主操作权限。
浏览器工具:语义快照而非截图
Clawd 的浏览器工具并非主要依赖截图,而是采用语义快照——一种基于页面无障碍树(ARIA)的文本化表示形式。
所以 Agent 将看到:
- textbox "Email" [ref=2]- textbox "Password" [ref=3]- link "Forgot password?" [ref=4]- heading "Welcome back"- list - listitem "Dashboard" - listitem "Settings"这透露了四个显著优势。正如你可能已经猜到的,浏览网站并不一定是视觉上的任务。截图大小为 5 MB,语义快照则少于 50 KB,且仅占图像代币成本的一小部分。
动态系统提示词
与大多数框架不同,Clawd 的系统提示词并非固定不变,而是结合技能、记忆检索结果、用户身份、时区等信息动态构建。其基础系统提示词如下:
## 工具集可用工具(按策略筛选):工具名称区分大小写,需严格按列出的名称调用。- read:读取文件内容- exec:运行 Shell 命令- browser:控制网页浏览器[...仅显示该智能体可访问的工具]
## 工具调用风格默认规则:常规、低风险的工具调用无需说明(直接调用即可);仅在以下场景需补充说明:多步骤操作、复杂问题、敏感操作。
## 子智能体/智能体生成智能体可以生成子智能体(但子智能体无法再生成下一级智能体)。子智能体拥有独立会话,父子智能体通过 session_send 实现通信,子智能体的执行结果会反馈给父智能体,父智能体可通过轮询子智能体会话查看执行进度。上下文压缩
当接近上下文长度限制时,智能体会将关键信息保存至记忆中。会话历史会被拆分为多个片段,由大语言模型对片段进行总结,最终合并为连贯的摘要,替换原始消息内容。
Share Article
If this article helped you, please share it with others!