多 Agent 消息路由设计方法详解(详解 OpenClaw 路由匹配优先级与配置)

一个网关跑多个 Agent 时,路由必须做成确定性的:用声明式绑定(bindings)描述「什么消息进哪个 Agent」,由宿主配置裁决,而不是让模型猜。OpenClaw 的实现可作参照:路由按最精确匹配优先,第一个命中的绑定生效,优先级从高到低为 peer > parentPeer > guildId+roles > guildId > teamId > accountId > channel > 默认 Agent。下文给出通用的路由设计方法、OpenClaw 的完整优先级规则与可直接复用的配置片段。

一、路由要解决的三类分流

分流维度 典型场景 匹配字段
按渠道 WhatsApp 日常闲聊、Telegram 深度工作各用不同 Agent channel
按账号 同一渠道接多个 Bot 账号,一号一 Agent channel + accountId
按对象 某个 VIP 用户或某个群单独指派专属 Agent channel + peer(kind + id)

设计原则只有一条:规则必须可预测。写规则的人要知道任何一条消息会落在哪个 Agent,排障时能按优先级逐层核对。

二、OpenClaw 的匹配优先级

OpenClaw 采用确定性路由,首个命中的绑定生效。完整优先级如下:

  1. peer:精确匹配用户或群组(kind + id),最高优先级,永远压过服务器级和渠道级规则;
  2. parentPeer:匹配父级上下文(如频道的父服务器);
  3. guildId + roles:Discord 服务器 + 角色组合;
  4. guildId:Discord 服务器级匹配;
  5. teamId:Slack 工作区级匹配;
  6. accountId:渠道账号级匹配;
  7. channel:渠道级,命中该渠道全部流量;
  8. default:兜底 Agent,取标记 default 的条目或列表第一项。

同一优先级内多条规则同时命中时,配置文件里的书写顺序决定胜负——写在前的赢。所以 peer 绑定要放在渠道级规则上面。

三、配置实战

3.1 多 Agent 多账号的基础绑定

{
  agents: {
    entries: {
      home: { default: true, name: "Home", workspace: "/.openclaw/workspace-home" },
      work:  { name: "Work",  workspace: "/.openclaw/workspace-work" }
    }
  },
  bindings: [
    // 精确匹配:这个群直接交给 work
    { agentId: "work", match: { channel: "whatsapp", accountId: "personal",
        peer: { kind: "group", id: "1203630...@g.us" } } },
    // 账号匹配:biz 号全部进 work
    { agentId: "work",  match: { channel: "whatsapp", accountId: "biz" } },
    // 渠道兜底:其余 WhatsApp 流量进 home
    { agentId: "home",  match: { channel: "whatsapp", accountId: "personal" } }
  ]
}

多个匹配字段是 AND 关系。{ channel: "discord", guildId: "123456", roles: ["admin"] } 表示只有该服务器内带 admin 角色的消息才命中。

3.2 渠道分流的常见模式

把 WhatsApp 路由给快速日常 Agent,Telegram 路由给高阶模型 Agent,是官方文档给出的典型用法:

bindings: [
  { agentId: "chat", match: { channel: "whatsapp", accountId: "" } },
  { agentId: "opus", match: { channel: "telegram", accountId: "" } }
]

accountId: "" 是留空技巧:后续加新账号时绑定依然生效。想让某条私聊单独走 opus,加一条 peer: { kind: "direct", id: "+15551234567" } 绑定并放在最前面即可。

四、落地路由的四步流程

  1. 盘点渠道与身份标识:收集每个渠道的 peer.id、guildId、teamId、accountId,没有标识就无法写精确规则;
  2. 从粗到细排规则:先写渠道级骨架,再补账号级,最后加 peer 特例,特例永远置顶;
  3. 每个 Agent 独立目录:agentDir 严禁复用,共享目录会造成认证配置冲突和会话数据损坏;
  4. 验证与排障:用 openclaw doctor 查配置合法性;发现「Agent 回错了」先核对优先级,再看同层规则的书写顺序。

两个易错点:Agent 间通信默认关闭,需要显式开启并配 allowlist(tools.agentToAgent: { enabled: true, allow: ["home", "work"] }),跨 Agent 记忆访问只读;广播场景(一条消息多个 Agent 都要看到)用 broadcast 配置的 parallel 策略,不要靠复制绑定硬凑。

常见问题(FAQ)

Q1:两条规则都命中时听谁的?

按优先级取最精确的;同层级则看配置顺序,写在前面的绑定生效。

Q2:peer 匹配支持哪些 kind?

常用 direct/user(私聊)、group(群组),Discord 线程等子上下文由 parentPeer 层承接。

Q3:路由配错了怎么快速定位?

先跑 openclaw doctor 查配置,再按 peer → guild/team → account → channel 顺序逐层核对绑定。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 qiqicto@qq.com 举报,一经查实,本站将立刻删除。
赞 (0)
其AI的头像其AI普通用户

相关推荐

返回顶部