返回

Superpowers 教程 8:subagent-driven-development(多代理并行开发)

subagent-driven-development 通过子代理把任务拆开并行推进:一个主代理做拆解/集成,多个子代理各自负责可验证的小块交付。本文讲清并行任务的拆分原则、输入/输出契约、冲突与合并策略,以及什么时候不该并行。

教程概述

系列目录:Superpowers 教程系列索引

subagent-driven-development 是 Superpowers 的高效执行技能。它通过创建子代理来并行执行实现计划中的任务,每个子代理独立工作,然后由主代理进行审查和整合。

你将学到

  • ✅ subagent-driven-development 的工作流程
  • ✅ 两阶段审查机制
  • ✅ 任务分发策略
  • ✅ 并行执行的优势与限制
  • ✅ 实际案例分析

为什么需要子代理开发?

单代理执行的局限

flowchart LR
    A[任务 1] --> B[任务 2]
    B --> C[任务 3]
    C --> D[任务 4]
    D --> E[任务 5]
    E --> F[完成]
    
    style A fill:#ffcccb
    style B fill:#ffcccb
    style C fill:#ffcccb
    style D fill:#ffcccb
    style E fill:#ffcccb
    
    Note over A,E: 串行执行,耗时长

子代理并行执行

flowchart TD
    M[主代理 - 协调] --> S1[子代理 1 - 数据库]
    M --> S2[子代理 2 - 后端 API]
    M --> S3[子代理 3 - 前端组件]
    
    S1 --> R1[审查 1]
    S2 --> R2[审查 2]
    S3 --> R3[审查 3]
    
    R1 --> I[整合]
    R2 --> I
    R3 --> I
    
    style M fill:#e1f5ff
    style S1 fill:#e8f5e9
    style S2 fill:#e8f5e9
    style S3 fill:#e8f5e9
    style I fill:#fff3e0
    
    Note over S1,S3: 并行执行,耗时短

效果对比

指标 单代理串行 子代理并行
10 个任务耗时 ~50 分钟 ~15 分钟
上下文保持 优秀(每个子代理专注一个任务)
错误恢复 从头开始 只重试失败任务
代码质量 稳定 更稳定(两阶段审查)

subagent-driven-development 详解

触发时机

subagent-driven-development 在以下场景自动触发

  1. 有书面实现计划时 - writing-plans 完成后
  2. 多个独立任务时 - 任务间无依赖或依赖较少
  3. 时间敏感任务 - 需要快速完成时

核心架构

flowchart TD
    subgraph "主会话"
        M[主代理]
        C[协调器]
        R[审查器]
    end
    
    subgraph "子代理池"
        S1[子代理 1]
        S2[子代理 2]
        S3[子代理 3]
        S4[子代理 4]
    end
    
    M --> C
    C -->|分发任务 | S1
    C -->|分发任务 | S2
    C -->|分发任务 | S3
    
    S1 -->|完成任务 | R
    S2 -->|完成任务 | R
    S3 -->|完成任务 | R
    
    R -->|审查通过 | M
    R -->|审查失败 | S1
    
    style M fill:#e1f5ff
    style C fill:#e3f2fd
    style R fill:#fff3e0
    style S1 fill:#e8f5e9
    style S2 fill:#e8f5e9
    style S3 fill:#e8f5e9

两阶段审查机制

每个子代理完成的任务都经过两阶段审查:

阶段 1: 规范符合性审查
├── 是否遵循设计规范?
├── 是否完成任务要求?
├── 测试是否通过?
└── 验收标准是否满足?

阶段 2: 代码质量审查
├── 代码是否清晰?
├── 是否有潜在 Bug?
├── 是否符合最佳实践?
└── 有无需优化的地方?

审查流程

flowchart TD
    A[子代理完成任务] --> B[阶段 1: 规范审查]
    B --> C{符合规范?}
    C -->|否 | D[返回子代理重新完成]
    C -->|是 | E[阶段 2: 质量审查]
    E --> F{质量达标?}
    F -->|否 | G[返回优化建议]
    G --> D
    F -->|是 | H[审查通过,提交]
    D --> A
    
    style B fill:#ffebee
    style E fill:#e3f2fd
    style H fill:#e8f5e9

审查示例

阶段 1: 规范审查

## 审查报告 - 阶段 1

**任务**: Task 3 - 创建标签 API 端点

**规范要求**:
- [x] 实现 GET /api/tags 端点
- [x] 返回 JSON 格式
- [x] 支持分页(page, per_page 参数)
- [x] 包含测试用例

**测试结果**:
```bash
$ pytest tests/test_tag_api.py -v
✓ test_get_tags_list
✓ test_get_tags_pagination
✓ test_get_tags_empty

阶段 1 结论: ✅ 通过 - 符合设计规范


**阶段 2: 代码质量审查**

```markdown
## 审查报告 - 阶段 2

**代码质量评估**:

