fischer-agentkit/docs/brainstorms/2026-06-24-agent-debate-col...

7.2 KiB
Raw Permalink Blame History

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 混合

以方向 ADebate Phase为主体吸收方向 C方案先辩论再执行作为可选模式。

两个辩论插入点

  1. 方案评审辩论(来自 CLead 提出任务分解方案后,先让相关专家质疑/补充方案本身,收敛后才开始执行。可选,由 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_startedexpert_argumentdebate_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 的分歧检测能力可靠:自动触发依赖 LeadLLM判断"是否值得辩论"。误报浪费 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