第 20 章 · 并行调度与结果汇总
本章目标:判断哪些任务真正独立,如何控制并发,以及多个子 Agent 的结果怎样汇成一个一致决定。
1. 并行不是默认更快
并行适合互不依赖的搜索、测试、资料查找和独立审查。如果任务 B 需要任务 A 的接口决定,提前并行只会产生返工。并行还会增加模型调用、重复读取和结果合并成本。
调度前先画依赖图。没有入边的任务可以同时启动;依赖满足后再启动下一层。这与普通构建系统和项目管理没有本质区别。
2. 读任务与写任务的差别
多个 Agent 同时只读通常风险较低。写任务需要考虑文件、数据库和外部对象冲突。即使两个 Agent 修改不同文件,它们也可能做出不兼容接口决定。
可以为任务声明 write_set 和 decision_set。write_set 重叠意味着文件冲突,decision_set 重叠意味着语义冲突,都需要串行或提前协调。
3. 并发预算
无限生成 Agent 会消耗 Token、CPU、API 限额和人类注意力。调度器应限制最大并发、每个子任务最大轮数和总费用。任务优先级可以依据关键路径、风险和信息价值。
当一个子 Agent 早早证明总体方案不可行,调度器应取消仍在做无用工作的子任务。这要求任务支持中断和清理。
4. 汇总不是拼接
四个 Agent 各写一段报告,不等于获得一个决策。主 Agent需要去重、解决矛盾、核验证据,并把结果映射回原目标。可以要求统一输出 schema:
{
"finding": "Expired token path lacks time check",
"evidence": ["src/auth.py:42", "tests/test_auth.py:18"],
"confidence": 0.91,
"blocked_by": []
}
结构化结果便于比较,但 confidence 只是模型自评,仍要看证据。
5. 失败传播
子 Agent 失败不一定让整个任务失败。非关键资料搜索可以降级,关键接口设计失败则阻塞所有依赖任务。调度图应标记 required 和 optional。
后台任务需要把权限拒绝、预算耗尽和逻辑无解分开。主 Agent 可以重新委派、更换模型、请求人类或停止,而不是把所有失败都重试。
6. 本章实验
实验 06 提供六项读写任务。切换单 Agent、普通子 Agent 和 worktree 模式,观察主上下文噪声、文件冲突和合并成本如何变化。特别选择两个都修改 server/auth.py 的任务,看看隔离为什么不能消除语义冲突。
并行准则
先并行那些“结果可以独立验证、失败不会破坏其他任务”的工作。写入与共享决策越多,协调成本越可能超过加速收益。