如何通过Nanobot源码学习OpenClaw架构中的SubAgent?

摘要:【OpenClaw】通过 Nanobot 源码学习架构 (4)SubAgent 目录【OpenClaw】通过 Nanobot 源码学习架构 (4)SubAgent0x00 概要0x01 基础背景1.1 原理:为什么需要 SubAgent?1
【OpenClaw】通过 Nanobot 源码学习架构 ---(4)SubAgent 目录【OpenClaw】通过 Nanobot 源码学习架构 ---(4)SubAgent0x00 概要0x01 基础背景1.1 原理:为什么需要 SubAgent?1.2 架构拓扑的演进1.3 领域隔离1.4 工作场景:Skills vs SubAgent,如何选择?1.5 工作流:主从协作的典型模式0x02 Nanobot SubAgent 功能2.1 SubAgent 与主 Agent 的区别2.1.1 设计目的2.1.2 Subagent 优势2.2 SubagentManager 类2.2.1 初始化参数2.2.2 内部状态管理2.3 创建子代理流程2.3.1 spawn() 方法详解2.3.2 子代理创建步骤2.4 子代理执行逻辑2.4.1. 构建子代理专用工具集2.4.2. 构建子代理专用提示2.4.3. 运行 Agent 循环(限制迭代次数)2.4.4. 处理工具调用2.4.5. 处理完成条件2.4.6. 处理未完成情况2.4.7. 通知结果2.4.8. 错误处理2.5 结果通知机制2.5.1 通知内容构建2.5.2 注入消息总线2.6 会话级取消机制2.7 状态查询方法0x03 Subagent 与 Main Agent 的关系分析3.1 相同的组件3.1.1 LLM Provider 完全共享3.1.2 MessageBus 共享3.1.3 Workspace 路径相同3.1.4 配置参数3.2 不同的组件3.2.1 工具集(ToolRegistry)完全不同且受限3.2.2 System Prompt 完全不同3.2.3 消息历史完全隔离3.2.4 最大迭代次数不同3.2.5 结果处理方式不同3.2.6 会话管理方式不同3.3 创建流程对比3.3.1 Main Agent 创建(在 gateway()):3.3.2 Subagent 创建(在 SubagentManager.spawn()):0xFF 参考 0x00 概要 OpenClaw 应该有40万行代码,阅读理解起来难度过大,因此,本系列通过Nanobot来学习 OpenClaw 的特色。 Nanobot是由香港大学数据科学实验室(HKUDS)开源的超轻量级个人 AI 助手框架,定位为"Ultra-Lightweight OpenClaw"。非常适合学习Agent架构。 nanobot 的 Subagent 实现是一个简洁但强大的后台任务执行机制。通过复用主 Agent 的 LLM provider 但限制工具集和迭代次数,实现了任务隔离和资源控制。消息总线机制确保子代理结果能够顺利通知主 Agent,最终传达给用户。这种设计使得主 Agent 可以保持专注的对话交互,同时将复杂任务委派给后台子代理执行。 Parent agent Subagent +------------------+ +------------------+ | messages=[...] | | messages=[] | <-- fresh | | dispatch | | | tool: task | ----------> | while tool_use: | | prompt="..." | | call tools | | | summary | append results | | result = "..." | <---------- | return last text | +------------------+ +------------------+ Parent context stays clean. Subagent context is discarded. 注:本系列借鉴的文章过多,可能在参考文献中有遗漏的文章,如果有,还请大家指出。 0x01 基础背景 SubAgent(子智能体)是从现有 Agent 运行中生成的后台独立运行实例。它们在独立的会话中执行任务,完成后将结果自动通告回请求者的聊天渠道。 1.1 原理:为什么需要 SubAgent? 表面上看,SubAgent 解决的是「并行执行」问题——多个任务同时推进,提升效率。
阅读全文