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

138 lines
7.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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_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 的分歧检测能力可靠**:自动触发依赖 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`