Day 5 | OpenClaw 多 Agent 路由:一个 Gateway 托管多个 AI 大脑

Day 5 | OpenClaw 多 Agent 路由:一个 Gateway 托管多个 AI 大脑

Day 5 | OpenClaw 多 Agent 路由:一个 Gateway 托管多个 AI 大脑

系列:《从 0 到 1 拆解 AI Agent 框架:OpenClaw 技术深度解析》

前言

想象一个场景:你有一个个人助手 Agent,同时你还部署了一个专门处理代码审查的 Agent,以及一个管理家庭自动化的 Agent。它们需要接入同一个 Telegram 账号,但各自有独立的"大脑"和记忆。

这就是 多 Agent 路由 要解决的问题:一个 Gateway,多个 AI 大脑,消息如何精准投递?

路由看起来简单,但实现起来有不少细节:怎么区分消息属于哪个 Agent?跨 Agent 的消息怎么传递?不同 Agent 如何共享同一个渠道账号却互不干扰?本文将逐一拆解。


一、架构概览:Gateway 与 Agent 的关系

先明确核心概念。

1.1 Gateway vs Agent

在 OpenClaw 中:

  • Gateway 是消息的"交换机"——它负责接收来自各渠道(Telegram/Discord/WhatsApp…)的消息,并将其路由到正确的 Agent。它不做 AI 推理,只做路由。
  • Agent 是消息的"处理器"——每个 Agent 有自己的配置(使用什么模型、什么系统提示词、什么工具),负责接收消息、调用 LLM、返回回复。
Telegram ─┐ Discord ──┤ Gateway ──┬── Agent A (个人助手) WhatsApp ─┘ ├── Agent B (代码审查) └── Agent C (家庭自动化) 

1.2 一对多 vs 多对多

最简单的部署是一个 Gateway + 一个 Agent,这是大多数人的起点。

但 OpenClaw 支持更复杂的拓扑:

  • 一个 Gateway + 多个 Agent:共享渠道账号,按规则分发消息
  • 多个 Gateway + 多个 Agent:完全隔离的部署,适合多用户场景

本文聚焦最有意思的场景:一个 Gateway,多个 Agent


二、Binding:路由规则的核心

消息从 Telegram 进来,Gateway 怎么知道该交给哪个 Agent?答案是 Binding(绑定)

2.1 什么是 Binding?

Binding 是一条路由规则,定义了:

“来自渠道 X、用户 Y 的消息,交给 Agent Z 处理”

配置示例:

agents:-id: personal-assistant bindings:-channel: telegram userId:"123456789"# 我自己的 Telegram ID-id: code-reviewer bindings:-channel: discord guildId:"my-work-server"channelId:"code-review"-id: home-automation bindings:-channel: telegram userId:"987654321"# 家里另一个账号

2.2 Binding 的匹配优先级

当一条消息可能匹配多个 Binding 时(比如同一个用户在不同场景),需要有清晰的优先级规则:

精确匹配 > 通配匹配 > 默认 Agent 

具体来说:

  • userId + channelId 都匹配 → 优先级最高
  • 只有 guildId 匹配 → 次之
  • 没有任何精确匹配 → 走默认 Agent(如果配置了的话)

2.3 动态 Binding vs 静态 Binding

除了配置文件里的静态 Binding,OpenClaw 还支持运行时动态创建 Binding

典型场景:用户发 /start 命令,Gateway 动态创建一个新 Session 并绑定到指定 Agent:

// 用户发送 /start code-review// Gateway 解析命令,动态创建 Bindingawait bindingManager.create({  agentId:'code-reviewer', channel:'telegram', userId: message.userId, sessionKey:`code-reviewer:telegram:

Read more

双剑破天门:攻防世界Web题解之独孤九剑心法(八)

双剑破天门:攻防世界Web题解之独孤九剑心法(八)

免责声明:用户因使用公众号内容而产生的任何行为和后果,由用户自行承担责任。本公众号不承担因用户误解、不当使用等导致的法律责任 **本文以攻防世界部分题为例进行演示,后续会对攻防世界大部分的web题目进行演示,如果你感兴趣请关注** 目录 一:WEB 2 二:Web_php_unserialize 三:php_rce 四:web_php_include 五:总结 1. WEB 2 2. Web_php_unserialize 3. php_rce 4. web_php_include 一:WEB 2 打开是一个php代码 代码审计 1.首先给了一段密文也就是需要解密的flag 2.然后对传进来的str进行字符串反转($_o) 3.

【TRAE】AI 编程:颠覆全栈开发,基于 TRAE AI 编程完成 Vue 3 + Node.js + MySQL 企业级项目实战,从环境搭建到部署上线

【TRAE】AI 编程:颠覆全栈开发,基于 TRAE AI 编程完成 Vue 3 + Node.js + MySQL 企业级项目实战,从环境搭建到部署上线

目录 一、TRAE 三大智能体简介 (1)三大智能体核心区别 (2)三大智能体适用场景 ① @Chat 智能体:“结对编程”伙伴 ② @Builder 智能体:你的“原型加速器” ③ @Builder with MCP:你的“全栈交付引擎” (3)实战场景流程示例:构建一个 “用户管理中心” 二、@Builder with MCP 智能体(全栈应用) (1)核心能力 ① 外部系统连接与操作 ② 全栈应用架构设计 ③ 真实数据生命周期管理 ④ 生产就绪配置与部署 (2)高效使用 @Builder with MCP 的黄金法则 ① 法则一:始于终——蓝图描绘法则 ② 法则二:契约先行——接口驱动法则 ③ 法则三:

H.265 (HEVC) 网页播放:WebAssembly + FFmpeg 实现浏览器端的硬解/软解兼容方案

H.265 (HEVC) 网页播放:WebAssembly + FFmpeg 实现浏览器端的硬解/软解兼容方案

标签: #WebAssembly #FFmpeg #H.265 #WebCodecs #音视频开发 #前端性能 📉 前言:浏览器对 H.265 的“爱恨情仇” 为什么 <video src="video.h265.mp4"> 在 Chrome 里放不出来? 因为 H.265 的专利池太深了。只有 Safari (即使是 iOS) 和 Edge (需硬件支持) 原生支持较好。 我们的目标是构建一套混合解码方案: 1. 优先硬解 (WebCodecs):如果浏览器支持硬件加速(如 Chrome 94+ 的 WebCodecs),直接调用

前端状态管理:别让你的状态变成一团乱麻

前端状态管理:别让你的状态变成一团乱麻 毒舌时刻 这状态管理得跟蜘蛛网似的,谁能理得清? 各位前端同行,咱们今天聊聊前端状态管理。别告诉我你还在使用 setState 管理所有状态,那感觉就像在没有地图的情况下寻宝——能找,但累死你。 为什么你需要状态管理 最近看到一个项目,组件之间传递状态需要经过 5 层,修改一个状态要修改多个地方。我就想问:你是在做状态管理还是在做传递游戏? 反面教材 // 反面教材:混乱的状态管理 function App() { const [user, setUser] = useState(null); const [posts, setPosts] = useState([]); const [comments, setComments] = useState([]); const [loading, setLoading] = useState(true); useEffect(() => { async function fetchData() { setLoading(