AI AgentOPEN CLAW
800 行代码实现 Open Claw 的 Tool、消息总线、子 Agent 管理架构
大淘宝技术介绍了用约800行TypeScript实现Open Claw轻量级单进程Agent框架的Tool、消息总线、子Agent管理和REPL主循环设计。
BestBlogs · Agent 关键词45 分钟阅读中文
阅读原文TL;DR: 大淘宝技术介绍了用约800行TypeScript实现Open Claw轻量级单进程Agent框架的Tool、消息总线、子Agent管理和REPL主循环设计。
以下为 BestBlogs · Agent 关键词 原文(中文)
📌 一句话摘要
本文详细介绍了基于 Anthropic Claude API、用 TypeScript 编写的轻量级单进程 Agent 框架 Open Claw 的核心架构,重点阐述了 Tool 系统、消息总线、子 Agent 管理和 REPL 主循环四个模块的设计与实现。
📝 详细摘要
本文来自大淘宝技术团队,记录了对开源 Agent 框架 Open Claw 的研究与最小可运行实现。文章核心观点是:对于 Tool 调用、消息分发、子 Agent 管理这三类 Agent 系统的核心组件,优先采用薄抽象、显式控制流和贴近模型 API 的实现方式,比引入多层中间件更容易获得工程上的确定性。文章详细介绍了四个核心模块:Tool 抽象与 ToolRegistry(统一的工具注册和调用接口,通过 exclude() 实现能力隔离)、MessageBus 入站消息总线(支持 subscribe 实时回调和 drain 轮询两种消费模式)、SubagentManager 子 Agent 管理(基于 Promise 的并发模型,独立 ReAct 循环,通过 MessageBus 回传结果)、以及 REPL 主循环(互斥锁 + 暂存队列保证 history 一致性)。文章还坦诚讨论了设计中的有意取舍与局限,如零框架依赖、schema 定义方式、子 Agent 无持久记忆、CronService 精度妥协、ExecTool 安全边界等。
💡 主要观点
Agent 系统核心组件应采用薄抽象和显式控制流,而非多层中间件。
对于 Tool 调用、消息分发、子 Agent 管理,贴近模型 API 的实现方式能获得更好的工程确定性,系统边界更清晰,运行路径更容易追踪,问题更容易定位。
Tool 系统通过抽象类 + Registry 模式实现统一注册和调用,exclude() 方法实现能力隔离。
Tool 由 name、description、input_schema、execute 四要素组成,ToolRegistry 管理所有工具。exclude() 方法为子 Agent 生成受限工具集,防止递归创建子 Agent 或直接向用户发消息。
MessageBus 作为入站消息总线,支持 subscribe 实时回调和 drain 轮询两种消费模式。
消息路由规则简单:有订阅者走回调,无订阅者入队列。MessageTool 负责出站(Agent → 外部),MessageBus 负责入站(外部/子系统 → Agent),方向明确,互不耦合。
子 Agent 采用 Promise 并发模型,共享事件循环,无持久记忆,适合一次性并行任务。
每个子 Agent 拥有独立的 AgentLoop 实例,每次 spawn 从零开始,处理完一个任务就结束。通过 MessageBus 的 system channel 回传结果,由主 Agent 总结后输出给用户。
REPL 主循环通过布尔互斥锁 + 暂存队列解决并发写入 history 的问题。
processing 标志充当互斥锁,同一时刻只有一个 agent.run() 在执行。子 Agent 结果先入暂存队列,在用户交互完成后统一处理,保证 history 的一致性。
💬 文章金句
中间层越薄,调试越容易,对 API 行为的控制越精确。
对于 Tool 调用、消息分发、子 Agent 管理这三类 Agent 系统里的核心组件,优先采用薄抽象、显式控制流和贴近模型 API 的实现方式,往往比引入多层中间件更容易获得工程上的确定性。 正则黑名单是最低限度的防线,不能替代沙箱隔离。 保留首尾而非只取前 N 字符,是因为命令输出的末尾通常包含最有价值的信息(错误信息、统计摘要等)。 强制唯一匹配:出现 0 次报错,超过 1 次拒绝写入并要求提供更精确的文本片段。
📊 文章信息
AI 初评:91
来源:大淘宝技术
作者:大淘宝技术
分类:人工智能
语言:中文
阅读时间:20 分钟
字数:4936
标签:
Agent 框架, Tool 系统, 消息总线, 子 Agent, Anthropic Claude
阅读完整文章