当我们讨论 AI 助手时,市面上的主流产品遵循着几乎相同的范式:用户消息被发送至云端服务器,经过处理后返回响应。这种模式让用户成为他人基础设施中的租户,受制于速率限制、隐私政策和可用性承诺。OpenClaw 则彻底颠覆了这一模型 —— 它是一个本地优先的网关,运行在用户自己的机器上,连接消息账户并将对话路由到用户控制的 AI 代理。这不是周末的业余项目,其代码库涵盖四万余行 TypeScript 代码,通过插件系统支持二十九个消息通道,实现了通常只在分布式系统中才能见到的工程模式:车道隔离的并发控制、级联路由解析、跨通道身份链接,以及人机协作的执行审批机制。
车道隔离的并发模型
大多数异步系统使用单一的优先级队列,高优先级任务优先执行,低优先级任务排队等待。这种设计的问题在于:当大量中等优先级的任务涌入时,可能导致优先级较低的任务被无限期饿死。OpenClaw 采用了完全不同的方法 —— 将工作划分到独立的车道中,每个车道拥有自己的队列和并发限制,彼此之间互不干扰。
从实现层面来看,系统定义了四种核心车道。主车道处理主要的聊天工作流,cron 车道管理定时任务,子代理车道负责子代理的创建与销毁,嵌套车道处理嵌套的工具调用。每种车道维护着自己的队列长度、活跃任务数和最大并发数。当任务进入系统时,会根据其类型被路由到对应的车道排队。这种设计确保了即使 cron 任务出现突发的大量调度,也不会阻塞用户正在进行的实时对话,反之亦然。
车道调度器的核心逻辑看似简洁却极为优雅。 drain 函数持续从队列中取出任务,直到达到该车道的并发上限。每个任务完成后,递归调用 pump 函数检查是否可以继续处理下一个等待中的任务。这种自驱动的调度机制避免了外部轮询的开销,同时保证了资源利用的最大化。值得注意的是,每个车道都可以独立配置其并发上限,cron 任务默认限制为单线程执行以避免资源竞争,而主车道则可以根据用户的硬件配置动态调整。
通道插件系统的抽象设计
支持 WhatsApp、Telegram、Signal、Discord、Slack、iMessage、Matrix、Microsoft Teams、LINE、Nostr、Google Chat、Twitch、Mattermost 等众多平台,每个平台都有着截然不同的 API 规范、认证流程、消息格式和功能能力。OpenClaw 并未为每个平台构建笨重的处理器,而是定义了一套插件契约,将所有通道规范化为统一的接口。
这套插件契约由多个适配器组成,每个适配器对应一个特定的功能维度。配置适配器处理账户设置和凭证管理,设置适配器引导用户完成平台特定的初始化流程,安全适配器实施访问控制和隐私策略,出站适配器负责消息的发送和格式转换,流媒体适配器支持实时语音和视频消息,消息适配器处理常规的文本和富媒体交互。重要的是,每个适配器都是可选的 —— 通道只需要声明自己支持哪些功能即可。
当开发者需要添加新平台支持时,只需要实现插件 SDK 中定义的接口。SDK 导出一百多个类型和工具函数,包括用于规范化目标地址、解析账户和处理 onboarding 的通道特定辅助函数。这种模式使得通道成为了可插拔的组件,用户可以根据需要启用或禁用特定平台,而核心系统保持稳定不变。能力声明机制让系统能够在运行时动态了解每个通道的边界,避免在运行时因调用不支持的功能而崩溃。
级联路由与会话管理
当消息到达系统时,OpenClaw 必须决定由哪个代理来处理它。路由系统实现了一系列级联的匹配策略,每种策略都有明确的优先级顺序。最具体的匹配优先:如果存在针对特定发送者的绑定,则使用该绑定;如果没有,则检查 Discord 服务器级别的绑定;继续向上匹配团队级别的绑定、账户级别的绑定,最后回退到通道范围的默认代理。
这种级联设计的精妙之处在于,它允许用户在不同粒度上定制代理行为。用户可以为特定联系人配置专属的代理,为某个 Discord 服务器配置另一个代理,为整个账户配置一个默认代理,而为所有其他情况保留另一个后备代理。匹配算法严格按照优先级顺序执行,一旦找到匹配的绑定就立即停止搜索,避免了不必要的计算开销。
会话连续性通过结构化的会话键来管理。这些键由代理标识、通道名称、对话类型、对端标识和身份链接映射组合而成。身份链接功能尤为强大 —— 它允许将同一个人的不同通道账户关联在一起。例如,用户的配置可以声明某个身份同时关联了 WhatsApp 号码、电报用户名和 Signal 号码。当这个人通过任意一个渠道发送消息时,系统能够识别出这是同一个人,并在所有关联的会话之间共享上下文。
网关与执行审批机制
OpenClaw 的网关服务器通过 WebSocket 暴露了八十余个 RPC 方法,覆盖了健康检查、配置管理、执行审批、会话管理、代理操作、定时任务、模型列表、语音合成、消息发送等几乎所有运行时功能。这些方法构成了个人基础设施的 API 表面 —— 移动应用、桌面客户端和命令行工具都使用相同的协议与网关通信。
网关维护着所有活动的通道连接,执行定时任务,管理审批工作流,并在多个设备之间协调。这种设计使得用户可以从手机发送命令,让家里的台式机执行操作,所有状态通过本地网络实时同步。网关还支持通过 Tailscale 或 mDNS 暴露服务,让用户在没有公网 IP 的情况下也能远程访问自己的 AI 基础设施。
执行审批机制是 OpenClaw 安全模型的核心。当 AI 代理试图执行 Shell 命令或修改文件时,系统会拦截这些危险操作并将其置于人工审批队列中。审批请求会通过推送通知发送到所有连接的移动设备,附带完整的操作上下文。用户可以选择批准、拒绝或设置超时自动拒绝。这种设计体现了 OpenClaw 的核心理念:AI 负责执行工作,但人类保留对后果的最终控制权。
跨平台媒体处理的工程细节
每个消息平台对媒体文件都有不同的限制和格式要求。WhatsApp 限制为十六兆字节,Telegram 允许五十兆字节,而各平台支持的图片格式、压缩算法和元数据处理方式也各不相同。OpenClaw 的媒体存储模块在 src/media/store.ts 中实现了一套归一化策略来处理这些差异。
文件名清理函数是跨平台兼容性的一个典型例子。它移除了在 Windows、macOS、Linux 和各种云存储服务中不安全的字符,将连续空格替换为下划线,并限制总长度不超过六十个字符。临时文件使用 UUID 嵌入模式命名,格式为 {原始文件名}---{UUID}.{扩展名},既保证了文件名的唯一性,又能在调试时追溯原始文件名。媒体存储还实现了自动垃圾回收机制,默认情况下会在两分钟后清理过期的临时文件。
设计哲学与实践考量
贯穿 OpenClaw 架构的是一套一致的设计哲学。本地优先并不意味着本地唯一 —— 数据默认存储在用户主目录下的 .clawdbot 目录中,但网关可以通过虚拟专用网络或本地发现协议在需要时暴露给远程访问。协议被视为插件 ——WhatsApp、Matrix、Nostr 在系统眼中都是 ChannelPlugin 接口的不同实现,网关不会对任何平台有所偏袒。隔离通过构造来实现 —— 车道防止工作类别之间相互干扰,会话键防止对话内容泄露,审批机制防止代理擅自行动。
对于构建 AI 助手系统的开发者而言,OpenClaw 提供了一种区别于云端租户模式的替代方案。这套架构将控制权交还给用户,同时其工程严谨性确保了这些约束条件能够得到认真的对待和执行。
参考资料
- OpenClaw GitHub 仓库:https://github.com/openclaw/openclaw
- 《Building Clawdbot: Engineering Personal AI Infrastructure》:https://www.mmntm.net/articles/building-clawdbot