# ADR-0023 Bot 工作组的协作模型 - 状态:Accepted · 日期:2026-10-26 · 设计见 [13-bot-teams](../design/13-bot-teams.md) ## 背景 需要在后台配置多个不同岗位的机器人。使用者把机器人拉到一起下达命令;复杂任务由一个管理机器人拆分、分派给其他机器人完成,简单工作也可以直接指定某个机器人去做。现有内核只支持"一个人对一个 Agent",引擎(Claude / Codex)的会话也都是单 Agent 的。 ## 决策 - **工作组(team)是唯一的对话容器**:组成是 1 个成员(人)、0–1 个组长、0–多个组员,组长和组员加起来至少 1 个。不提供脱离工作组的机器人对话。 - **每个"机器人 × 工作组"对应一个独立的引擎 Session**。机器人的记忆限于本工作组,不跨组。工作组的消息作为增量输入交给机器人,不让多个机器人共用一个上下文。 - **协调者模式**: - 成员把任务交给组长,组长通过子任务分派给组员 - 组员只通过子任务结果向组长汇报,**组员之间不互相 @,组员也不主动 @ 组长** - 成员可以直接 @ 组员做单项工作,不经过组长 - **任务依次执行**:同一工作组同一时间只有一个进行中的任务;同一任务内,不同组员的子任务可以并行。 - **协作动作通过 MCP Gateway 内置工具完成**(`job_*`、`task_*`、`team_*`),按 Run 令牌中的角色开放;不靠解析机器人回复的文字。 - **组长申请加入机器人需要成员审批**,复用 Gateway 内发起审批的现有流程。成员通过 API 直接增减机器人时不需要审批。 - **审批**:设计上尽量避免触发审批;一旦触发,就在工作组里显示卡片,由成员处理。 - **按任务设限额**(子任务数、组长轮数、成本、时长),超出就暂停任务,由成员决定继续或取消。 ## 考虑过的方案 - **所有机器人共用一个会话**:引擎不支持多角色共用一个上下文,而且各机器人的技能、权限、模型不同,排除。 - **自由群聊(机器人之间可以随意 @)**:容易出现互相接话停不下来、成本失控、难以收敛的情况,排除;协作统一走组长。 - **机器人通过回复文字里的 @ 标记来协作**:解析不可靠,也无法做权限控制和审计,改为 Gateway 工具。 ## 后果 - 引擎适配器、沙箱、Profile 不用改;新增 `apps/server/src/teams/` 模块和 8 张表,Gateway 和交互服务有少量改动 - 多个机器人同时工作时 Run 数量成倍增加,需要关注 CLI 登录账号的速率限制;用量多的机器人建议用 API Key 类型的 Profile(ADR-0015) - 组长的执行质量决定复杂任务的效果,需要单独打磨组长的提示词和技能(设计文档 T1)