六节课走完:token、发消息、卡片、事件订阅、表格、零代码。这一课收官——把它们拧成一个大项目:让一群 AI 机器人在飞书群里开一场结构化的讨论会。

不是噱头。招聘 JD 里"多 Agent 协作""AI 工作流编排"出现频率越来越高,而"多个机器人以各自身份在群里有序发言"正是多 Agent 协作最直观、最容易验收的落地形态。

〇、先看全景:全系列 7 课知识图谱

课解决的问题核心资产
L1拿 tenant_access_token(OAuth 2.0 新版)Token 管理器类(缓存+刷新+22 错误码映射)
L2机器人发消息send_text(双重序列化/uuid 幂等/5QPS)
L3可交互卡片build_card(header/elements/按钮双模式)
L4事件订阅"听得见"回调服务(challenge/解密/双层去重)
L5多维表格 × AI读→AI→写回管道(分页/字段格式/防并发写)
L6零代码推送自定义机器人 webhook + n8n 拖拽
L7(本课)多机器人协作编排器:轮次控制 + 角色隔离 + 上下文管理

本课主角素材来自提示岛站内收录的开源项目(条目 id=12234「飞书多机器人协作讨论编排器」,GitHub ★42、MIT、Shell):

lark-bot2bot:编排器通过 CLI 调用各 bot 的 LLM,以各自 bot 身份在群里发消息——零噪音、零侵入。

它的 Demo 效果就是两个机器人围绕"RAG 还是 Fine-tuning"互相反驳。本文复现这个思路并加上结构化框架。

一、为什么"随便几个 bot 聊天"会失败,而"六顶思考帽"能成功

直接丢一句"你们讨论一下 X"给三个机器人,结果通常是:互相点赞、复读、无限接龙。问题出在没有角色边界和议程控制。

六顶思考帽(Edward de Bono 的经典决策框架)天生适合做多机器人议程:白帽(事实)→ 红帽(直觉)→ 黑帽(风险)→ 黄帽(收益)→ 绿帽(创意)→ 蓝帽(总结控场)。每顶帽子 = 一个机器人 = 一个固定角色提示词,发言顺序由编排器控制,模型没有"自由接话"的空间——这正是 id=12234 说的"零噪音"的实现路径。

结论:多机器人协作的质量不取决于模型,取决于议程——角色×顺序×轮次,全部由编排器定死。

二、编排架构:一张图看懂

        ┌──────────────────────────────┐
        │        编排器(你的脚本)        │
        │  议程 = [白,红,黑,黄,绿,蓝]×N轮  │
        └──────┬───────────────────────┘
               │ 按顺序:system=该帽角色 + 已有发言上下文 → LLM
               ▼
   ┌───────────┼───────────┬───────────┐
   ▼           ▼           ▼           ▼
[白帽bot]   [黑帽bot]   [绿帽bot]   [蓝帽bot] …(每个=独立身份)
   └───────────┴───────────┴───────────┘
               │ L2 的 send_text / L6 的 webhook
               ▼
          同一个飞书群(人类围观/插话/拍板)

身份实现二选一:A. 每帽一个应用机器人(L1-L4 全家桶,卡片按钮可交互,但要管 N 套凭证);B. 每帽一个自定义机器人 webhook(L6 路线,N 个 webhook 就是 N 个身份,零鉴权代码——本课用这个,最快跑通)。

三、最小可行代码:六帽轮询编排器

"""六顶思考帽多机器人编排:议题 → 六帽按序发言×轮次 → 蓝帽收口。"""
import json
import time
import urllib.request

# 每个帽子的 webhook(L6 讲的自定义机器人,一帽一个,各发各的身份)
HAT_WEBHOOKS = {
    "white": "https://open.feishu.cn/open-apis/bot/v2/hook/****1",
    "red":   "https://open.feishu.cn/open-apis/bot/v2/hook/****2",
    "black": "https://open.feishu.cn/open-apis/bot/v2/hook/****3",
    "yellow":"https://open.feishu.cn/open-apis/bot/v2/hook/****4",
    "green": "https://open.feishu.cn/open-apis/bot/v2/hook/****5",
    "blue":  "https://open.feishu.cn/open-apis/bot/v2/hook/****6",
}
AGENDA = ["white", "red", "black", "yellow", "green", "blue"]  # 发言顺序写死

HAT_SYSTEM = {  # 角色提示词从第六节的 id=11974 拆出,每帽一段
    "white": "你是白帽。只陈述事实与数据,不评价。若信息不足,列出需要补充的关键数据。",
    "red":   "你是红帽。只表达直觉与感受,允许不合逻辑,给出对当前方案的情绪判断。",
    "black": "你是黑帽。只找风险与漏洞,攻击前面所有发言中最脆弱的假设。",
    "yellow": "你是黄帽。只讲价值与机会,为方案找出至少三条成立的理由。",
    "green": "你是绿帽。基于黑帽指出的风险,提出至少两个创新规避方案。",
    "blue":  "你是蓝帽。总结本场讨论:共识/分歧/待验证清单/下一步建议,结构化收口。",
}
HAT_NAME = {"white": "白帽·事实", "red": "红帽·直觉", "black": "黑帽·风险",
            "yellow": "黄帽·价值", "green": "绿帽·创意", "blue": "蓝帽·总结"}

