各位极客老铁,老墨又来填坑了!
最近深耕OpenClaw多Agent模式,目标很简单:让main机器人当调度员,mr(市场研究员)、pm(产品经理)、dev(开发工程师)各干各的活,形成一个小型AI协作团队。但过程真的一言难尽,从命令行操作到飞书配置,踩了N个暗坑,今天把完整搭建流程+避坑指南甩给你们,全程实操,跟着走不迷路——毕竟老墨从不玩虚的,只讲能落地的干货!
为什么需要多个Agent呢?
先交代背景:很多老铁会问,搞一个main机器人不就够了?为啥非要折腾多个Agent?
老墨实测总结:单Agent就是“万金油”,啥都能做但啥都不精——比如让一个机器人既做市场调研、又做产品规划、还写代码,做的事情太多了,记忆存储也会庞大,很容易出现“AI幻觉”。
我要搭建的多Agent架构,核心是「1个调度Agent(main/小墨)+ 3个功能Agent(mr/pm/dev)」,所有Agent接入飞书群组,实现“@对应角色触发对应响应”,目前已完成群组呼叫、私聊,协同工作还需进一步研究,看后文详述。
多Agent的核心价值,就是「分工明确、各司其职」:main机器人当调度员,负责统筹需求、分配任务;mr专注市场调研,pm聚焦产品规划,dev专攻技术实现,既避免了单Agent的混乱,又能提升响应效率和专业性,后续还能实现协同工作,搭建一个小型AI协作团队。
顺便说一句,为了使用飞书插件最新的能力,我把openclaw原生的飞书插件替换成了,我测试了一下,他们的配置是兼容的,你可以不用按照我的来,如果配置不兼容你可以参考飞书官方插件使用文档和OpenClaw飞书官方文档。
前言
由于OpenClaw版本更新非常快,文档更新不及时,网上查询资料时老墨也深受其害,配置各不相同,非常麻烦。所以老墨这里把环境标清楚,避免你跳坑:
OpenClaw版本: 我的是
2026.3.13,非常影响后文讲述的配置,不同版本差异非常大,如果你的版本与我不一致,那么你需要注意系统环境: Windows 10,这个影响不是很大,主要注意windows和linux路径上的区别即可 另外,你可以了解一下飞书的id设计,每一个机器人看到的你的
openid并不是一样的,如果你用到了需要特别注意:openid:以 ou 开头,格式为 ou_xxx
群聊的id: 以 oc 开头,格式为 oc_xxx
Appid: 飞书机器人的appid格式时 cli_xxx
一、第一步:添加多个工作区(多Agent的基础,别瞎建目录)
OpenClaw的多Agent,本质是「每个Agent对应一个独立工作区」,工作区里存着该Agent的身份配置(soul.md/identity.md等)、日志和任务数据,这一步是基础,建错路径后续全白搭。
很多新手上来就手动建文件夹,结果OpenClaw识别不到,老墨实测:用命令行创建最稳妥,自动关联配置,避免路径错乱。
先查看一下你的agent列表:
1openclaw agents list
你应该看到你本地有一个主agent,现在可以添加几个了:
1openclaw agents add mr --workspace ~/.openclaw/workspace-mr
2openclaw agents add pm --workspace ~/.openclaw/workspace-pm
3openclaw agents add dev --workspace ~/.openclaw/workspace-dev
这里展示一下我后台添加的一个writer的截图:

