我深入了解了Clawdbot(亦称Moltbot)的架构及其处理智能体执行、工具使用、浏览器操作等方式。对于AI工程师而言,这其中有许多值得借鉴之处。
了解Clawd的内部工作机制,能让我们更好地理解这个系统及其能力,最重要的是,明白它擅长什么不擅长什么
这一切始于我个人对Clawd如何处理记忆及其可靠性的好奇。
在本文中,我将浅析Clawd的工作方式。

Clawd的技术实质
众所周知,Clawd是一个个人助理,你可以本地运行或通过模型API使用,并能像在手机上一样轻松访问。但它究竟是什么?
本质上,Clawdbot 是一个 TypeScript CLI 应用程序。
它并非Python、Next.js或网页应用。
它是一个进程,能够:

在你的机器上运行,并暴露一个网关服务器来处理所有通道连接(Telegram、WhatsApp、Slack 等);
调用LLM API(Anthropic、OpenAI、本地模型等);
在本地执行工具;
并在你的计算机上执行你想要的任何操作。

系统架构
为了更简单地解释其架构,这里有一个示例,展示了从你向Clawd发送消息到获得输出的完整过程。

当你通过即时通讯软件向Clawd发送指令时,会发生以下过程:

1. 通道适配器
通道适配器接收并处理你的消息(进行规范化、提取附件)。不同的通讯软件和输入流都有其专用的适配器。

2. 网关服务器
作为任务/会话协调器的网关服务器接收你的消息,并将其传递到正确的会话。这是Clawd的核心。它处理多个重叠的请求。

为了序列化操作,Clawd使用了一个基于通道的命令队列。一个会话拥有其专属的通道,而低风险、可并行化的任务可以在并行通道中运行(例如定时任务)。

这与使用异步/等待的混乱代码形成对比。过度并行化会损害可靠性,并引发一大堆调试问题。

默认采用串行,显式地选择并行

如果你从事过智能体开发,可能已经在某种程度上意识到了这一点。这也是Cognition公司的博文《不要构建多智能体》中的核心见解。
为每个智能体设置简单的异步架构,最终会让你得到一堆交错混乱的垃圾数据。日志将难以阅读,如果它们共享状态,竞态条件将成为你在开发过程中必须时刻警惕的常驻恐惧。
“通道”是对队列的一种抽象,其默认架构就是序列化,而非事后补救。作为开发者,你只需手动编写代码,队列会为你处理竞态条件。
这种思维模式从“我需要锁定什么?”转变为“什么是可以安全并行化的?”

3. 代理运行器
这才是真正的AI发挥作用的地方。它决定使用哪个模型,选择API密钥(如果都无效,则将对应的配置标记为冷却状态并尝试下一个),并在主模型失败时回退到其他模型。

代理运行器动态地组装系统提示,包含可用的工具、技能、记忆,然后添加上下文历史记录(来自一个.jsonl文件)。

接下来,它会将提示传递给上下文窗口守卫,确保有足够的上下文空间。如果上下文几乎已满,它要么压缩会话(总结上下文),要么优雅地失败。

4. LLM API 调用
LLM调用本身会流式传输响应,并对不同的提供商进行抽象封装。如果模型支持,它还可以请求进行扩展思考。

5. 代理循环
如果LLM返回一个工具调用的响应,Clawd会在本地执行它,并将结果添加到对话中。这个过程会不断重复,直到LLM返回最终文本或达到最大轮次限制(默认为约20轮)。

这也是魔法发生的地方:

计算机使用

这一点我稍后会详细说明。

6. 响应路径
这部分相当标准。响应通过原通道返回给你。会话也会通过一个基础的jsonl文件持久化保存,其中每一行都是一个JSON对象,记录了用户消息、工具调用、结果、响应等内容。这就是Clawd记忆的方式(基于会话的记忆)。

以上就是基本架构。现在,让我们深入了解一些更关键的组件。

Clawd如何记忆
没有一个合适的记忆系统,AI助手就跟金鱼没什么两样。Clawd通过两个系统来处理记忆:

  • 如上所述的JSONL格式的会话记录

  • 位于MEMORY[.]md文件或memory/文件夹中的Markdown格式的记忆文件

对于搜索,它采用了向量搜索和关键词匹配的混合方式。这结合了两者的优点。
因此,搜索“authentication bug”(认证错误)既能找到提及“auth issues”(权限问题)的文档(语义匹配),也能找到包含完全匹配短语的文档(关键词匹配)。
向量搜索使用SQLite,关键词搜索使用同样是SQLite扩展的FTS5。嵌入的提供者是可配置的。
它还受益于智能同步功能,该功能在文件监视器检测到文件更改时触发。
这些Markdown文件是由智能体自身使用一个标准的“写入”文件工具生成的。并没有特殊的记忆写入API。智能体只是简单地写入memory/*.md文件。
当一个新的对话开始时,一个钩子会抓取之前的对话,并用Markdown格式写一个摘要。

Clawd的记忆系统出奇地简单,与我们在@CamelAIOrg中实现的工作流记忆非常相似。没有记忆合并,没有每月/每周的记忆压缩。
这种简单性可能是一个优势,也可能是一个缺陷,取决于你的视角,但我个人总是更倾向于可解释的简洁,而非复杂的意大利面条式代码。
记忆会永久保存,旧的记忆基本上拥有同等的权重,因此我们可以说它没有遗忘曲线。

Clawd的“爪子”:它如何使用你的计算机
这是Clawd的护城河之一:你给它一台计算机,让它使用。那么它是如何使用的呢?基本上和你想象的一样。
Clawd赋予智能体对计算机的重大访问权限,但这需要你自担风险。它使用一个执行工具来运行shell命令,可以在以下环境:

  • 沙盒:默认选项,命令在Docker容器中运行。

  • 直接在宿主机上运行。

  • 远程设备上运行。

除此之外,Clawd还拥有文件系统工具(读、写、编辑),
基于Playwright的浏览器工具(附带语义快照功能),
以及用于管理后台长期命令、终止进程等的进程管理工具

安全性(或其缺失?)
与Claude Code类似,这里有一个允许列表,用于管理用户希望批准的命令(允许一次、总是允许、向用户发送拒绝提示)。

// ~/.clawdbot/exec-approvals.json
{
  "agents": {
    "main": {
      "allowlist": [
        { "pattern": "/usr/bin/npm", "lastUsedAt": 1706644800 },
        { "pattern": "/opt/homebrew/bin/git", "lastUsedAt": 1706644900 }
      ]
    }
  }
}

安全命令(如 jqgrepcutsortuniqheadtailtrwc)已预先获得批准。

危险的shell结构默认会被阻止。

# these get rejected before execution:
npm install $(cat /etc/passwd)     # command substitution
cat file > /etc/hosts              # redirection
rm -rf / || echo "failed"          # chained with ||
(sudo rm -rf /)                    # subshell

其安全设计与Claude Code非常相似。
核心理念是提供用户所允许的最大限度的自主性

浏览器:语义快照
浏览器工具主要并非使用屏幕截图,而是使用语义快照,即基于文本的页面可访问性树表示。

因此,智能体会看到类似这样的内容:

- button "Sign In" [ref=1]
- 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,其对应的 Token 成本也只是图像的一小部分。

原文:https://x.com/Hesamation/status/2017038553058857413[1]

Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