各位极客老铁,老墨又来填坑了!

最近深耕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四个机器人都加进去,同时确保自己(用户)在群里,这样才能触发群聊消息路由。

实操步骤

  1. 飞书新建群组:起个名字;

  2. 添加机器人:群设置→机器人→添加机器人,分别搜索“小墨”“市场研究员”“产品经理”“开发工程师”(对应第二步创建的飞书机器人),全部加入群聊;

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

  4. 验证机器人状态:群里发送“@小墨 测试”,若机器人有响应(哪怕是默认回复),说明接入成功。

踩坑点5:群ID不匹配

群ID注意复制完整,粘贴时不要多空格、稍空格,否则可能造成机器人没有响应。

五、第五步:测试群组通话(验证多Agent是否能正常响应)

所有配置完成后,重点测试“群聊@对应机器人,是否能触发对应Agent响应”,这是检验搭建成功的关键,同时排查身份混淆的问题(比如所有Agent都回复“小墨”)。

说明,我已经提前编写好了 SOUL.md, USER.md 和 IDENTITY.md, 各个机器人知道自己的身份。

测试步骤

  1. 发一条消息,让他们报告自己的身份 我在群里发了一条消息,但是没有@任何人,前边说过,我把 requireMention设置为了 false, 那么机器人都可以看到我这条消息,进行回复。

  1. 群聊测试(逐一测试,避免混淆):@开发工程师 → 发送“报告你的身份”,若回复“我是开发工程师(资深全栈),专注系统架构设计、代码开发…”,说明dev Agent正常;@市场研究员 → 发送“报告你的身份”,若回复“我是市场研究员,专注行业趋势分析、竞品调研…”,说明mr Agent正常;
  • @开发工程师 → 发送“报告你的身份”,若回复“我是开发工程师(资深全栈),专注系统架构设计、代码开发…”,说明dev Agent正常;
  • @市场研究员 → 发送“报告你的身份”,若回复“我是市场研究员,专注行业趋势分析、竞品调研…”,说明mr Agent正常;

踩坑点6:所有Agent都回复“小墨”(最头疼的坑)

老墨一开始遇到的最大问题:不管@哪个机器人,都回复“我是小墨”,排查了半天才找到原因——我在 channels.feishu节点下配置了一个 "defaultAccount": "main",所有消息都路由给了main,导致身份验证失败。

另外,每个Agent的soul.md里,身份报告话术要独立,别复用main的“小墨”话术,这一点一定要注意!一开始,可以与机器人单聊,给他设立人格、身份等信息。

未实现的工作流

我期望的是,让main去拆解工作,在分发给这几个机器人各自处理,最后再各自报告,并由main汇总上报,但是这个流程如果没有工作流的配置无法实现。

查阅了大量资料,我得到的结果是:飞书是禁止机器人去 @其他机器人的,就算@了机器人也被当作纯文本了,无法被提及,所以无法做出响应。这样主要是避免服务器压力过大,毕竟都是机器人在聊。我想这样设计也是有道理的,后来我还在想是否可以通过消息中的关键字来匹配,似乎也无法实现。如果老铁们有解决办法可以留言给我。

现在,我的初步方案是:使用任务编排模式(Orchestrator Pattern),让 main 来拆解和分发任务,不是直接在群里交给其他机器人,而是在后台完成这些工作。

  1. main拆解任务,分析这些任务要谁来参与完成
  2. 使用api调用具体的agent,分发任务,要求完成后在群里上报结果
  3. 汇总各agent的成功,并在群里实现最终成功的汇报。

我知道有一些skill能做这个事情,agent有 spawn 机制,不过我还没有具体去研究,如果您已经成功跑通,欢迎留言区展示你的方案,感谢!

六、总结:多Agent搭建核心要点+避坑汇总

折腾了这么久,终于把OpenClaw多Agent搭建成功,目前每个Agent能独立响应,各司其职,协同工作后续再优化,这里把核心要点和所有坑汇总,帮大家少走弯路。

最后说一句:OpenClaw多Agent搭建不难,难的是细节和避坑,跟着本文的实操步骤走,基本能一次成功,有问题评论区交流,老墨知无不言!


极客老墨,继续折腾!


相关阅读