这里我指定工作目录在我的用户目录下的 .openclaw中,与主Agent一致。
如果你加错了,你可以删除:
1openclaw agents remove dev
创建完成后,你的~/.openclaw/openclaw.json配置文件的"agents"节点下会有"list"子节点,里边对应了你添加的多个agent,你可以修改这个配置,比如指定不同的模型:
1 "list": [
2 {
3 "id": "main",
4 "name": "小墨",
5 "workspace": "C:\\Users\\hankm\\.openclaw\\workspace",
6 "agentDir": "C:\\Users\\hankm\\.openclaw\\agents\\main\\agent",
7 "model": "minimax-cn/MiniMax-M2.5"
8 },
9 {
10 "id": "mr",
11 "name": "市场研究员",
12 "workspace": "C:\\Users\\hankm\\.openclaw\\workspace-mr",
13 "agentDir": "C:\\Users\\hankm\\.openclaw\\agents\\mr\\agent",
14 "model": "minimax-cn/MiniMax-M2.5"
15 },
16 // 其他的agent...
17]
现在,你到对应Agent的工作区目录下,就可以看到已经有这些文件了:
1AGENTS.md — 工作区指南,告诉你如何启动、记忆规则、心跳机制等
2IDENTITY.md — 你的身份定义(名字、角色、工作目录等)
3SOUL.md — 你的"灵魂",核心个性、价值观、行为风格
4USER.md — 用户(也就是你自己)的身份信息(名字、称呼、时区等)
5HEARTBEAT.md — 心跳任务列表,空文件表示不执行定期检查
6BOOTSTRAP.md — 初始启动脚本,首次运行时引导你了解自己
7TOOLS.md — 本地工具的配置笔记(如相机、SSH、TTS等)
每一个文件都有自己的用途,后续我们可以手动来编写这些文件,当然也可以让Agent自己编写。
踩坑点1:工作区路径别乱改,更别手动建
老墨一开始图省事,手动在. openclaw目录下建了workspace-mr文件夹,结果后续配置soul.md时,OpenClaw身份信息会混乱,命令行创建会自动生成所需配置,一步到位。
另外,路径最好和Agent ID对应(比如mr工作区路径包含mr),后续配置workspace参数时不容易搞混。
二、第二步:配置多个飞书机器人,关联OpenClaw账号
多Agent对应「多个飞书机器人」,每个Agent需要一个独立的飞书机器人(appId+appSecret),这一步核心是“飞书机器人配置+OpenClaw账号映射”,少一步都无法联动。
2.1 飞书机器人创建(每个Agent对应一个)
这个我之前都已经详细讲过了,还不会创建的可以看这篇文章,由于现在涉及到群组,所以现在的最小权限集合是:
1{
2 "scopes": {
3 "tenant": [
4 "aily:file:read",
5 "aily:file:write",
6 "application:application.app_message_stats.overview:readonly",
7 "application:application:self_manage",
8 "application:bot.menu:write",
9 "cardkit:card:read",
10 "cardkit:card:write",
11 "contact:user.employee_id:readonly",
12 "corehr:file:download",
13 "event:ip_list",
14 "im:chat.access_event.bot_p2p_chat:read",
15 "im:chat.members:bot_access",
16 "im:message.group_msg"
17 "im:message.group_at_msg:readonly",
18 "im:message.p2p_msg:readonly",
19 "im:message:readonly",
20 "im:message:send_as_bot",
21 "im:resource",
22 "contact:contact.base:readonly"
23 ],
24 "user": ["aily:file:read", "aily:file:write", "im:chat.access_event.bot_p2p_chat:read"]
25 }
26}
这里老墨也给大家一个最简单、粗暴的创建和配置方式:使用飞书官方机器人创建工具,这玩意儿可以一键创建机器人,所有的基础权限都给你配置好,头像你都可以自己选一个好看,非常方便,还可以直接选择你已经有的机器人!

