fischer-agentkit/docs/brainstorms/2026-06-17-board-meeting-mo...

455 lines
19 KiB
Markdown
Raw 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.

# 私董会讨论模式Board Meeting Mode需求文档
**日期**: 2026-06-17
**状态**: Draft
**范围**: Deep — feature
**作者**: ce-brainstorm
---
## 1. 背景与动机
### 1.1 当前专家团实现状态
Fischer AgentKit 现有专家团功能位于 `src/agentkit/experts/`,采用 **hub-and-spoke中心辐射模式**
- Lead Expert 分解任务 → Member Experts 并行执行子任务 → Lead 综合结果
- 子任务深度=1**无 Agent 间通信**`handoff_transport` 仅用于事件广播
- 协作模式单一:`MergeStrategy` 仅保留 `BEST`,移除了 VOTE/FUSION
**关键缺口**
1. **未集成到主聊天流程**`src/agentkit/server/routes/chat.py:584-590``TEAM_COLLAB` 模式回退到 REACT`emit_team_event()` 已定义但未被调用
2. **无预设专家模板** — 没有 `configs/experts/` 目录,`ExpertTemplateRegistry` 默认为空
3. **`team_dissolved` 事件未触发** — 前端有处理代码,后端不广播
4. **TeamStatus 缺 PLANNING** — 文档/前端有,后端枚举没有
### 1.2 对标分析
| 维度 | Qoder | WorkBuddy | Legends MCP | colleague.skill | Fischer 当前 |
|------|-------|-----------|-------------|-----------------|-------------|
| 预设角色 | 7类工程专家 | 160+功能角色 | **36位名人** | **13位蒸馏名人** | ❌ 无 |
| 名人/SOUL角色 | ❌ | ❌ | ✅ 马斯克/乔布斯等 | ✅ 5层人格模型 | ❌ |
| 协作模式 | 任务图编排 | 任务图并行 | **Party Mode群聊** | 单Agent | hub-and-spoke |
| 自主循环讨论 | ❌ | ❌ | ✅ | ❌ | ❌ |
| 终止机制 | 任务完成 | 任务完成 | Smart Suggest | - | 任务完成 |
| 可视化 | Expert Team Canvas | 对话流 | 对话 | Skill文件 | ExpertTeamView(未启用) |
**关键洞察**
- 主流编程工具Qoder/WorkBuddy/MetaGPT**均未采用名人角色**名人角色存在于独立生态Legends MCP、colleague.skill
- Fischer 若做"名人蒸馏 + 自主循环讨论",是**差异化机会**
- 可参考AgentVerse 通信框架 + colleague.skill 5层人格模型 + ARMOR-MAD 协议阈值终止
### 1.3 动机
用户希望除了"自动创建子 agent 处理复杂任务"外,还能创建**预设固定的名人专家团**(如私董会:马斯克、贝佐斯、张小龙),针对主题进行**自主循环讨论**,各专家发表意见、碰撞观点,直到得出结果或用户干预。整个过程**像群聊一样**呈现。
---
## 2. 目标与非目标
### 2.1 目标
1. **新增私董会讨论模式** — 与现有 hub-and-spoke 任务分解模式并列,通过 `@board` 前缀触发
2. **预设名人专家库** — 内置 5-8 位名人专家YAML 定义 persona/thinking_style/speaking_style
3. **自主循环讨论** — 每轮全员发言(并行生成)+ 主持人小结,达到最大轮次后主持人给出最终决策建议
4. **群聊式体验** — 前端以群聊形式展示讨论过程,专家消息带头像/颜色/角色标识
5. **用户随时干预** — 用户可在任意轮次插入消息影响讨论方向
6. **主聊天流程集成** — 在 `chat.py` 中接入 `BoardRouter`,不再回退到 REACT
### 2.2 非目标
1. **不集成外部蒸馏工具**colleague.skill/nuwa-skill—— 未来可扩展,本期仅 YAML 定义
2. **不实现 LLM 自动蒸馏** —— 本期仅人工编写 YAML
3. **不实现共识检测自动终止** —— 仅最大轮次 + 用户干预
4. **不改动现有 hub-and-spoke 模式** —— `@team` 保持不变
5. **不做技术评审/创意脑暴场景** —— 本期聚焦决策类私董会
6. **不做 Expert Team Canvas 式可视化** —— 复用现有群聊 UI仅增强专家消息展示
7. **不实现专家间直接通信** —— 专家发言基于共享讨论历史,不直接对话
---
## 3. 用户故事
### 3.1 主流程:发起私董会
> 作为产品负责人,我希望就一个决策类问题(如"是否该做 X 功能")召集名人专家团讨论,获得多视角建议,以便做出更明智的决策。
**触发**:用户输入 `@board:elon_musk,jeff_bezos,allenzhang 是否该做私董会功能?`
**期望**
- 系统识别 `@board` 前缀,加载指定名人专家
- 主持人(默认首位或系统指定)开场介绍议题
- 马斯克从第一性原理视角发言
- 贝佐斯从 Day 1/客户至上视角发言
- 张小龙从用户体验视角发言
- 主持人小结本轮要点
- 进入下一轮,专家基于前序讨论继续
- 达到最大轮次(默认 5 轮)后,主持人给出最终决策建议
- 全过程以群聊形式展示,用户可随时插入消息
### 3.2 干预流程:用户介入讨论
> 作为用户,我希望在讨论过程中随时插入观点或追问,影响讨论方向。
**触发**:讨论进行中,用户输入 `我觉得成本不是主要问题,关键是用户接受度`
**期望**
- 系统将用户消息广播给所有专家
- 下一轮发言时,专家会参考用户观点调整发言方向
- 主持人小结时提及用户观点
### 3.3 配置流程:使用预设专家团
> 作为用户,我希望直接使用预设的"私董会专家团"模板,无需每次指定专家名。
**触发**:用户输入 `@board:private_board 是否该做 X 功能?``@board 是否该做 X 功能?`(使用默认私董会模板)
**期望**
- 系统识别 `private_board` 模板,加载预设的 3-5 位名人专家
- 后续流程与主流程一致
### 3.4 扩展流程:自定义专家
> 作为高级用户,我希望创建自己的名人专家 YAML 文件,扩展专家库。
**触发**:用户在 `configs/experts/` 目录下创建 `linus.yaml`
**期望**
- 系统启动时自动加载 `configs/experts/*.yaml`
- 用户可通过 `@board:linus 讨论主题` 调用自定义专家
---
## 4. 功能需求
### 4.1 路由与触发
**FR-1: `@board` 前缀路由**
- 支持两种格式:
- `@board:expert1,expert2 讨论主题` — 指定专家
- `@board 讨论主题` — 使用默认私董会模板(`private_board`
- 专家名验证:`^[a-zA-Z0-9_-]{1,64}$`,最多 10 位专家
- 至少 1 位专家,否则提示选择
- 未识别的专家名:提示可用专家列表
- 路由结果包含:专家配置列表、讨论主题、是否使用默认模板
**FR-2: 与现有路由共存**
- `@board``@team` 互不干扰
- `@board` 优先级高于普通聊天,低于系统命令
-`RequestPreprocessor` 或等效位置集成 `BoardRouter`
### 4.2 专家配置
**FR-3: 预设名人专家库**
- 新增 `configs/experts/` 目录
- 内置 5-8 位名人专家 YAML
- `elon_musk.yaml` — 第一性原理、物理思维、激进创新
- `jeff_bezos.yaml` — Day 1 思维、客户至上、长期主义
- `allenzhang.yaml` — 用户体验、极简主义、社交产品直觉
- `charlie_munger.yaml` — 心智模型、跨学科思维、逆向思考
- `paul_graham.yaml` — 创业、做用户想要的东西、反从众
- `steve_jobs.yaml` — 产品设计、现实扭曲力场、专注
- `warren_buffett.yaml` — 价值投资、能力圈、复利思维
- `ray_dalio.yaml` — 原则驱动决策、极度透明、 believability-weighted
- 每个 YAML 包含:`name`、`persona`、`thinking_style`、`speaking_style`、`avatar`、`color`、`bound_skills`(可选)
**FR-4: `ExpertConfig` 扩展**
- 新增 `speaking_style: str` 字段 — 描述表达风格(如"直接、用比喻、偶尔尖锐"
- 新增 `decision_framework: str` 字段(可选)— 描述决策框架(如"第一性原理"、"Day 1"
- 字段需有默认值,向后兼容现有 `@team` 模式
**FR-5: 默认私董会模板**
- 内置 `private_board` 模板,包含 3-5 位默认名人专家
- 模板可被用户 YAML 覆盖
### 4.3 讨论引擎
**FR-6: `BoardTeam` 容器**
- 复用 `Expert`、`AgentPool`、`HandoffTransport`、`SharedWorkspace`
- 新增 `BoardStatus` 枚举:`FORMING` → `DISCUSSING``CONCLUDING``COMPLETED``DISSOLVED`
- 持有:专家列表、主持人名、讨论主题、讨论历史(所有发言)、当前轮次、最大轮次
- 主持人默认为首位专家,可通过配置指定
**FR-7: `BoardOrchestrator` 讨论引擎**
- **开场阶段**:主持人介绍议题、说明讨论规则
- **讨论阶段**(循环):
- 每轮:所有非主持人专家**并行生成发言**(基于讨论历史 + 角色 prompt
- 每轮结束:主持人小结本轮要点、判断是否继续
- 发言生成需注入:角色 persona、thinking_style、speaking_style、完整讨论历史、当前轮次/最大轮次
- **总结阶段**:达到最大轮次后,主持人给出最终决策建议(含各方观点汇总、共识点、分歧点、建议行动)
- **用户干预处理**:用户消息插入讨论历史,下一轮发言时专家可见
**FR-8: 讨论历史管理**
- 讨论历史结构:`[{round, expert_name, content, timestamp}]`
- 每轮发言后追加到历史
- 主持人小结也作为历史的一部分
- 用户干预消息标记为 `role: "user"`,与专家发言区分
- 历史过长时(超过 token 限制):主持人先压缩历史,再继续
**FR-9: 终止条件**
- **正常终止**:达到最大轮次(默认 5可配置 1-10
- **用户终止**:用户发送 `/stop``停止讨论`
- **异常终止**LLM 不可用或所有专家发言失败 → 主持人用已有历史总结
- 终止后广播 `board_concluded` 事件
### 4.4 WebSocket 事件
**FR-10: 新增事件类型**
| 事件 | 触发时机 | 数据 |
|------|---------|------|
| `board_started` | 讨论开始 | `{team_id, topic, experts: [{name, avatar, color, is_moderator}], max_rounds}` |
| `expert_speech` | 专家发言完成 | `{expert_name, expert_avatar, expert_color, content, round}` |
| `round_summary` | 主持人小结完成 | `{moderator_name, content, round, continue: bool}` |
| `user_intervention` | 用户消息广播 | `{content, round}` |
| `board_concluded` | 讨论结束 | `{summary, decision_advice, total_rounds, consensus_points, dissent_points}` |
**FR-11: 事件广播**
- 通过 `handoff_transport.send(team_channel, event)` 广播
-`chat.py` 中通过 `emit_team_event()` 推送到 WebSocket
- 事件类型加入 `_VALID_TEAM_EVENT_TYPES`
### 4.5 前端展示
**FR-12: 群聊式 UI**
- 复用现有 `ExpertMessage.vue` 组件,增强展示:
- 专家头像emoji 或图片)
- 专家名 + 角色标签(如"主持人"、"第一性原理视角"
- 发言内容(支持 markdown
- 轮次标识(如"第 2 轮"
- 主持人小结以特殊样式区分(如背景色、边框)
- 用户干预消息以右侧气泡展示(区别于专家左侧)
**FR-13: 讨论状态展示**
- 顶部显示:讨论主题、当前轮次/最大轮次、参与专家列表
- 专家列表可点击查看其所有发言
- 讨论结束后展示总结卡片(决策建议、共识点、分歧点)
**FR-14: 干预输入**
- 讨论进行中,输入框保持可用
- 用户输入即作为干预消息广播
- 支持 `/stop` 命令终止讨论
### 4.6 配置
**FR-15: `agentkit.yaml` 配置项**
```yaml
board:
max_rounds: 5 # 默认最大轮次
default_template: private_board # 默认私董会模板
parallel_speech: true # 是否并行生成发言
history_compression_threshold: 4000 # 历史 token 超过此值时压缩
```
---
## 5. 范围边界
### 5.1 包含
- `BoardTeam`、`BoardOrchestrator`、`BoardRouter` 新模块
- `configs/experts/` 预设名人 YAML5-8 位)
- `ExpertConfig` 扩展(`speaking_style`、`decision_framework`
- WebSocket 事件5 个新事件)
- 前端群聊式展示增强
- 主聊天流程集成(`chat.py` 接入 `BoardRouter`
- 单元测试覆盖核心逻辑
### 5.2 延后Deferred for later
- 集成外部蒸馏工具colleague.skill/nuwa-skill
- LLM 自动蒸馏生成名人 SOUL
- 共识检测自动终止(置信度/投票)
- 技术评审/创意脑暴场景
- Expert Team Canvas 式可视化
- 专家间直接通信(辩论模式)
- 语音/视频输出
- 历史讨论回顾与检索
### 5.3 不在本产品身份内Outside this product's identity
- 实时名人数据更新(如抓取最新推文更新 persona
- 名人本人授权或验证
- 娱乐向角色扮演(非决策用途)
---
## 6. 依赖与假设
### 6.1 依赖
- **现有基础设施**`Expert`、`AgentPool`、`HandoffTransport`、`SharedWorkspace`、`ExpertTemplateRegistry`
- **LLM Gateway**`src/agentkit/llm/` 提供多 provider 支持
- **WebSocket**`src/agentkit/server/routes/chat.py` 现有 WebSocket 通道
- **前端组件**`ExpertMessage.vue`、`ExpertTeamView.vue`、`stores/team.ts`
### 6.2 假设
1. **YAML 足够体现名人思维** — 人工编写的 persona/thinking_style/speaking_style 能让 LLM 生成有差异化的发言,无需深度蒸馏
2. **并行发言可行** — 专家发言基于共享历史,无需严格顺序,可并行生成
3. **token 消耗可接受** — 5 轮 × 5 专家 = 25 次 LLM 调用,单次讨论成本在可接受范围
4. **现有 `Expert` 可复用**`Expert` 包装器的 `send_message`、`team_context` 注入机制适用于讨论模式
5. **前端群聊 UI 可扩展**`ExpertMessage.vue` 可通过 props 增强展示,无需重写
### 6.3 风险
| 风险 | 影响 | 缓解 |
|------|------|------|
| 专家发言同质化 | 讨论质量低,失去多视角价值 | 强化角色 prompt 差异化,提供 `decision_framework` 字段 |
| token 消耗过高 | 成本问题 | 提供轮次配置,历史压缩机制 |
| 讨论发散无结论 | 用户体验差 | 主持人每轮小结,最终强制总结 |
| 名人 persona 不准确 | 发言不像本人 | YAML 可迭代优化,未来支持蒸馏 |
| 与现有 `@team` 集成冲突 | 路由混乱 | 独立 `BoardRouter`,前缀明确区分 |
---
## 7. 成功标准
### 7.1 功能完成标准
- [ ] `@board:elon_musk,jeff_bezos 讨论主题` 能触发私董会讨论
- [ ] `@board 讨论主题` 能使用默认模板
- [ ] 预设 5-8 位名人专家 YAML 可用
- [ ] 每轮专家并行发言,主持人小结
- [ ] 达到最大轮次后主持人给出最终决策建议
- [ ] 用户可随时插入消息影响讨论
- [ ] 用户可 `/stop` 终止讨论
- [ ] 前端以群聊形式展示讨论过程
- [ ] WebSocket 事件正确广播和接收
- [ ] 单元测试覆盖率 ≥ 80%
### 7.2 质量标准
- 专家发言有明确角色差异(第一性原理 vs Day 1 vs 用户体验)
- 主持人小结能准确归纳本轮要点
- 最终决策建议包含各方观点汇总、共识点、分歧点
- 单次讨论 token 消耗可预测(提供配置项)
### 7.3 集成标准
- `@board``@team` 互不干扰
- 不破坏现有聊天流程
- 前端群聊 UI 兼容现有专家消息展示
---
## 8. 开放问题
1. **主持人选择策略**:默认首位专家作为主持人,还是引入独立的" facilitator"角色(非名人,专职主持)?
- **当前决策**:默认首位专家,可配置。未来可扩展独立 facilitator。
2. **专家发言顺序**:并行生成时,前端展示顺序如何确定?
- **当前决策**:按专家列表顺序展示,即使并行生成也按配置顺序追加到 UI。
3. **讨论历史 token 管理**5 轮 × 5 专家的历史可能超过上下文窗口,压缩策略如何?
- **当前决策**:超过阈值时主持人先压缩历史(保留关键观点),再继续。具体阈值和压缩 prompt 在 planning 阶段细化。
4. **预设名人选择**:内置哪 5-8 位名人最合适?
- **当前决策**马斯克、贝佐斯、张小龙、芒格、Paul Graham、乔布斯、巴菲特、Ray Dalio。可在 planning 阶段调整。
5. **与现有 `TEAM_COLLAB` 集成**:是否需要同时修复 `@team``chat.py` 的集成缺口?
- **当前决策**:本期聚焦 `@board``@team` 集成作为独立任务。但 `emit_team_event()` 的调用模式可复用。
---
## 9. 建议的实现路径(供 ce-plan 参考)
### 9.1 模块结构
```
src/agentkit/experts/
├── __init__.py # 新增导出
├── config.py # 扩展 ExpertConfig
├── expert.py # 复用
├── team.py # 现有 hub-and-spoke不动
├── orchestrator.py # 现有(不动)
├── plan.py # 现有(不动)
├── registry.py # 复用
├── router.py # 现有 @team不动
├── board.py # 新增BoardTeam, BoardStatus
├── board_orchestrator.py # 新增BoardOrchestrator
└── board_router.py # 新增BoardRouter, @board 前缀
configs/experts/ # 新增目录
├── elon_musk.yaml
├── jeff_bezos.yaml
├── allenzhang.yaml
├── charlie_munger.yaml
├── paul_graham.yaml
├── steve_jobs.yaml
├── warren_buffett.yaml
└── ray_dalio.yaml
```
### 9.2 关键集成点
- `src/agentkit/server/routes/chat.py` — 接入 `BoardRouter`,调用 `emit_team_event()`
- `src/agentkit/server/app.py` — 启动时加载 `configs/experts/*.yaml``ExpertTemplateRegistry`
- `src/agentkit/server/frontend/src/api/types.ts` — 新增 WebSocket 事件类型
- `src/agentkit/server/frontend/src/stores/chat.ts` — 新增事件处理
- `src/agentkit/server/frontend/src/components/chat/ExpertMessage.vue` — 增强展示
### 9.3 测试策略
- `tests/unit/experts/test_board.py` — BoardTeam 测试
- `tests/unit/experts/test_board_orchestrator.py` — 讨论流程测试
- `tests/unit/experts/test_board_router.py` — 路由测试
- `tests/unit/experts/test_config.py` — 新字段测试
- Mock LLM Gateway 进行集成测试
---
## 10. 对标差距总结
### 10.1 Fischer 当前 vs Qoder/WorkBuddy
| 维度 | Fischer 当前 | Qoder/WorkBuddy | 差距 |
|------|-------------|-----------------|------|
| 主聊天集成 | ❌ 未集成 | ✅ 完整集成 | **关键差距** |
| 预设专家 | ❌ 无 | ✅ 7-160+ | **关键差距** |
| 可视化 | 未启用 | Expert Team Canvas | 中等差距 |
| 协作模式 | hub-and-spoke | 任务图编排 | 模式不同,非差距 |
| 失败处理 | 三层 fallback | 高风险确认 | Fischer 更轻量 |
### 10.2 Fischer 私董会模式 vs Legends MCP/colleague.skill
| 维度 | Fischer 私董会(规划) | Legends MCP/colleague.skill | 优势 |
|------|----------------------|----------------------------|------|
| 名人角色 | 5-8 位 YAML | 13-36 位蒸馏 | 精度较低,但可扩展 |
| 讨论模式 | 全员发言+主持人小结 | Party Mode | Fischer 更结构化 |
| 终止机制 | 最大轮次+主持人总结 | Smart Suggest | Fischer 更可控 |
| 集成度 | 深度集成到 AgentKit | 独立工具 | Fischer 更一体化 |
| 可扩展 | YAML + 未来蒸馏 | 蒸馏工具 | Fischer 更开放 |
### 10.3 优劣势总结
**Fischer 私董会模式的优势**
1. **结构化讨论** — 主持人小结机制,避免发散
2. **可控终止** — 最大轮次 + 用户干预,成本可预测
3. **深度集成** — 与 AgentKit 生态无缝衔接
4. **可扩展** — YAML 定义 + 未来蒸馏工具集成
**劣势**
1. **名人精度** — YAML 人工编写,不如蒸馏精确
2. **无共识检测** — 仅轮次终止,可能未达共识就结束
3. **无专家间直接通信** — 辩论深度有限
4. **前置依赖** — 需先完成主聊天流程集成
---
**下一步**: 交由 `/ce-plan` 进行详细实现规划。