fischer-agentkit/docs/plans/2026-06-24-003-feat-expert-...

18 KiB
Raw Blame History

date plan_id type title status origin
2026-06-24 2026-06-24-003 feat feat: 专家团项目经理模式协同 active docs/brainstorms/2026-06-24-expert-team-project-manager-collaboration-requirements.md

专家团项目经理模式协同 — 实现计划

Summary

将专家团 Lead 从"甩手掌柜"升级为"项目经理"——制定计划时定义协作契约,执行过程中监控进展,阶段完成后验收成果(不合格可返工),冲突时协调。专家间通过协作契约实现"可见+可协助"。前端以协作关系图可视化专家间互动。基于 U1-U6 辩论机制基础增量构建。

Problem Frame

当前专家团执行模式(src/agentkit/experts/orchestrator.pyLead 分解任务 → 拓扑排序 → 专家孤立执行(仅看到 dependency_outputs→ Lead 汇总。Lead 是甩手掌柜,专家间无直接通信(team.py 注释明确写了"No inter-agent communication")。

U1-U6 引入了辩论机制DEBATE phase + 分歧检测 + 用户干预),但辩论是异常处理,不是常态协作。用户的核心痛点是:当前体现不出多 agent 协同工作——无论是执行效果还是 UI/UE。

需求文档(docs/brainstorms/2026-06-24-expert-team-project-manager-collaboration-requirements.md定义了项目经理模式Lead 全程主导(制定计划、安排任务、冲突协调、成果验收),专家间通过协作契约实现可见+可协助。

Requirements

本计划覆盖需求文档中的 R1-R17按以下映射组织

需求 ID 描述 实现单元
R1, R2 Lead 项目经理角色 + 协作契约定义 U1
R3, R6, R7 Lead 监控 + 专家可见 + 主动通知 U2
R4 冲突协调(复用 U1-U6 辩论) 已有基础
R5, R10, R11 验收 + 返工 + 上限 U3
R8, R9 风险标记 + 请求协助 U4
R12, R13, R14 前端协作关系图 + 验收状态 + 实时互动 U5
R15, R16 与私董会区分 架构固有
R17 CLI 协同事件渲染 U6

Key Technical Decisions

KTD1: 协作契约嵌入 PlanPhase 而非独立实体。 协作契约是阶段的属性,不是独立的生命周期对象。每个 PlanPhase 携带 collaboration_contracts: list[CollaborationContract],定义该阶段中哪些专家需要协作、协作内容是什么。理由:契约与阶段强绑定,独立实体增加不必要的复杂度。

KTD2: 专家可见范围限定在协作契约内。 打破 KTD3 的完全上下文隔离,但不是完全开放——专家只能看到协作契约中指定的相关专家输出,而非所有专家的所有工作。理由:平衡"可见"需求与信息过载风险。

KTD3: 验收作为阶段完成的门控。_execute_execution_phase 完成后、标记 COMPLETED 前,插入 _review_phase_output 步骤。Lead 用 LLM 判断输出是否满足要求。理由:验收是项目经理的核心职责,也是质量保证的关键环节。

KTD4: 返工通过阶段状态回退实现。 验收不合格时,将阶段状态从 RUNNING 回退到 PENDING附带 Lead 的修改要求,重新执行。返工次数上限 MAX_REWORKS=2超过则标记 FAILED。理由复用现有执行流程不引入新的执行路径。

KTD5: 风险标记通过 WS 事件 + Lead 决策实现。 专家在执行过程中可通过输出中的特殊标记(如 [RISK: ...]标记风险。Orchestrator 解析标记,发出 risk_flagged 事件Lead 决定是否调整计划。理由:不改变专家的执行流程,通过输出解析实现风险标记。

KTD6: 前端协作关系图用 SVG 实现。 节点=专家(圆形+头像),边=协作关系(实线=契约,虚线=数据流向验收状态用颜色标记。理由SVG 足够表达这种关系图,无需引入 Canvas/WebGL 的复杂度。

High-Level Technical Design

项目经理模式执行流程

用户发送 @team <task>
  │
  ▼
Lead 制定计划(含协作契约)  ◄── U1
  │  ── collaboration_contract_defined 事件
  ▼
拓扑排序 → 层执行
  │
  ▼
专家执行阶段  ◄── U2
  │  ├── 按协作契约读取相关专家输出(可见)
  │  ├── 执行任务
  │  ├── 完成后按协作契约通知相关专家(可协助)
  │  │   ── collaboration_notice 事件
  │  └── 可标记风险  ◄── U4
  │      ── risk_flagged 事件 → Lead 决策
  ▼
Lead 验收  ◄── U3
  │  ├── 合格 → 标记 COMPLETED进入下一阶段
  │  │   ── review_result 事件passed
  │  └── 不合格 → 返工(回退到 PENDING附修改要求
  │      ── review_result 事件failed + feedback
  │      返工次数 > MAX_REWORKS → 标记 FAILED
  ▼
分歧检测(复用 U3 辩论机制)
  │  └── 检测到分歧 → 插入 DEBATE phase
  ▼
所有阶段完成 → Lead 汇总 → 团队解散

协作契约数据流

Lead 分解任务
  │
  ├── Phase A (后端): collaboration_contracts = [
  │     {to_expert: "前端", content: "API 定义", status: "pending"}
  │   ]
  │
  └── Phase B (前端): collaboration_contracts = [
        {from_expert: "后端", content: "API 定义", status: "pending"}
      ]

Phase A 执行完成
  │
  ├── 后端输出写入 SharedWorkspace
  ├── 后端按契约通知前端 ── collaboration_notice 事件
  │
  ▼
Phase B 执行时
  │
  └── 前端按契约从 SharedWorkspace 读取后端输出(可见)

Implementation Units

U1. 协作契约数据模型 + Lead 生成契约

Goal: 在 PlanPhase 中添加协作契约字段,修改 Lead 分解任务的 prompt 和解析逻辑,使 Lead 在制定计划时定义专家间的协作关系。

Requirements: R1, R2

Dependencies: 无(基于 U1-U6 辩论基础)

Files:

  • src/agentkit/experts/plan.py — 添加 CollaborationContract dataclassPlanPhase 添加 collaboration_contracts 字段
  • src/agentkit/experts/orchestrator.py — 修改 _decompose_task prompt修改 _parse_phases 解析契约
  • tests/unit/experts/test_plan.py — 协作契约数据模型测试
  • tests/unit/experts/test_pm_collaboration.py — Lead 生成契约测试

Approach:

  1. 定义 CollaborationContract dataclassfrom_expert: str, to_expert: str, content_description: str, status: strpending/delivered/received
  2. PlanPhase 添加 collaboration_contracts: list[CollaborationContract] 字段,更新 to_dict/from_dict
  3. 修改 _decompose_task 的 prompt要求 Lead 在分解任务时为每个阶段定义协作契约
  4. 修改 _parse_phases 解析 LLM 返回的协作契约信息
  5. 在 plan_update 事件中包含协作契约信息

Patterns to follow: PhaseType + debate_config 的添加模式U1 辩论基础)

Test scenarios:

  • Happy path: CollaborationContract 序列化/反序列化正确
  • Happy path: PlanPhase 携带 collaboration_contracts 序列化/反序列化正确
  • Happy path: Lead 分解任务时生成的 phases 包含协作契约
  • Edge case: 协作契约为空列表时正常工作
  • Edge case: LLM 返回的协作契约格式不正确时优雅降级(空契约列表)
  • Integration: plan_update 事件包含协作契约信息

Verification: Lead 分解任务后,每个 PlanPhase 携带协作契约;前端能从 plan_update 事件中获取协作契约信息。


U2. 协作契约执行 — 专家可见 + 主动通知

Goal: 专家执行时按协作契约读取相关专家的输出(可见),完成后按契约主动通知相关专家(可协助)。

Requirements: R3, R6, R7

Dependencies: U1

Files:

  • src/agentkit/experts/orchestrator.py — 修改 _execute_execution_phase,添加 _notify_collaborators 方法
  • tests/unit/experts/test_pm_collaboration.py — 协作契约执行测试

Approach:

  1. 修改 _execute_execution_phase:除了 dependency_outputs还按协作契约中的 from_expert 读取相关专家的输出,注入到专家的 context 中
  2. 专家完成后,调用 _notify_collaborators:遍历当前阶段的 collaboration_contracts对每个 to_expert 发出 collaboration_notice 事件
  3. 更新契约状态为 delivered
  4. collaboration_notice 事件包含from_expert, to_expert, content_description, phase_id, output_key

Patterns to follow: _execute_execution_phase 中 dependency_outputs 的读取模式

Test scenarios:

  • Happy path: 专家执行时能读到协作契约中 from_expert 的输出
  • Happy path: 专家完成后,协作契约中的 to_expert 收到 collaboration_notice 事件
  • Happy path: 契约状态从 pending 更新为 delivered
  • Edge case: 协作契约中 from_expert 的输出不存在时,专家仍能正常执行(无额外 context
  • Edge case: 协作契约为空时,行为与当前一致(向后兼容)
  • Integration: collaboration_notice 事件被正确广播

Verification: 专家执行时能看到协作契约中相关专家的输出;完成后相关专家收到通知。


U3. Lead 验收环节 + 返工机制

Goal: 每个阶段完成后Lead 验收输出质量。合格则进入下一阶段,不合格则要求返工,返工有次数上限。

Requirements: R5, R10, R11

Dependencies: U1

Files:

  • src/agentkit/experts/orchestrator.py — 添加 _review_phase_output 方法,修改 _execute_execution_phase 插入验收步骤
  • tests/unit/experts/test_pm_collaboration.py — 验收与返工测试

Approach:

  1. 添加 MAX_REWORKS = 2 类常量
  2. 在 PlanPhase 中添加 rework_count: int = 0 字段和 review_feedback: str | None = None 字段
  3. 添加 _review_phase_output(phase, result) -> tuple[bool, str] 方法Lead 用 LLM 判断输出是否满足阶段要求,返回 (passed, feedback)
  4. _execute_execution_phase 中,专家执行完成后、标记 COMPLETED 前,调用 _review_phase_output
  5. 验收合格 → 标记 COMPLETED发出 review_result 事件passed
  6. 验收不合格 → rework_count += 1若未超上限则回退状态到 PENDING附 feedback重新执行若超上限则标记 FAILED
  7. 发出 review_result 事件passed/failed + feedback

Patterns to follow: _detect_divergence 的 LLM 判断模式U3 辩论基础)

Test scenarios:

  • Happy path: 验收合格时,阶段标记 COMPLETED发出 review_resultpassed事件
  • Happy path: 验收不合格时,阶段回退到 PENDING附 feedback重新执行
  • Edge case: 返工次数达到 MAX_REWORKS 仍不合格,标记 FAILED
  • Edge case: Lead LLM 不可用时,跳过验收直接标记 COMPLETED优雅降级
  • Integration: review_result 事件被正确广播,包含 feedback

Verification: 阶段完成后 Lead 验收;不合格可返工;返工超限标记失败。


U4. 专家风险标记 + Lead 调整

Goal: 专家执行时可标记风险Lead 收到风险标记后决定是否调整计划(插入辩论、要求返工、或接受风险继续)。

Requirements: R8, R9

Dependencies: U1

Files:

  • src/agentkit/experts/orchestrator.py — 添加 _parse_risk_flags 方法,修改 _execute_execution_phase 解析风险标记
  • tests/unit/experts/test_pm_collaboration.py — 风险标记测试

Approach:

  1. 定义风险标记格式:专家输出中包含 [RISK: <风险描述>] 标记
  2. 添加 _parse_risk_flags(content) -> list[str] 方法:从专家输出中解析风险标记
  3. _execute_execution_phase 中,专家执行完成后,解析输出中的风险标记
  4. 若有风险标记,发出 risk_flagged 事件expert, risk_description, phase_id
  5. Lead 收到风险标记后,用 LLM 决策:接受风险继续 / 插入辩论协调 / 要求返工
  6. 风险标记不影响阶段状态(仍可 COMPLETED但 Lead 的决策可能触发后续动作

Patterns to follow: _detect_divergence 的 LLM 判断模式

Test scenarios:

  • Happy path: 专家输出包含 [RISK: ...] 标记时risk_flagged 事件被发出
  • Happy path: 专家输出不包含风险标记时,无 risk_flagged 事件
  • Edge case: 多个风险标记都被解析
  • Edge case: 风险标记格式不正确时被忽略
  • Integration: risk_flagged 事件包含专家名称和风险描述

Verification: 专家可标记风险Lead 收到风险标记后做出决策。


U5. 前端协作关系图

Goal: 前端以协作关系图可视化专家间互动——节点为专家,边为协作关系和数据流向,验收状态用颜色标记。

Requirements: R12, R13, R14

Dependencies: U1, U2, U3, U4

Files:

  • src/agentkit/server/frontend/src/api/types.ts — 新增 WS 事件类型和数据接口
  • src/agentkit/server/frontend/src/stores/chat.ts — 新增 collaborationState ref处理新事件
  • src/agentkit/server/frontend/src/components/chat/messages/CollaborationGraphCard.vue — 新建协作关系图组件
  • src/agentkit/server/frontend/src/components/chat/messages/ReviewResultCard.vue — 新建验收结果卡片
  • src/agentkit/server/frontend/src/components/chat/messages/RiskFlagCard.vue — 新建风险标记卡片
  • src/agentkit/server/frontend/src/components/chat/messages/index.ts — 新增导出
  • src/agentkit/server/frontend/src/components/chat/helpers/useMessageRenderer.ts — 新增视图类型

Approach:

  1. types.ts 中新增 WS 事件类型:collaboration_contract_defined, collaboration_notice, review_result, risk_flagged
  2. 新增数据接口:ICollaborationContract, ICollaborationNotice, IReviewResult, IRiskFlag
  3. chat.ts 中新增 collaborationState ref存储协作契约、通知、验收结果、风险标记
  4. 新增 switch case 处理 4 种新事件
  5. CollaborationGraphCard.vueSVG 绘制节点(专家圆形+头像)和边(实线=契约,虚线=数据流向),验收状态用颜色标记(绿=通过,黄=待验收,红=返工/失败)
  6. ReviewResultCard.vue展示验收结果passed/failed + feedback
  7. RiskFlagCard.vue:展示风险标记(专家 + 风险描述)
  8. useMessageRenderer.ts 中新增视图类型和渲染规格

Patterns to follow: U5 辩论可视化的 BoardState 模式debateState ref + 事件 switch case + 专用卡片组件)

Test scenarios:

  • Happy path: collaboration_contract_defined 事件触发协作关系图渲染
  • Happy path: collaboration_notice 事件在图上显示数据流向(虚线动画)
  • Happy path: review_result 事件更新节点颜色(绿=通过,红=返工)
  • Happy path: risk_flagged 事件显示风险标记卡片
  • Edge case: 无协作契约时,协作关系图显示空状态
  • Edge case: 多个协作契约同时存在时,图正确渲染所有边

Verification: 前端能渲染协作关系图;验收状态和风险标记实时可见。


U6. CLI 协同事件渲染

Goal: CLI 支持项目经理模式的协同事件渲染,延续 U6 辩论 Rich 渲染模式。

Requirements: R17

Dependencies: U1, U2, U3, U4

Files:

  • src/agentkit/cli/chat.py — 在 _execute_team_cli 中添加协同事件渲染
  • tests/unit/cli/test_chat_multiagent.py — 扩展测试

Approach:

  1. _execute_team_cli 的事件处理循环中,新增 4 种事件的处理:
    • collaboration_contract_defined:用 Panel 展示协作契约列表
    • collaboration_notice:用带颜色的文本展示"专家A → 专家B: 内容描述"
    • review_result用绿色passed或红色failedPanel 展示验收结果和 feedback
    • risk_flagged:用黄色 Panel 展示风险标记
  2. 更新 _print_help 帮助文本,说明项目经理模式的协同特性

Patterns to follow: U6 辩论事件的 Rich 渲染模式Panel/Markdown/colored text

Test scenarios:

  • Happy path: collaboration_contract_defined 事件正确渲染为 Panel
  • Happy path: collaboration_notice 事件正确渲染为带颜色的文本
  • Happy path: review_result 事件正确渲染passed=绿色failed=红色)
  • Happy path: risk_flagged 事件正确渲染为黄色 Panel
  • Edge case: 事件数据缺失时优雅降级
  • Integration: _print_help 包含项目经理模式说明

Verification: CLI 能渲染 4 种协同事件;帮助文本包含项目经理模式说明。


Scope Boundaries

In Scope

  • 协作契约数据模型 + Lead 生成契约U1
  • 专家按契约可见 + 主动通知U2
  • Lead 验收 + 返工机制U3
  • 专家风险标记 + Lead 调整U4
  • 前端协作关系图U5
  • CLI 协同事件渲染U6

Deferred to Follow-Up Work

  • 实时协作面板Figma/Google Docs 式)——协作关系图已满足当前需求
  • 专家完全自主互动(无固定协议)——当前保持协作契约的结构化协作
  • 协作关系图的拖拽交互——当前只做可视化展示
  • 专家请求协助的主动通信——当前只做风险标记,请求协助作为后续迭代

Outside this Product's Identity

  • 私董会模式融合——专家团和私董会是两种根本不同的协同方式
  • 去中心化协作(共享黑板模式)——与私董会界限模糊

Risks & Dependencies

依赖 U1-U6 辩论机制: 冲突协调复用 DEBATE phase 机制不重新建设。U1-U6 的分歧检测、用户干预通道等基础设施可直接复用。

LLM 调用次数显著增加: Lead 不只分解+汇总,还要定义协作契约、验收成果、决策风险。每个阶段至少多 1-2 次 LLM 调用(验收 + 风险决策)。需评估成本影响,必要时可配置开关。

上下文隔离被打破: 专家需看到协作契约中相关专家的工作KTD3 的完全隔离不再成立。通过限定可见范围(仅协作契约内的专家)控制信息过载。

协作契约质量依赖 Lead 能力: 如果 Lead 定义的协作契约不好,协同会退化回当前的孤立执行。可通过 prompt engineering 优化,但本质依赖 LLM 能力。

返工循环风险: 验收不合格可能触发返工循环。MAX_REWORKS=2 上限防止无限循环,但极端情况下仍可能导致执行时间过长。

Open Questions

Deferred to Implementation

  • 协作契约的 LLM prompt 具体措辞——需在实现时调试
  • 验收 LLM 判断的准确率——需在实现时验证
  • 风险标记的解析规则是否需要更灵活——当前用 [RISK: ...] 格式,实现时可能需要调整
  • 前端协作关系图的布局算法——当前用简单的圆形布局,实现时可能需要力导向布局