2.2 OpenClaw账号配置(关联飞书机器人)
打开OpenClaw核心配置文件 openclaw.json(路径:~/.openclaw/openclaw.json),找到「channels」节点,添加每个Agent的账号配置,将OpenClaw的Agent ID与飞书机器人的appId/appSecret绑定。
1"channels":
2 "feishu": {
3 "enabled": true,
4 "connectionMode": "websocket",
5 "domain": "feishu",
6 "streaming": true, // 开启飞书流式输出
7 "accounts": {
8 "main": {
9 "appId": "cli_xxx1", // main机器人(小墨)的appId
10 "appSecret": "xxx1", // main机器人的appSecret
11 },
12 "mr": {
13 "appId": "cli_xxx2", // mr机器人的appId
14 "appSecret": "xxx2", // mr机器人的appSecret
15 },
16 // 省略其他的agent渠道...
17 },
18 "groups": {
19 "oc_xxx": {
20 "requireMention": false,
21 "groupPolicy": "open",
22 },
23 "footer": {
24 "elapsed": true,
25 "status": true
26 },
27 "threadSession": true
28 }
29}
上边配置的 “group” 节点是群组的配置说明:
- “
requireMention“表示是否必须@机器人才能回复,不at机器人就不会响应消息,默认就是true,这里我为了方便大家都可以对一条消息响应,我就设置成了false - “
groupPolicy” 就是谁可以在群组中与你的机器人聊天,"open“表示任何人。 你可以直接修改这些配置来启用不同的功能,比如上边的流式输出,对应的命令是:
1openclaw config set channels.feishu.streaming true
2openclaw config set channels.feishu.footer.elapsed true # 开启耗时
3openclaw config set channels.feishu.footer.status true # 开启状态展示
4# 机器人可在话题群/消息群话题模式中,针对每个话题拥有独立上下文以及多任务并行
5openclaw config set channels.feishu.threadSession true
配置文件修改完成后,记得检查一下是否正确:
1openclaw config validate
踩坑点2:appId别抄错,workspace路径要和第一步创建的一致
老墨一开始把dev的appId抄成了pm的,结果启动服务后,dev机器人始终无响应,查日志才发现“appId不匹配”;另外,workspace路径要和第一步用命令行创建的完全一致,Windows路径要加双反斜杠(\\),否则识别不到工作区。
三、第三步:配置绑定关系(核心!让消息正确路由到对应Agent)
这一步是多Agent能“各司其职”的关键——通过bindings配置,定义“什么场景、什么消息,触发哪个Agent”。
核心逻辑:私聊场景(direct)→ 按用户openid匹配;群聊场景(group)→ 按群ID匹配,结合消息触发条件(@机器人、关键词),路由到对应Agent。
实操配置(openclaw.json中添加bindings节点)
这个绑定关系老墨花的时间最久,查阅了很多资料,各不相同,有的说在channels节点下加”bindings”, 有的是在跟节点下加,有的说要配置 “peer.id",都是巨坑。
结论,OpenClaw官方推荐的方式是在 openclaw.json跟节点下配置 "bindings" 子节点, 也不需要单独一个个为私聊和群组指定 "peer",直接通过"accountId"简化配置:
1{
2 "agents": {
3 //...
4 },
5 "bindings": [
6 {
7 "agentId": "mr", // 路由到的 agent 的 id
8 "match": {
9 "channel": "feishu",
10 "accountId": "mr" // channels中定义的 id
11 }
12 }
13 // 省略其他绑定关系配置...
14 {
15 "agentId": "main",
16 "match": {
17 "channel": "feishu"
18 }
19 }
20 ],
21 // ...
22}
这个配置,你可以私聊也可以群聊你的每一个机器人,不需要单独额外的配置。
注意,上边的bindings最后有一个配置对象,它没有指定 "accountId",这样如果群立收到了没有at的消息,那么会交给这里的"main" agent来处理。
踩坑点4:agentId、accountId必须与你的配置一致
比如我的配置中,dev的agentId必须是“dev”,它的 “accountId” 是 channels 下的 dev, 最简单的方式就是 agentId 和 accoutId 都写成一样的,避免出错。
四、第四步:搭建飞书群组,接入所有机器人
配置好规则后,需要一个飞书群组,把main、mr、pm、dev四个机器人都加进去,同时确保自己(用户)在群里,这样才能触发群聊消息路由。
实操步骤
飞书新建群组:起个名字;
添加机器人:群设置→机器人→添加机器人,分别搜索“小墨”“市场研究员”“产品经理”“开发工程师”(对应第二步创建的飞书机器人),全部加入群聊;

