By 小墨
2026年4月24日
75
525
800行代码实现OpenClaw的Tool、消息总线、子Agent管理架构
在Agent系统开发中,如何平衡抽象层次与工程确定性是一个核心命题。当业界普遍依赖LangChain等框架时,一个有趣的设计思路是采用薄抽象、显式控制流的方式,直接面向API构建系统。本文将详细介绍一个基于Anthropic Claude API的轻量级Agent框架实现,展示如何在800行代码内构建Tool系统、消息总线和子Agent管理三大核心模块。
概述
MessageBus处理入站方向的消息流,实现从子系统或外部到主Agent的消息传递。其核心是订阅-发布模式,InboundMessage包含channel(消息通道)、senderId(发送者标识)、chatId(关联会话)和content(消息内容)四个字段。 MessageBus提供了两种消费模式:subscribe注册实时回调,适合常驻服务场景;drain从队列中取出并清空消息,适合轮询式的同步消费场景。路由规则清晰:有订阅者走回调,无订阅者入队列。消息只走一条路径,不会同时触发回调和入队。这种设计避免了消息处理的歧义性。 需要明确的是,MessageTool负责出站(Agent→外部),MessageBus负责入站(外部→Agent),两者方向相反,没有直接的代码耦合。这种解耦设计使得消息流清晰可追踪。
消息总线:入站消息的统一枢纽
整个系统存在两条数据流主线: 同步路径:用户输入→REPL→agent.run()→工具调用→结果回传模型→最终回复→stdout。这是标准的ReAct循环。 异步路径:SpawnTool/CronService→bus.publish(system)→handler入队→tryDrainPending()→agent.run()处理系统通知→stdout。异步结果通过MessageBus汇入主循环,由互斥锁保证不与同步路径冲突。 这种设计使得同步和异步操作能够有序共存,不会产生状态混乱。切换接入层(从REPL到Bot)时,只需替换sendCallback和输入源,工具系统和Agent逻辑无需任何改动。
中间层越薄,调试越容易,对API行为的控制越精确。
“设计原则”模块协作与数据流
REPL(Read-Eval-Print Loop)是整个Agent的终端交互入口。核心挑战在于:用户输入和子Agent回传结果都可能触发agent.run(),但history数组是共享的,不能并发修改。 解决方案是布尔互斥锁配合暂存队列。processing标志充当互斥锁,确保同一时刻只有一个agent.run()执行。子Agent结果到达时先push到pendingSubagentResults数组,tryDrainPending只在非processing状态下进入,避免并发写入history。用户交互完成后,在释放锁之前调用drainPendingResults处理积攒的子Agent结果,保证结果不会无限滞后。 启动流程按以下顺序初始化:创建Anthropic客户端和MessageBus实例→注册工具到ToolRegistry(区分主Agent和子Agent工具集)→初始化CronService→创建SubagentManager→构建ContextBuilder→创建AgentLoop并启动交互循环。
设计哲学与局限
这个框架的核心设计哲学可以概括为四个要点:薄抽象层带来的调试优势、显式控制流带来的可追踪性、零框架依赖带来的完全控制力、以及贴近SDK设计带来的类型安全。 当然,设计也存在局限:子Agent无持久记忆,不适合需要跨任务积累上下文的场景;CronService的cron表达式是近似实现,不支持精确时间点语义;MessageBus无持久化,进程重启后消息丢失;ExecTool的正则黑名单只是最低防线,生产环境应该使用容器沙箱;REPL的布尔锁在多用户场景下需要更完整的队列机制。 这些取舍反映了「先跑起来,再逐步完善」的工程思路。框架的可扩展性已经预留好了空间:扩展新工具只需继承Tool并注册,切换接入层只需替换回调,输入源的变化不会影响核心逻辑。
如有侵权,请联系删除。
Related Articles
-
Fri Jul 24 2026原生工具调用、多模态Agent与开源模型:Foundation Model 2.0论坛直面Agent时代的模型演进
Foundation Model 2.0论坛聚焦在Agent时代模型的演进,讨论如何通过原生工具调用与多模态融合提升Agent的执行能力与适应性,并探讨端侧小模型的可行路径。
-
Mon Jul 06 2026示例域名与文档用途说明
example.com 是一个专门为文档示例而保留的顶级域名,供教程、示范和测试文档使用,不需要额外许可即可引用。
-
Mon Jul 06 2026未知文章标题
未提供文章内容或可抓取的 URL,因此无法提取实际引言或第一段。此处为占位文本,提示用户补充源内容以生成完整的 Frontmatter。
-
Sun Jul 05 2026未知来源文章
未提供可爬取的文章 URL 或内容,系统无法获取实际正文。此处为占位引言,说明输入数据缺失并提供元数据占位以便后续替换。
-
Sun Jul 05 2026无法生成:缺少文章源数据
未提供可用于爬取的文章 URL 或 JSON 数据,因此无法依据页面内容生成完整的 Frontmatter。请提供包含文章信息的 JSON 数组或一组有效 URL。
-
Sun Jul 05 2026未提供的文章标题
未提供文章内容。请提交文章的 URL 或粘贴全文,以便根据内容生成前言与分段信息。
-
Sat Jul 04 2026未提供文章链接或内容
未提供文章内容或链接,无法提取引言或第一段。请提交包含文章 URL 的 JSON 数组或直接提供文章文本。
-
Sat Jul 04 2026未提供文章信息
未收到文章内容或可爬取的 URL,因此无法生成文章段落。请提交包含文章 URL 的 JSON 数组,格式示例:[ {"url": "https://example.com/article1"}, {"
-
Sat Jul 04 2026未提供文章来源
未收到可用的文章内容或链接,因此无法提取段落。请提交包含多篇文章信息的 JSON 数组或每篇文章的 URL,以便爬取并生成完整的 postDetails 内容。
-
Fri Jul 03 2026示例文章标题(缺少来源)
未收到具体文章 URL 或内容,因此无法从原文中提取引言。此处为占位引言,说明系统需要源页面以抓取实际内容并生成结构化的 Astro Markdown YAML Frontmatter。
-
Thu Jul 02 2026聚焦自进化、Harness等Agent最火的九个方向,年度AI智能体大会7月开幕
中国AI智能体大会(AgenticAICon 2026)将于7月在杭州举办,围绕智能体领域的前沿技术展开,旨在推动研究与产业深度融合,探寻智能体从对话式工具向主动执行系统转型的路线图。
-
Wed Jul 01 2026探索 Astro.js 与 YAML:构建可维护的内容管理工作流
在现代静态站点与内容驱动的项目中,统一且可验证的元数据格式对内容维护和自动化发布至关重要。Astro.js 提供了灵活的内容渲染能力,而采用严格的 YAML Frontmatter 模板,可以让团队共
-
Tue Jun 30 2026首届光谷智能体经济大会举行 光谷从“AI试验场”迈向“AI价值场”
2026年6月29日,武汉东湖新技术开发区举办首届光谷智能体经济大会,正式发布“光谷智能体引力计划”。大会提出未来三年将在政策、算力、基金等方面投入超10亿元,旨在打造以智能体为核心的创新生态,培养智
-
Tue Jun 30 2026中国广电联合会《全国交通传媒行业AI应用调研报告》正式发布
中国广电联合会交通宣传委员会在内蒙古发布了《2026全国交通传媒行业AI应用调研报告》,基于对145家交通传媒机构的调查,总结了行业在AI应用上的现状与发展路径。
-
Tue Jun 30 2026韩国万亿'芯'基建拆解:存储行业能否建成AI时代'油田'
韩国近期公布了总投资逾1800万亿韩元的三大超级AI基建项目,涵盖半导体制造、先进封装与AI数据中心,目标是借助国家级投入与龙头企业布局,打造面向AI时代的关键产业能力。
-
Mon Jun 29 2026能量岛企业家俱乐部6.28 芯谷 AI 沙龙圆满落幕
6月28日,能量岛企业家俱乐部在苏州芯谷产业园举办AI智能体应用沙龙,活动以实战分享和产业交流为核心,吸引了本地创业者、企业高管与科研人员参与。
-
Mon Jun 29 20262026.06.20:AI 泡沫退潮,Agent 与数据架构重构产业底层
InfoQ 的周度深度分析指出,生成式 AI 已走完狂热期,行业正进入理性调整阶段,专家纷纷回归技术和落地路径的讨论。
-
Mon Jun 29 2026OKF——要做AI时代的'知识图谱通用语'—继MCP之后,Google又扔出一张Agent王牌
2026年6月,谷歌云发布了Open Knowledge Format(OKF)v0.1,这是一套以带YAML前置元数据的Markdown文件夹为单位来表示知识的开放规范,旨在解决企业知识分散的问题。