✅ 优点:
- 代码结构清晰
- 函数命名准确
- 测试覆盖完整

⚠️ 改进建议:

1. 🟡 Minor: 提取分页逻辑为独立函数
   
   当前:
   ```python
   def get_tags(request):
       page = request.GET.get('page', 1)
       per_page = request.GET.get('per_page', 20)
       # 30 行分页逻辑...

建议:

def get_tags(request):
    pagination = get_pagination_params(request)
    # 业务逻辑
  1. 🟡 Minor: 添加类型提示

    def get_tags(request: HttpRequest) -> JsonResponse:
    

阶段 2 结论: ✅ 通过 - 建议优化但不阻塞


## 任务分发策略

### 任务分组原则

按层次分组: ├── 数据库任务组 │ ├── 创建迁移 │ └── 运行迁移 ├── 后端任务组 │ ├── 创建模型 │ ├── 创建 Repository │ └── 创建 Controller └── 前端任务组 ├── 创建组件 └── 编写样式


### 依赖感知的分发

```mermaid
graph TD
    T1[Task 1: 数据库迁移] --> T2[Task 2: 模型]
    T2 --> T3[Task 3: Repository]
    T3 --> T4[Task 4: Controller]
    T3 --> T5[Task 5: Service]
    
    T4 --> T6[Task 6: API 测试]
    T5 --> T6
    
    subgraph "批次 1 - 可并行"
        T1
    end
    
    subgraph "批次 2 - 可并行"
        T2
    end
    
    subgraph "批次 3 - 可并行"
        T3
    end
    
    subgraph "批次 4 - 可并行"
        T4
        T5
    end
    
    subgraph "批次 5"
        T6
    end
    
    style T1 fill:#e1f5ff
    style T2 fill:#e8f5e9
    style T3 fill:#fff3e0
    style T4 fill:#f3e5f5
    style T5 fill:#f3e5f5

分发配置

subagent:
  # 并发控制
  concurrency:
    max_parallel: 3  # 最多 3 个子代理并行
    max_retries: 2   # 失败重试次数
    timeout_minutes: 30  # 单个任务超时
  
  # 任务分配策略
  assignment:
    # 按依赖关系分组
    group_by_dependencies: true
    
    # 相似任务分给同一子代理(保持上下文)
    sticky_assignment: true
  
  # 资源限制
  resources:
    max_memory_mb: 512
    max_tokens: 50000

实际工作流程

完整示例:标签系统开发

步骤 1: 准备计划

# 实现计划 - 标签系统

## Phase 1: 数据库
- Task 1: 创建 tags 表迁移
- Task 2: 创建 article_tags 表迁移
- Task 3: 运行迁移

## Phase 2: 后端
- Task 4: 创建 Tag 模型
- Task 5: 创建 TagRepository
- Task 6: 创建 TagController
- Task 7: 定义 API 路由

## Phase 3: 前端
- Task 8: 创建 TagList 组件
- Task 9: 创建 TagSelect 组件
- Task 10: 集成到文章编辑页

## Phase 4: 测试
- Task 11: 单元测试
- Task 12: 集成测试
- Task 13: E2E 测试

步骤 2: 分发任务

主代理分析依赖关系后分发:

批次 1:
└── 子代理 A: Task 1, Task 2 (数据库迁移,可并行)

批次 2:
└── 子代理 B: Task 3 (运行迁移,依赖 Task 1,2)

批次 3:
├── 子代理 A: Task 4, Task 5 (模型和 Repository)
└── 子代理 B: Task 11 (单元测试,可提前准备)

批次 4:
├── 子代理 A: Task 6, Task 7 (Controller 和路由)
└── 子代理 C: Task 8, Task 9 (前端组件)

批次 5:
├── 子代理 A: Task 12 (集成测试)
├── 子代理 C: Task 10 (前端集成)
└── 子代理 B: Task 13 (E2E 测试准备)

步骤 3: 子代理执行

子代理 A 执行 Task 1:

## 子代理执行报告

**代理**: Agent-A
**任务**: Task 1 - 创建 tags 表迁移
**开始时间**: 10:00
**结束时间**: 10:03

**执行内容**:

1. 创建迁移文件
   - 路径:`database/migrations/20260228_create_tags_table.sql`
   - 内容:CREATE TABLE tags (...)

2. 验证
   - SQL 语法检查通过
   - 文件存在确认

**提交审查**:
- 文件:`database/migrations/20260228_create_tags_table.sql`
- 测试:`sqlint migrations/20260228_create_tags_table.sql`

审查器审查 Task 1:

## 审查结果

**Task 1**: ✅ 通过

阶段 1 - 规范审查:
- [x] 迁移文件创建
- [x] SQL 语法正确
- [x] 包含所有字段

阶段 2 - 代码审查:
- [x] 命名规范
- [x] 包含注释
- [x] 索引合理

**状态**: 已提交到 Git

步骤 4: 并行推进

时间线:

