# Agent 间结构化辩论协作 **日期**: 2026-06-24 **状态**: 待规划 **范围**: Deep — feature ## 背景与问题 当前 `@team` 多 Agent 协作是 hub-and-spoke 模式:Lead 分解任务 → 专家隔离执行 → Lead 汇总。专家之间不对话、不质疑、不补充。`HandoffTransport` 只做事件广播,无 Agent 间通信通道。 用户反馈"体现不出多 Agent 协同"——核心痛点是 **看不到 Agent 间互动**。当前流程本质是"并行单 Agent",不是"协作"。 同时存在两个已知缺口: - `ExecutionMode.TEAM_COLLAB` 是死代码(定义于 `src/agentkit/chat/skill_routing.py:35`,全代码库无产生点) - CLI 完全没有多 Agent 入口(`src/agentkit/cli/chat.py` 不处理 `@team`/`@board` 前缀,会被当普通文本送给 LLM) ## 目标 让"Lead 主导的结构化辩论"成为 `@team` 模式的通用能力:Lead 能在关键决策点发起辩论,指定专家就分歧点交锋,裁决后继续执行。用户也能手动触发辩论。 **不是**:Agent 间自由点对点通信。保持 Lead 主导的可控性。 ## 成功标准 1. 用户在 `@team` 任务执行中,能看到专家间就某个分歧点来回辩论(不是各自独立发言) 2. Lead 能自动检测专家产出间的冲突/分歧,并触发辩论 3. 用户能在执行期间手动请求就某个点发起辩论 4. 辩论有明确收敛:Lead 裁决,产出喂给下一阶段 5. CLI 用户能使用 `@team`/`@board`,且能触发辩论 6. 简单任务可以跳过辩论,不强制增加延迟 ## 方案方向:A + C 混合 以方向 A(Debate Phase)为主体,吸收方向 C(方案先辩论再执行)作为可选模式。 ### 两个辩论插入点 1. **方案评审辩论**(来自 C):Lead 提出任务分解方案后,先让相关专家质疑/补充方案本身,收敛后才开始执行。可选,由 Lead 判断是否需要。 2. **决策点辩论**(来自 A):执行过程中,Lead 在关键阶段完成后检测分歧,触发辩论阶段。指定专家就该阶段产出交锋,Lead 裁决。 两者都是 `DEBATE` 类型的 `PlanPhase`,只是插入位置不同。 ### 辩论阶段执行流程 ``` Lead 开场:陈述分歧点 + 上下文 → 专家 A 发言(论证立场) → 专家 B 发言(反驳或补充) → (可选)专家 A 回应 → (可选)专家 B 回应 → Lead 裁决:采纳/折中/搁置,产出辩论结论 → 结论写入 SharedWorkspace,喂给下一阶段 ``` ### 触发机制 - **自动**:Lead 在方案评审点和阶段完成后运行分歧检测(LLM 判断),检测到冲突时插入辩论阶段 - **手动**:用户通过 WS 消息(Web)或命令(CLI)请求辩论,指定主题和参与专家,Lead 插入辩论阶段 ## 范围边界 ### 包含 - `TeamOrchestrator` 新增 `DEBATE` 阶段类型及执行器 - Lead 的分歧检测能力(prompt + 判断逻辑) - `@team` 执行期间用户干预通道(前置工程,顺带修复无 `/stop` 缺口) - 新增 WebSocket 事件:`debate_started`、`expert_argument`、`debate_resolved` - 前端辩论过程可视化(专家交锋气泡、裁决结果) - CLI `@team`/`@board` 前缀处理 + 辩论触发命令 - "跳过辩论"逃生舱(简单任务/用户显式跳过) ### 不包含 - Agent 间点对点自由通信(保持 Lead 主导) - `@board` 模式改造(它已经是讨论模式,不混入) - 团队状态持久化(独立问题,另行规划) - 辩论成本优化(如缓存、早停等,先验证价值再优化) - `ExecutionMode.TEAM_COLLAB` 死代码清理(顺手可做,但不作为本需求的核心交付) ### 延后 - 方向 C 全量(辩论优先作为默认模式):先验证 A+C 混合的价值,再考虑是否默认化 - 自定义团队模板保存:用户在 UI 选的专家组合无法存为模板复用,独立需求 - `orchestrator/` 子系统与团队流程打通:`PipelineEngine`/`SagaOrchestrator` 等通用编排能力与团队流程的整合,独立规划 ## 依赖与假设 ### 依赖 - **用户干预通道是前置工程**:当前 `@team` 执行期间用户消息被当新任务处理(`src/agentkit/server/routes/chat.py:_handle_chat_message`)。手动触发辩论要求先建立"执行期间用户干预"通道。这顺带修复团队模式无 `/stop` 的缺口。 ### 假设 - **Lead 的分歧检测能力可靠**:自动触发依赖 Lead(LLM)判断"是否值得辩论"。误报浪费 token,漏报错过辩论。需要好的 prompt 和判断标准。若不可靠,降级为纯手动触发。 - **辩论的延迟和成本可接受**:方案评审辩论可能让任务启动延迟 30s-1min。目标用户能接受这个代价换取更高质量的协作。 - **CLI 用户需要多 Agent 能力**:假设 CLI 用户与 Web 用户一样需要多 Agent 协作,而非只用于快速交互。 ## 关键决策记录 | 决策 | 选择 | 理由 | |------|------|------| | 互动形态 | Lead 主导的结构化辩论 | 复用 hub-and-spoke 架构,可控且能收敛,不做点对点通信 | | 触发机制 | 自动 + 手动结合 | 兼顾智能和可控,用户随时能介入 | | 方案方向 | A + C 混合 | A 最小改动,C 的方案评审辩论提升协作质感,两者都是 DEBATE 阶段类型 | | CLI 纳入 | 是 | 多 Agent 协作应全端可用,不只在 Web | | 辩论位置 | 阶段边界 | 不在专家执行中途打断,状态清晰,避免级联重跑 | ## 风险 1. **分歧检测质量**:Lead 判断失误(误报/漏报)影响体验。缓解:提供"是否值得辩论"的明确标准,允许用户关闭自动触发。 2. **辩论不收敛**:专家反复争论无法收敛。缓解:限制辩论轮次(默认 2 轮,最多 4 轮),Lead 有强制裁决权。 3. **成本上升**:辩论增加 token 消耗。缓解:逃生舱机制,简单任务跳过;后续可加成本预算阈值。 4. **CLI 交互复杂度**:终端展示多 Agent 辩论不如 Web 直观。缓解:用 Rich 库的 Panel/Live 渲染,专家发言用不同颜色区分。 ## 待规划时深入的问题 以下问题留给 `ce-plan` 阶段,不在本需求文档展开: - `DEBATE` 阶段类型的具体数据结构(`PlanPhase` 扩展字段) - 分歧检测 prompt 的具体设计 - 用户干预通道的 WS 协议设计(新消息类型?复用现有?) - 前端辩论可视化的组件设计 - CLI `@team`/`@board` 路由的代码路径(复用 Web 侧的 `ExpertTeamRouter`/`BoardRouter`?) - 辩论结论如何写入 `SharedWorkspace`(键名约定、与阶段产出的关系) ## 参考文件 - 团队流水线执行器: `src/agentkit/experts/orchestrator.py` - 团队容器: `src/agentkit/experts/team.py` - 阶段/计划模型: `src/agentkit/experts/plan.py` - 私董会讨论引擎(可借鉴多轮发言模式): `src/agentkit/experts/board_orchestrator.py` - WebSocket 拦截入口: `src/agentkit/server/routes/chat.py`(`_execute_team_collab` 第 321 行) - 死枚举 ExecutionMode: `src/agentkit/chat/skill_routing.py:35` - CLI chat(无多 Agent): `src/agentkit/cli/chat.py` - 前端聊天输入: `src/agentkit/server/frontend/src/components/chat/ChatInput.vue` - 前端事件处理: `src/agentkit/server/frontend/src/stores/chat.ts`(第 870-1200 行) - 团队模板: `configs/experts/dev_team.yaml`