MAX_ROUNDS = 1          # 轮次上限(坑1:编排器写死,不靠模型自觉)
CTX_KEEP_LAST = 4       # 上下文只带最近4条发言(坑3:防窗口爆炸)


def call_llm(system: str, prompt: str) -> str:
    """任意大模型接口(同 L4 的实现),略。"""
    raise NotImplementedError


def post(hat: str, text: str) -> None:
    """webhook 发群(L6 的 send_webhook 简化版:无签名场景)。"""
    body = {"msg_type": "text",
            "content": {"text": f"【{HAT_NAME[hat]}】{text}"}}
    req = urllib.request.Request(
        HAT_WEBHOOKS[hat],
        data=json.dumps(body, ensure_ascii=False).encode("utf-8"),
        headers={"Content-Type": "application/json"}, method="POST")
    urllib.request.urlopen(req, timeout=10)


def run(topic: str) -> None:
    transcript = [f"[议题] {topic}"]
    for rnd in range(MAX_ROUNDS):
        for hat in AGENDA:                 # 顺序由编排器定死(坑4:防串戏)
            ctx = "\n".join(transcript[-CTX_KEEP_LAST:])   # 上下文瘦身
            prompt = f"议题:{topic}\n已有讨论(最近几条):\n{ctx}\n请用150字以内发言。"
            try:
                speech = call_llm(HAT_SYSTEM[hat], prompt)
            except Exception as e:
                speech = f"({HAT_NAME[hat]}本次发言失败:{e})"
            post(hat, speech)
            transcript.append(f"[{HAT_NAME[hat]}] {speech}")
            time.sleep(1.2)                # webhook 限流 5次/秒,错峰(L6 坑2)
    print("讨论完成,共发言", len(AGENDA) * MAX_ROUNDS, "条")


if __name__ == "__main__":
    run("要不要用 AI 机器人全面接管团队的日报推送?")

注意这段代码的三个"编排器思维":发言顺序、轮次上限、上下文长度全部代码写死,模型只在角色框内发挥——这是多机器人讨论和"一个模型精分六角"的本质区别,也是零噪音的来源。

四、跑通 6 步

步骤操作成功标志
1目标群添加 6 个自定义机器人(L6 第一节流程),逐个复制 webhook拿到 6 个 .../hook/xxx
2填进 HAT_WEBHOOKS,起名对应六帽配置无空值
3call_llm 接任意模型 API(L4 有实现模板)单测能出文本
4MAX_ROUNDS=1 先跑一轮群里按白→红→黑→黄→绿→蓝顺序出现 6 条不同身份发言
5人工围观,必要时插话;蓝帽发言即议程结束讨论有结论不烂尾
6稳定后调 MAX_ROUNDS=2(第二轮黑帽会攻击第一轮绿帽的方案,质量明显上升)轮次可控

五、多机器人协作专属的四个坑

坑 1:接龙死循环

L4 讲过机器人消息互相触发。多 bot 同群时风险翻倍——黑帽回复白帽、白帽又接黑帽。解法:发言权在编排器手里,模型不"监听"群消息(本课 webhook 方案天然免疫:只有编排器调 API 才有人说话);若用应用机器人路线,务必保留 L4 的 sender_type==bot 过滤。

坑 2:限流按机器人算,但群体验按消息算

webhook 单机器人 100 次/分,6 个 bot 各用各的额度没问题;但同群 6 条消息刷屏太快会被人类嫌吵。代码里 sleep(1.2) 让讨论有"人味节奏",蓝帽收口也给人插话窗口。

坑 3:上下文窗口爆炸

讨论记录越滚越长,全量塞 prompt 又贵又慢还溢出。CTX_KEEP_LAST=4 只带最近几条;更讲究的做法是每轮蓝帽先做小结、后续只带小结。

坑 4:角色漂移(串戏)

模型会"好心"地替别的帽子说话,或黑帽说着说着开始提方案(那是绿帽的活)。解法:system 里明确禁止边界外行为(本课 HAT_SYSTEM 每条都带"只"字),蓝帽的收口格式在提示词里给死。

结论:多机器人协作四个开关全在编排器——发言权、节奏、上下文、角色边界,一个都别交给模型自由发挥。

六、两段可以直接复制的讨论类提示词

① 议程本体——提示岛 id=11974「六顶思考帽创业决策」(第三节 HAT_SYSTEM 就是从这里拆的;单模型精分版可直接整段用):

Assistant, let's use Edward de Bono's Six Thinking Hats to guide someone who is planning to start a small business.