10:00 - 子代理 A 开始 Task 1
10:00 - 子代理 B 开始 Task 2
10:03 - 子代理 A 完成 Task 1,通过审查
10:04 - 子代理 B 完成 Task 2,通过审查
10:04 - 子代理 A 开始 Task 4
10:05 - 子代理 B 开始 Task 3
10:07 - 子代理 A 完成 Task 4,审查中...
10:08 - 子代理 B 完成 Task 3,审查中...
...

步骤 5: 整合完成

所有任务完成后:

✅ Phase 1: 数据库 - 完成
✅ Phase 2: 后端 - 完成
✅ Phase 3: 前端 - 完成
✅ Phase 4: 测试 - 完成

主代理整合:
- 合并所有提交
- 运行完整测试套件
- 准备 finishing-a-development-branch

错误处理与恢复

子代理失败处理

flowchart TD
    A[子代理执行任务] --> B{成功?}
    B -->|是 | C[审查]
    B -->|否 | D{重试次数?}
    D -->|< 最大 | E[重试]
    E --> A
    D -->|>= 最大 | F[标记失败]
    F --> G[主代理介入]
    G --> H{关键任务?}
    H -->|是 | I[主代理亲自完成]
    H -->|否 | J[跳过或延后]
    
    style A fill:#e8f5e9
    style C fill:#e8f5e9
    style F fill:#ffebee
    style I fill:#e3f2fd

失败示例

## 子代理执行失败

**任务**: Task 7 - 定义 API 路由

**失败原因**:
- 路由文件被其他进程锁定
- 重试 2 次后仍然失败

**主代理介入**:
1. 检查文件锁状态
2. 发现是 IDE 预览导致
3. 关闭预览后重试
4. Task 7 完成

**经验记录**:
- 路由文件编辑前检查文件锁
- 与 IDE 集成时需要注意

部分失败处理

场景:10 个任务中 8 个成功,2 个失败

处理策略:
1. 成功的 8 个任务继续审查流程
2. 2 个失败任务重试或主代理介入
3. 不阻塞整体进度
4. 最后统一整合

性能优化

优化 1: 智能批处理

subagent:
  batching:
    # 小任务合并执行
    merge_small_tasks: true
    merge_threshold_minutes: 2
    
    # 示例:
    # Task 1: 创建文件 A (1 分钟)
    # Task 2: 创建文件 B (1 分钟)
    # → 合并给一个子代理执行

优化 2: 上下文缓存

subagent:
  context:
    # 共享上下文,减少重复加载
    shared_context:
      - design_document
      - coding_standards
      - project_structure
    
    # 子代理特定上下文
    per_agent_context:
      - current_task
      - related_files

优化 3: 结果预测

主代理预测任务耗时:
- 数据库迁移:3 分钟
- 模型创建:5 分钟
- 测试编写:10 分钟

根据预测优化分发:
- 长任务优先分发
- 短任务合并执行
- 关键路径任务优先

与其他技能配合

with writing-plans

writing-plans 输出结构化计划
    ↓
subagent-driven-development 解析计划
    ↓
按依赖关系分发任务

with TDD

子代理开始任务
    ↓
test-driven-development 触发
    ↓
子代理先写测试再实现
    ↓
审查包括测试覆盖率检查

with code-review

子代理完成任务
    ↓
requesting-code-review 触发
    ↓
两阶段审查
    ↓
审查通过后提交

最佳实践

1. 任务独立性

✅ 好:任务间无共享状态
❌ 坏:任务需要互相等待

示例:
✅ Task 1: 创建模型 (独立)
   Task 2: 创建组件 (独立)

❌ Task 1: 写入文件 A 的第 1-10 行
   Task 2: 写入文件 A 的第 11-20 行 (会冲突)

2. 合理的并发数

根据资源调整:
- 本地开发:2-3 个子代理
- 云服务器:5-10 个子代理
- 受限时:1 个子代理(退化为串行)

3. 明确的验收标准

✅ 好:具体的验收标准
❌ 坏:模糊的完成定义

示例:
✅ "测试通过率 100%"
   "API 响应时间 < 100ms"
   "覆盖率 >= 85%"

❌ "功能正常工作"
   "代码质量良好"

小结

subagent-driven-development 通过并行执行两阶段审查提升效率:

  1. 并行执行 - 多个子代理同时工作
  2. 两阶段审查 - 规范 + 质量双重保障
  3. 依赖感知 - 智能任务分发
  4. 错误恢复 - 失败任务自动重试

关键要点

  • ✅ 任务独立性是并行的前提
  • ✅ 两阶段审查保证质量
  • ✅ 依赖关系决定执行顺序
  • ✅ 失败任务有恢复机制

性能提升

任务数量 串行耗时 并行耗时 提升
5 25 分钟 10 分钟 2.5x
10 50 分钟 15 分钟 3.3x
20 100 分钟 25 分钟 4x

系列导航

参考资源

最后更新于 2026年03月26日 00点00分00秒