138 lines
7.2 KiB
Markdown
138 lines
7.2 KiB
Markdown
# 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`
|