5.2 从单场会议到常设委员会:团队化编排


5.2 从单场会议到常设委员会:团队化编排

本节摘要:任务规模超出一场会的承载时,CAMEL 体系的 Workforce 机制把协作升级为"常设委员会":协调员把总任务拆成任务树,工人节点并行处理子任务,逐层回收结果。本节讲团队化的组织结构、与单场会议的四个本质差异、最小团队化代码,以及升级前的检查单。

本节是全册技术上的收官一站。单场会议(第 2 到第 4 章)是"一桌人开一个议题";团队化编排是"一个委员会同时开很多桌"——总任务先被拆成任务树,树上每个节点可以分给一个独立的工人(工人内部可以又是一整场角色扮演会议)。规模上去了,会务逻辑也从"对话轮次"升维成"分派与回收"。

一、组织结构:协调员、任务树与工人节点

Workforce 的编制有三类岗位:

  • 协调员(Coordinator):委员会的秘书长。接收总任务,决定怎么切任务树,把每个子任务分派给合适的工人,回收结果后决定验收、重派还是汇总。
  • 任务分派节点:协调员的执行臂。负责按工人的能力画像把子任务递到对的桌上。
  • 工人节点(Worker):实干的成员。每个工人可以是一个单智能体,也可以嵌套一整场角色扮演会议——这是 Workforce 最有力的性质:委员会的委员自己可以带着一桌人

05-02-fig01

二、与单场会议的四个本质差异

升级不是"多开几场会",会务逻辑在四个点上换了性质:

  1. 驱动方式:单场会由对话轮次驱动(谁接着说);委员会由任务树驱动(哪块没完成)。驱动单位从"轮次"变成"子任务状态"。
  2. 失败处理:单场会的失败靠主持人当场兜底(换人、补指令);委员会的失败是子任务退回重派,甚至整棵子树重组——兜底从"即兴"变成"流程"。
  3. 记忆层级:单场会的记忆(2.5 三层)服务一个议题;委员会多出团队级记忆——各桌共享的组织资产,比如 4.4 提到的外聘专家花名册。
  4. 预算粒度:单场会按轮次记账(4.3);委员会按子任务记账,每桌一本账,协调员看的是总账。

三、最小团队化代码

from camel.agents import ChatAgent from camel.societies.workforce import Workforce from camel.tasks import Task def build_committee() -> Workforce: """组建最小委员会:一个协调员带三桌工人。 每个工人是单智能体;工人丙按需可替换为嵌套的角色扮演会议。""" data_worker = ChatAgent( system_message="你是数据桌工人。只处理价格采集、口径折算与数值计算。") material_worker = ChatAgent( system_message="你是材料桌工人。只处理文档解析、截图转录与材料登记。") writer_worker = ChatAgent( system_message="你是成文桌工人。只负责把验收通过的结论写成三段式纪要。") return Workforce("季度调研委员会").add_worker(data_worker) \ .add_worker(material_worker) \ .add_worker(writer_worker) async def run_committee() -> None: committee = build_committee() root_task = Task( content="完成三竞品定价调研:采集、解析、折算、成文,产出三段式纪要", id="root") result = await committee.process_async(root_task) print(result.state) # 输出:DONE(或 FAILED,附未达标子任务清单) # 输出(节选): # 协调员已切分任务树:3 个子任务,分派给 3 名工人 # 工人甲回报:价格采集完成,含折算表 # 工人丙回报:纪要成稿,遗留事项 1 项 # DONE

代码里最值得琢磨的是协调员收到的 Task 只有内容与编号——切分方式是协调员的职权。你想干预切分,不是在代码里写死流程,而是把切分偏好写进协调员的配置(比如"每桌子任务不超过三个")。

四、升级检查单:开委员会之前

团队化失败的头号原因是"编制先行,纪律未沉淀"。升级前过这张检查单:

def upgrade_check(team_state: dict) -> list: """团队化升级检查:返回未达标项。""" gaps = [] if not team_state.get("单会复盘已成文"): gaps.append("单场会议复盘未成文化:先会开好,再扩编制") if not team_state.get("议题卡模板统一"): gaps.append("议题卡模板不统一:各桌格式不一致会让总账没法对") if not team_state.get("专家花名册已登记"): gaps.append("自定义专家未登记:委员会无法按能力画像分派") if not team_state.get("子任务预算已设"): gaps.append("子任务轮次预算未设:委员会会静默烧穿预算") return gaps or ["检查通过,可以组建委员会"] # 输出: # upgrade_check({"单会复盘已成文": True, "议题卡模板统一": True, # "专家花名册已登记": False, "子任务预算已设": True}) # -> ['自定义专家未登记:委员会无法按能力画像分派']

💡 关键直觉:委员会的第一收益不是"更快",而是"更大"——能同时推进多个互不依赖的子任务。如果你的任务天然串行(后一步全靠前一步),委员会只会多出协调开销;先做依赖分析(2.4),再决定要不要编制。

案例展开:把贯穿案例升格为月度常设委员会

背景:竞品调研从一次性任务变成月度常设,且范围扩到五个竞品加功能维度。操作:按本节结构组建委员会——数据桌(采集与折算)、材料桌(手册与截图)、成文桌(纪要),协调员配置切分偏好与子任务预算;4.4 登记的外聘专家花名册并入团队级记忆,供各桌按需引用。结果:月度会从"一场 16 轮的会"变成"三桌并行加一轮总回收",墙钟时间减半;协调员账本显示成文桌成为瓶颈(等其他两桌材料),下期把成文桌改为"随到随写、分段成稿"缓解。解读:注意最后这步——委员会的优化依然靠记账(4.3 的三本账挪到子任务粒度),工具换了层级,方法论没换。

变式:嵌套深度的取舍。工人内部嵌套角色扮演会议能把复杂子任务开成小会,但嵌套每深一层,排查难度翻一倍。经验上限是两层(委员会内的工人是一桌会),再深的嵌套先怀疑任务拆得不够平。

本节要点回顾

  • 三类岗位:协调员管切分与回收,分派节点管递单,工人节点管干活,工人可嵌套整场会议;
  • 四个本质差异:任务树驱动、失败流程化、团队级记忆、按子任务记账;
  • 切分是协调员的职权:干预切分靠配置偏好,不是写死流程;
  • 升级检查单:复盘成文、卡片统一、专家登记、预算预设,缺一项缓一缓;
  • 下一节看框架自身:支撑这一切的引擎正在往哪些方向演进。

作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U