获取群ID:群设置->拉到最下边,可以看到群ID,复制「群ID」(oc_开头),确认和bindings配置里的群ID一致;

验证机器人状态:群里发送“@小墨 测试”,若机器人有响应(哪怕是默认回复),说明接入成功。
踩坑点5:群ID不匹配
群ID注意复制完整,粘贴时不要多空格、稍空格,否则可能造成机器人没有响应。
五、第五步:测试群组通话(验证多Agent是否能正常响应)
所有配置完成后,重点测试“群聊@对应机器人,是否能触发对应Agent响应”,这是检验搭建成功的关键,同时排查身份混淆的问题(比如所有Agent都回复“小墨”)。
说明,我已经提前编写好了 SOUL.md, USER.md 和 IDENTITY.md, 各个机器人知道自己的身份。
测试步骤
- 发一条消息,让他们报告自己的身份
我在群里发了一条消息,但是没有@任何人,前边说过,我把
requireMention设置为了 false, 那么机器人都可以看到我这条消息,进行回复。

- 群聊测试(逐一测试,避免混淆):@开发工程师 → 发送“报告你的身份”,若回复“我是开发工程师(资深全栈),专注系统架构设计、代码开发…”,说明dev Agent正常;@市场研究员 → 发送“报告你的身份”,若回复“我是市场研究员,专注行业趋势分析、竞品调研…”,说明mr Agent正常;
- @开发工程师 → 发送“报告你的身份”,若回复“我是开发工程师(资深全栈),专注系统架构设计、代码开发…”,说明dev Agent正常;
- @市场研究员 → 发送“报告你的身份”,若回复“我是市场研究员,专注行业趋势分析、竞品调研…”,说明mr Agent正常;
踩坑点6:所有Agent都回复“小墨”(最头疼的坑)
老墨一开始遇到的最大问题:不管@哪个机器人,都回复“我是小墨”,排查了半天才找到原因——我在 channels.feishu节点下配置了一个 "defaultAccount": "main",所有消息都路由给了main,导致身份验证失败。
另外,每个Agent的soul.md里,身份报告话术要独立,别复用main的“小墨”话术,这一点一定要注意!一开始,可以与机器人单聊,给他设立人格、身份等信息。
未实现的工作流
我期望的是,让main去拆解工作,在分发给这几个机器人各自处理,最后再各自报告,并由main汇总上报,但是这个流程如果没有工作流的配置无法实现。
查阅了大量资料,我得到的结果是:飞书是禁止机器人去 @其他机器人的,就算@了机器人也被当作纯文本了,无法被提及,所以无法做出响应。这样主要是避免服务器压力过大,毕竟都是机器人在聊。我想这样设计也是有道理的,后来我还在想是否可以通过消息中的关键字来匹配,似乎也无法实现。如果老铁们有解决办法可以留言给我。
现在,我的初步方案是:使用任务编排模式(Orchestrator Pattern),让 main 来拆解和分发任务,不是直接在群里交给其他机器人,而是在后台完成这些工作。
- main拆解任务,分析这些任务要谁来参与完成
- 使用api调用具体的agent,分发任务,要求完成后在群里上报结果
- 汇总各agent的成功,并在群里实现最终成功的汇报。
我知道有一些skill能做这个事情,agent有 spawn 机制,不过我还没有具体去研究,如果您已经成功跑通,欢迎留言区展示你的方案,感谢!
六、总结:多Agent搭建核心要点+避坑汇总
折腾了这么久,终于把OpenClaw多Agent搭建成功,目前每个Agent能独立响应,各司其职,协同工作后续再优化,这里把核心要点和所有坑汇总,帮大家少走弯路。
最后说一句:OpenClaw多Agent搭建不难,难的是细节和避坑,跟着本文的实操步骤走,基本能一次成功,有问题评论区交流,老墨知无不言!
极客老墨,继续折腾!