乐于分享
好东西不私藏

OpenClaw+飞书多智能体团队协作链实战

OpenClaw+飞书多智能体团队协作链实战

多 Agent 协作链实战:从踩坑到完美运行的完整指南

如何让多个 AI Agent 像团队一样协作完成复杂任务?本文记录了一次完整的踩坑与调试过程。


背景

想象这样一个场景:

用户:「帮我写一篇公众号文章」

然后,一群 AI 机器人开始分工协作:

  • 🔍 科技情报员:搜集资料、推荐选题
  • ✍️ 公众号写手:撰写文章
  • ✅ 内容审核员:审核把关

最后,一篇高质量的文章自动产出。

这不是科幻,这是 OpenClaw 的多 Agent 协作能力。但实现这个流程,我们踩了不少坑。


第一坑:子 Agent 不响应

问题

我在飞书群里 @科技情报员、@公众号写手,但他们完全不响应。

我:@科技情报员 请搜集今天的科技热点(沉默...

排查过程

  1. 检查群成员
    :确认这些机器人都在群里
  2. 检查配置
    :通过 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),而不是科技情报员

群里显示:飞书小虾米:🔍 科技情报员汇报...(期望:科技情报员:🔍 科技情报员汇报...)

排查过程

  1. 检查配置
    :每个子 agent 都有独立的飞书账号
子 agent
飞书 Bot ID
tech-daily
`bot-cli_a96af6aa0e78xxxx
wechat-writer
bot-cli_a9570b06e23cxxxx
content-reviewer
bot-cli_a96af73cc6b9xxxx
  1. 检查 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 不同,需要单独指定。

解决方案

两种方案:

  1. 更新 cron 任务配置
    ,指定正确的模型
  2. 直接用 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 会越来越聪明,越来越了解自己的工作风格。


运行效果

步骤
负责人
用时
发送者
🔍 选题搜集
科技情报员
1m10s
科技情报员 ✅
✍️ 文章撰写
公众号写手
1m15s
公众号写手 ✅
✅ 内容审核
内容审核员
2m38s
内容审核员 ✅
✍️ 文章修改
公众号写手
2m1s
公众号写手 ✅
总计
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. 创建飞书机器人的步骤

  1. 创建飞书应用

    • 访问 飞书开放平台
    • 创建企业自建应用
    • 获取 App ID 和 App Secret
  2. 配置权限

    • 消息:im:message(接收和发送消息)
    • 群组:im:chat(群聊能力)
  3. 发布应用

    • 配置事件订阅
    • 发布到企业内部
    • 添加到目标群聊
  4. 配置 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