OpenClaw+飞书多智能体团队协作链实战
多 Agent 协作链实战:从踩坑到完美运行的完整指南
如何让多个 AI Agent 像团队一样协作完成复杂任务?本文记录了一次完整的踩坑与调试过程。
背景
想象这样一个场景:
用户:「帮我写一篇公众号文章」
然后,一群 AI 机器人开始分工协作:
-
🔍 科技情报员:搜集资料、推荐选题 -
✍️ 公众号写手:撰写文章 -
✅ 内容审核员:审核把关
最后,一篇高质量的文章自动产出。
这不是科幻,这是 OpenClaw 的多 Agent 协作能力。但实现这个流程,我们踩了不少坑。
第一坑:子 Agent 不响应
问题
我在飞书群里 @科技情报员、@公众号写手,但他们完全不响应。
我:@科技情报员 请搜集今天的科技热点(沉默...)
排查过程
- 检查群成员
:确认这些机器人都在群里 - 检查配置
:通过 agents_list工具发现子 agent 已正确配置
{"agents": [{"id": "tech-daily", "name": "tech-daily", "configured": true},{"id": "wechat-writer", "name": "wechat-writer", "configured": true},{"id": "content-reviewer", "name": "content-reviewer", "configured": true}]}
原因
这些是独立的飞书机器人,需要通过 sessions_spawn 调度,而不是简单的 @ 消息触发。
解决方案
使用 sessions_spawn 工具调度子 agent:
sessions_spawn({agentId: "tech-daily",task: "请搜集今天的科技热点..."})
✅ 结果:科技情报员成功响应,开始工作。
第二坑:子 Agent 汇报用的是主 Agent 身份
问题
子 agent 完成任务后,我让它用 message 工具发送结果到群里。但消息显示的发送者是飞书小虾米(主 agent),而不是科技情报员。
群里显示:飞书小虾米:🔍 科技情报员汇报...(期望:科技情报员:🔍 科技情报员汇报...)
排查过程
- 检查配置
:每个子 agent 都有独立的飞书账号
|
|
|
|---|---|
|
|
|
|
|
bot-cli_a9570b06e23cxxxx |
|
|
bot-cli_a96af73cc6b9xxxx |
- 检查 bindings 配置
:路由配置正确,但只解决了接收消息的路由,不是发送消息的身份。
原因
message 工具在不指定 accountId 参数时,会使用默认账号(主 agent 的账号)。
解决方案
在 spawn 指令中,明确要求子 agent 指定自己的 accountId:
sessions_spawn({agentId: "tech-daily",task: `完成后请执行:使用 message 工具将结果发送到飞书群:- channel: feishu- accountId: bot-cli_a96af6aa0e78xxxx // ← 关键!- target: chat:oc_xxx- message: 你的汇报内容`})
✅ 结果:群里消息显示发送者为「科技情报员」。
第三坑:定时任务模型找不到
问题
设置了 cron 定时任务,每天 9 点自动触发。但运行时报错:
{"status": "error","error": "404 status code (no body)","lastErrorReason": "model_not_found"}
原因
isolated session 的模型配置与主 session 不同,需要单独指定。
解决方案
两种方案:
- 更新 cron 任务配置
,指定正确的模型 - 直接用 sessions_spawn
,更可控
我选择了方案 2,因为主 agent 可以在用户需要时手动触发,更加灵活。
最终方案:完整的协作链流程
架构图
用户/定时触发↓飞书小虾米(主 agent)↓ sessions_spawn科技情报员 → 搜集选题 → 自己汇报到群↓飞书小虾米 → 选定选题↓ sessions_spawn公众号写手 → 撰写文章 → 自己汇报到群↓ sessions_spawn内容审核员 → 审核文章 → 汇报审核意见↓飞书小虾米 → 判断是否需修改↓(如需修改)公众号写手 → 修改文章 → 自己汇报到群↓飞书小虾米 → 汇总最终文章发给用户
关键配置
1. 子 Agent 配置
每个子 agent 需要有:
-
独立的 workspace(用于记忆文件) -
独立的飞书账号(用于自己发送消息) -
独立的 SOUL.md / MEMORY.md(用于个性化和记忆进化)
2. Spawn 指令模板
sessions_spawn({agentId: "tech-daily",task: `任务描述...完成后请执行:1. 使用 message 工具发送到群:- channel: feishu- accountId: bot-cli_a96af6aa0e78xxxx- target: chat:oc_xxx- message: 汇报内容2. 将经验写入 memory/YYYY-MM-DD.md`})
3. 记忆进化
每个子 agent 完成任务后,会自动更新:
memory/YYYY-MM-DD.md
– 每日经验 MEMORY.md
– 长期记忆
这样,子 agent 会越来越聪明,越来越了解自己的工作风格。
运行效果
|
|
|
|
|
|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 总计 |
|
7m4s |
|
群里消息示例:
科技情报员:🔍 科技情报员选题汇报选题1:AI大模型三国杀(热点)选题2:半导体暴涨1800%(深度)选题3:GPT-6成本计算器(实用)公众号写手:✍️ 公众号写手汇报[完整文章内容...]内容审核员:✅ 内容审核员汇报审核结论:🟡 需修改问题:...公众号写手:✍️ 公众号写手修改后文章[修改后的完整文章...]
经验总结
1. 子 Agent 需要明确指定身份
发送消息时,必须指定 accountId 参数,否则会使用主 agent 身份。
2. 记忆系统是进化的关键
每个子 agent 都有独立的 MEMORY.md 和 memory/ 目录,这是它们”成长”的基础。每次任务后更新记忆,下次会更聪明。
3. 人工确认环节很重要
完全自动化容易出错。在我们的流程中:
-
主 agent 选定选题(而不是随机选) -
主 agent 判断是否需要修改(而不是自动修改) -
最终汇总由主 agent 完成(保证质量)
4. Spawn 指令要”自包含”
子 agent 看不到主 agent 和用户的对话历史,所以 spawn 的 task 必须包含所有必要信息:
-
任务是什么 -
背景资料 -
输出要求 -
完成后的动作
OpenClaw 配置详解
以下是实现多 Agent 协作链的关键配置(已脱敏)。
1. 子 Agent 定义
在 openclaw.json 的 agents.list 中定义子 agent:
{"agents": {"list": [{"id": "main","default": true,"subagents": {"allowAgents": ["*"]}},{"id": "tech-daily","name": "tech-daily","workspace": "/home/xxx/workspace-tech-daily","agentDir": "/home/xxx/agents/tech-daily/agent","tools": {"deny": ["feishu_bitable_app", "feishu_calendar_event"]}},{"id": "wechat-writer","name": "wechat-writer","workspace": "/home/xxx/workspace-wechat-writer","agentDir": "/home/xxx/agents/wechat-writer/agent","tools": {"deny": ["feishu_bitable_app", "feishu_calendar_event"]}},{"id": "content-reviewer","name": "content-reviewer","workspace": "/home/xxx/workspace-content-reviewer","agentDir": "/home/xxx/agents/content-reviewer/agent"}]}}
关键点:
id
:子 agent 的唯一标识,用于 sessions_spawn调用workspace
:子 agent 的工作目录,存放记忆文件 agentDir
:子 agent 的配置目录,存放 SOUL.md、IDENTITY.md 等 tools.deny
:禁止子 agent 使用的工具(权限控制)
2. 飞书账号绑定
在 bindings 中配置每个子 agent 的飞书机器人账号:
{"bindings": [{"type": "route","agentId": "wechat-writer","match": {"channel": "feishu","accountId": "bot-cli_a9570b06e23cxxxx"}},{"type": "route","agentId": "main","match": {"channel": "feishu","accountId": "defaultAccount"}},{"type": "route","agentId": "tech-daily","match": {"channel": "feishu","accountId": "bot-cli_a96af6aa0e78xxxx"}},{"type": "route","agentId": "content-reviewer","match": {"channel": "feishu","accountId": "bot-cli_a96af73cc6b9xxxx"}}]}
关键点:
agentId
:对应 agents.list 中的 id accountId
:飞书机器人的 Bot ID,用于接收消息路由 -
主 agent 用 defaultAccount,子 agent 用各自的bot-cli_xxx
3. 飞书频道配置
在 channels.feishu.accounts 中配置飞书应用:
{"channels": {"feishu": {"enabled": true,"requireMention": true,"accounts": {"defaultAccount": {"appId": "cli_a930b85bab79xxxx","appSecret": "***已脱敏***","enabled": true,"requireMention": true},"bot-cli_a9570b06e23c5bc4": {"appId": "cli_a9570b06e23cxxxx","appSecret": "***已脱敏***","enabled": true},"bot-cli_a96af6aa0e78dbc8": {"appId": "cli_a96af6aa0e78xxxx","appSecret": "***已脱敏***","enabled": true},"bot-cli_a96af73cc6b99bd9": {"appId": "cli_a96af73cc6b9xxxx","appSecret": "***已脱敏***","enabled": true}}}}}
关键点:
-
每个子 agent 需要独立的飞书应用(在飞书开放平台创建) appId
和 appSecret从飞书开放平台获取-
主 agent 用 defaultAccount作为默认账号
4. 配置关系图
openclaw.json├── agents.list[] 定义子 agent│ ├── id ← sessions_spawn 用这个│ ├── workspace ← 记忆文件存放位置│ └── agentDir ← SOUL.md 等配置│├── bindings[] 消息路由配置│ ├── agentId ← 关联 agents.list[].id│ └── match.accountId ← 关联 channels.feishu.accounts│└── channels.feishu.accounts└── [accountId] ← 飞书机器人配置├── appId ← 飞书应用 ID└── appSecret ← 飞书应用密钥
5. 创建飞书机器人的步骤
-
创建飞书应用
-
访问 飞书开放平台 -
创建企业自建应用 -
获取 App ID 和 App Secret -
配置权限
-
消息: im:message(接收和发送消息) -
群组: im:chat(群聊能力) -
发布应用
-
配置事件订阅 -
发布到企业内部 -
添加到目标群聊 -
配置 OpenClaw
-
将 App ID 和 App Secret 填入 channels.feishu.accounts -
在 bindings中关联 agentId 和 accountId
团队配置文件
除了 openclaw.json,我们还创建了 team/TEAM.md 来记录团队协作规则:
# 团队配置## 成员| 角色 | agentId | accountId ||-----|---------|----------|| 科技情报员 | tech-daily | bot-cli_a96af6aa0e78xxxx || 公众号写手 | wechat-writer | bot-cli_a9570b06e23cxxxx || 内容审核员 | content-reviewer | bot-cli_a96af73cc6b9xxxx |## Spawn 指令模板完成后请执行:1. 使用 message 工具发送到群:- channel: feishu- accountId: [上表对应的 accountId]- target: chat:oc_xxx- message: 汇报内容2. 将经验写入 memory/YYYY-MM-DD.md
结语
多 Agent 协作不是简单的”调用 API”,而是要考虑:
- 身份隔离
:每个 agent 有独立身份 - 记忆进化
:每次任务都是学习机会 - 流程设计
:人工确认 + 自动执行的平衡 - 消息路由
:谁发给谁,用什么身份
踩完这些坑,协作链终于跑通了。希望这篇文章能帮到同样在做多 Agent 系统的你。
相关资源:
-
OpenClaw 文档 -
ClawHub 技能市场 -
OpenClaw GitHub
夜雨聆风