如何将OpenClaw外层控制逻辑为?
摘要:【OpenClaw】通过Nanobot源码学习架构 (2)外层控制逻辑 目录【OpenClaw】通过Nanobot源码学习架构 (2)外层控制逻辑0x00 概要0x01 Commands1.1 逻辑意义1.1.1 Commands vs A
【OpenClaw】通过Nanobot源码学习架构---(2)外层控制逻辑
目录【OpenClaw】通过Nanobot源码学习架构---(2)外层控制逻辑0x00 概要0x01 Commands1.1 逻辑意义1.1.1 Commands vs Agent1.1.2 Commands 运行场景1.2 Typer 库1.3 主要命令1.3.1 系统设置命令1.3.2 服务启动命令1.3.3 直接交互命令处理逻辑与Gateway模式的区别1.3.4 通信渠道管理命令1.3.5 通道登录命令1.3.6 定时任务管理命令1.3.7 添加命令1.3.8 删除命令1.3.9 启用/或禁用命令1.3.10 手动执行命令1.3.11 状态查询命令1.3.12 OAuth 认证命令0x02 Gateway2.1 核心作用2.1.1 整体作用2.1.2 核心特色2.2 图例async run() 服务启动顺序gateway() 内部组件依赖关系2.3 代码0x03 Channel3.1 需求3.2 OpenClaw3.3 基类3.4 QQChannel3.4.1 架构设计与 MessageBus 交互与 AgentLoop 交互与 SessionManager 交互生命周期管理3.4.2 消息交互机制消息通道启动流程消息接收流程消息处理流程响应发送流程特殊处理3.4.3 QQChannel 核心模块逻辑关系图3.4.4 QQChannel 核心流程流程图3.4.5 代码0xFF 参考
0x00 概要
OpenClaw 应该有40万行代码,阅读理解起来难度过大,因此,本系列通过Nanobot来学习 OpenClaw 的特色。
Nanobot是由香港大学数据科学实验室(HKUDS)开源的超轻量级个人 AI 助手框架,定位为"Ultra-Lightweight OpenClaw"。非常适合学习Agent架构。
在 Nanobot 中,如下几个主要组件担任了外层控制架构,各组件职责为:
Commands(commands.py):
nanobot 应用程序的统一命令行入口
Commands 调用 Agent 完成具体工作
Commands 是手动触发器。可以将 Command 想象成手动变速箱,何时换挡由用户掌控。
Gateway:
是 commands.py 中的一部分,由 Command 启动
系统入口,也是长生命周期控制平面,协调各组件启动和运行
启动MessageBus、AgentLoop、ChannelManager
协调 CronService 和 HeartbeatService
Channel(如QQchannel):
是 ingress/egress 适配层
接收外部消息
将消息发布到.MessageBus
发送响应消息回外部平台
MessageBus:
解耦 Channel 和 AgentLoop
提供异步消息队列机制
我们本篇来分析这几个组件(MessageBus不做单独介绍,而是穿插在其它组件中)。
注:本系列借鉴的文章过多,可能在参考文献中有遗漏的文章,如果有,还请大家指出。
0x01 Commands
commands.py 是 nanobot 应用程序的统一命令行入口,它定义了所有可用的命令行命令和选项,使用户可以通过终端与 nanobot 进行交互,它集成了以下核心功能:
系统初始化:配置和工作区设置
服务管理:启动和管理整个 nanobot 系统
用户交互:提供直观的命令行和交互式界面
资源管理:定时任务、通信渠道和提供商管理
状态监控:系统健康状况检查
1.1 逻辑意义
Command 是用户通过输入 /command-name 手动触发的指令。
1.1.1 Commands vs Agent
Commands 和 Agent 是系统中的不同角色,总体来说,Commands 实质上是“触发器”,决定某件事“何时(手动)”运行。Agents 则是拥有独立上下文和工具的“执行者”,决定了“做”什么。
Commands = 手动触发(由用户决定何时执行),即刻显式运行Agents;
Agents = 执行者(真正干活的),完成具体工作。Agents 是具备独立上下文、工具和指令的专业执行者。但是,Agent 不会自行启动,需要由 Command、Skill 或 LLM 根据需求来调用。
1.1.2 Commands 运行场景
使用 Command 的场景为:
任务简单,且不需要隔离上下文。
用户希望对多步骤工作流保有手动控制权。
这个操作会产生某些后果,而用户希望在这些后果发生之前,先由用户自己确认。
