943 字
约 3 分钟
5
OpenClaw 多 Agent 路由:一条消息到底交给谁?
10、OpenClaw 多 Agent 路由:一条消息到底交给谁?
配置多个 Agent 后,最重要的问题来了:
一条飞书消息进来,OpenClaw 怎么知道应该交给哪个 Agent?
理解三个东西就够了:
dmPolicy → 私聊能不能进
groupPolicy → 群消息怎么进
bindings → 进来以后交给谁
其中真正决定 多 Agent 分发 的核心是 bindings。
一、dmPolicy:先决定私聊能不能进
dmPolicy 可以理解成机器人的私聊门禁。
例如不同策略可以实现:
开放私聊
↓
用户可以直接找机器人
配对后使用
↓
只有授权用户可以使用
关闭私聊
↓
机器人只处理其他指定场景
企业内部测试,可以采用相对方便的访问策略。
涉及生产环境、敏感数据或者模型调用成本时,则应该尽量收紧权限。
所以 dmPolicy 解决的不是:
“消息给哪个 Agent?”
而是:
“这条私聊消息有没有资格继续往里面走?”
二、bindings:决定消息交给哪个 Agent
真正负责多 Agent 路由的是:
bindings
例如:
{
"bindings": [
{
"agentId": "CodeReview",
"match": {
"channel": "feishu",
"accountId": "cli_xxx1",
"peer": {
"type": "group",
"id": "oc_xxx"
}
}
},
{
"agentId": "DevOps",
"match": {
"channel": "feishu",
"accountId": "cli_xxx2"
}
}
]
}
不用死记 JSON,理解几个字段:
channel
→ 消息从哪里来?
accountId
→ 从哪个应用进来?
peer
→ 谁发来的?哪个用户/群?
agentId
→ 最终交给哪个 Agent?
于是整个过程就变成:
收到消息
↓
看 channel
↓
看 accountId
↓
看 user / group
↓
匹配 binding
↓
找到 agentId
↓
交给对应 Agent
三、为什么路由规则要尽量具体?
假设现在有三条规则:
A:feishu
B:feishu + app1
C:feishu + app1 + 群A
当消息恰好来自:
飞书
↓
app1
↓
群A
显然我们更希望它进入专门为“群 A”准备的 Agent,而不是被一个宽泛的飞书规则接走。
所以配置 bindings 时,一个很重要的思想就是:
特殊业务写精准规则,通用业务再做兜底。
这样多 Agent 越多,路由反而越容易维护。
四、groupPolicy:控制群消息怎么进
除了私聊,还有群聊策略。
例如一个非常常见的问题:
机器人是不是只有被 @ 才工作?
这就是群组策略需要控制的行为。
可以理解成:
群里有人讲话
↓
需要 @ 机器人?
↙ ↘
是 否
↓ ↓
被@才处理 监听更多群消息
生产环境通常不建议机器人无脑监听所有群消息。
原因很简单:
消息越多 → 模型调用越多 → Token 越多 → 成本越高。
同时还需要考虑群聊内容被机器人处理带来的权限和隐私问题。
五、一张图搞懂整个路由
飞书消息
│
↓
┌────访问控制────┐
│ │
私聊 群聊
↓ ↓
dmPolicy groupPolicy
└───────┬────────┘
↓
bindings
↓
匹配消息来源
↓
channel → account → peer
↓
agentId
↓
Agent
↓
LLM / Skills / Tools
所以以后再看到这些配置,不要混在一起理解。
只记住:
dmPolicy 管私聊权限,groupPolicy 管群聊行为,bindings 管 Agent 路由。
再进一步:
Policy
= 这条消息能不能进?
Bindings
= 进来以后给谁?
Agent
= 拿到消息以后干什么?
把这三层分清楚,OpenClaw 的多 Agent 架构基本就通了。
OpenClaw 多 Agent 路由:一条消息到底交给谁?
http://clxhxhhr.top/posts/418/ 评论
0 条
还没有评论,先写一条吧。