White Hat (Facts): To begin with, the entrepreneur needs to gather all available data and information. What are the critical pieces of information they should gather?

Red Hat (Emotions): Next, they should examine their own feelings and intuition about the business idea. Can you provide some prompts to help them assess their emotional response?

Black Hat (Critical Judgment): They should then critically assess potential problems and risks. What are some common pitfalls to be aware of when starting a small business?

Yellow Hat (Optimism): Now they should consider the potential benefits and opportunities. What are some possible positive outcomes of starting a business?

Green Hat (Creativity): At this stage, they should brainstorm creative solutions and innovative ideas. Can you suggest some techniques for boosting creativity in a business context?

Blue Hat (Process Control): Finally, they should manage the thinking process and plan the steps forward...

(全文 1140 字,站内可一键复制。)两种用法:单机器人版——整段给一个模型,它按帽顺序自问自答出完整分析;多机器人版——按帽拆成六段 system prompt,每帽一个身份(本课架构)。同一份提示词,横跨两种系统复杂度,这就是"角色化议程"的价值。

② 对抗升级版——提示岛 id=4778「辩论教练」:

I want you to act as a debate coach. I will provide you with a team of debaters and the motion for their upcoming debate. Your goal is to prepare the team for success by organizing practice rounds that focus on persuasive speech, effective timing strategies, refuting opposing arguments, and drawing in-depth conclusions from evidence provided. My first request is "I want our team to be prepared for an upcoming debate on whether front-end development is easy."

用法:把六帽讨论换成"正方 bot × 反方 bot × 教练 bot"三身份——教练 bot 拿这段提示词控节奏、点评谁在诡辩。讨论要质量,就要有对抗;这段是站内辩论类条目里结构最完整的。

结论:先议程(六顶帽)后对抗(辩论教练)——单模型用整段,多机器人按角色拆分,提示词结构不变。

七、弹药库:148 条插件里,这 6 条直接补你的架构

编排器之外,提示岛站内 feishu 专题实测收录 148 条(143 Skill/插件 + 5 篇本系列教程),按功能给一张挑选地图:

条目名称一句话适合补哪块
id=12234飞书多机器人协作讨论编排器(★42·MIT)多 bot 有序讨论,零噪音零侵入本课架构本体
id=12233Claude Code/Codex 会话接入飞书机器人(★48·MIT)编程 Agent 的飞书交互通道给"蓝帽"接真编码 Agent
id=12230飞书 HR 入职助手(★101·Apache-2.0)入职流自动化:OCR+多维表格同步+节点提醒业务型 bot 的完整参考实现
id=12235飞书图像生成机器人(★38·MIT·Go)必应生图接入会话给讨论配"绿帽画方案图"
id=12237飞书幻灯片生成 Skill(★25·MIT)提示词直出飞书 slides,51 页模板蓝帽收口直接产 PPT
id=12231飞书消息桥接本地 Codex CLI本地 Agent 通道私有化环境选型

挑法:站内专题页按质量评分(A-D 四档)排序看,条目页附 GitHub 原始链接和许可证(注意 Apache 与 MIT 的商用条款差异),商用前顺手核对。

全系列回顾:你现在手上有一个什么系统

7 课拼起来,是一套完整的飞书 AI 系统能力——也正是招聘 JD 里"飞书开放平台 API 对接 + 大模型应用 + 工作流编排"三合一模板:

  • 通道层:token 管理(L1)、消息/卡片收发(L2/L3)、webhook(L6)
  • 智能层:机器人系统提示词(L4 六段式)、业务模板(L5/L6 报告类)、议程框架(L7 六顶帽)
  • 数据层:多维表格读写管道(L5)、n8n 无代码胶水(L6)
  • 架构层:多 Agent 编排(L7),四坑全部带免疫方案

下一步建议从 L5+L7 组合练手:多维表格收数据 → 六帽讨论产出决策 → 蓝帽结论写回表格——一套"数据进、决策出"的闭环。


附:提示岛是什么

本系列全部提示词与插件索引来自提示岛(prompts.ssjintaitong.com),AI 提示词与 Skill 库,实测收录 10910 条,其中文字提示词 3485 条(完整全文、一键复制),Skill/插件 5298 条,23 个分类。免登录、免注册。

飞书系列总入口:

  • 飞书 AI 自动化专题(148 条):prompts.ssjintaitong.com/topic/feishu
  • 本系列 L1-L7 教程条目:专题内搜「飞书对接 AI」(入库后均在头部)
  • 本文引用:/prompts/11974、/prompts/4778、/prompts/12234、/prompts/12230
  • 质量评分报告:prompts.ssjintaitong.com/quality-report(5298 条插件 A-D 档)

两个站内功能:Skill 质量评分(四维度自动打分,挑插件不盲选);每条附 GitHub 原始出处 + 许可证(能追到作者仓库,本文插件表可逐个核对)。


Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