入门 约 20 分钟 2026-10-10 02:22:55 · 2 阅读

dispatching-parallel-agents 实战:让多个 AI 编程代理同时干活,而不是排队

dispatching-parallel-agents 实战:让多个 AI 编程代理同时干活,而不是排队

测试跑挂一片,红了好几百行,三个不同模块各坏各的——这时候让一个 AI 编程代理从头查到尾,它会先钻进第一个失败,查完再查第二个,时间全花在排队上。obra/superpowers 仓库里有个专门解决这件事的技能:dispatching-parallel-agents(并行派发代理)。它教的不是什么黑科技,就一句话:独立的问题域,一个域派一个代理,同一条回复里全部发出去,让它们同时干。这篇教程把这个技能的 SKILL.md 拆开讲清楚:什么时候该并行、四步怎么走、派发提示词怎么写才不让代理迷路,以及哪些场合官方明确劝你别用。

相关背景可参考 brainstorming 技能实战与 diagnosing-superpowers 技能实战,同出 obra/superpowers(GitHub 29.6 万 star,MIT 协议,本文数字以 官方页面为准)。步骤与配图依据官方 README 与 SKILL.md 整理。

先想清楚:你的问题配不配并行

这个技能的第一节不叫「怎么派」,叫「什么时候用」,官方还画了一张决策图,三个问题问下来才知道该不该动用多个代理。三个问题分别是:是不是出现了多个故障;这些故障是不是相互独立;它们能不能并行处理——也就是中间没有共享状态、没有先后依赖。三个都答「是」,才轮到并行派发;任何一个答「否」,答案分别是单个代理自己查、单代理把相关故障一起查、顺序派发。

dispatching-parallel-agents 官方决策图与四步模式对照表

决策图与四步模式,原文来自 SKILL.md 的 When to Use 与 The Pattern 两节

SKILL.md 把「该用」的场合列成了四条白名单:3 个以上测试文件因不同根因失败;多个子系统各自独立损坏;每个问题不看其他问题的上下文也能理解;调查之间没有共享状态。反面也有三条:故障相关(修好一个可能顺带修好其他)、需要理解系统全貌、代理之间会互相干扰——比如改同一批文件、抢同一个资源。

判断为什么值得这么较真?派发一个代理的成本是固定的:启动、读上下文、干活、返回。如果两个任务本来就有先后依赖,你把它们拆给两个代理,第二个还是得等第一个的结果,并行赚不到任何时间,反而多付了一次代理启动的钱。所以官方才把「独立」放在决策链第二问的位置上。

四步走完一遍完整派发

技能正文把一次并行派发拆成四步,每一步都有明确产出。

第一步,识别独立域。按「什么坏了」给故障分组,官方给的例子是三个测试文件:文件 A 的测试坏在工具审批流,文件 B 坏在批量完成行为,文件 C 坏在中止功能。三组各改各的,修审批流不会碰中止测试——这就是三个独立域。这一步的产出是一张分组清单,而不是急着派。

第二步,给每个代理造任务。每个代理拿到四样东西:具体范围(一个测试文件或一个子系统)、明确目标(让这些测试通过)、约束(不许改其他代码)、预期输出(找到并修了什么的摘要)。注意这四样是写在派发提示词里的,不是口头约定——代理看不到你的会话历史,你写什么它知道什么。

第三步,派发。规则简单到只有一行:同一条回复里发出全部派发,就是并行;一条回复发一个,就是顺序。官方示例就是在一条回复里连发三条:

Subagent (general-purpose): "Fix agent-tool-abort.test.ts failures"
Subagent (general-purpose): "Fix batch-completion-behavior.test.ts failures"
Subagent (general-purpose): "Fix tool-approval-race-conditions.test.ts failures"
# All three run concurrently.

第四步,回收。代理干完回来不等于结束:逐份读摘要,确认各自的修复没有冲突,跑一遍全量测试,最后把所有变更整合到一起。官方在 Verification 一节还补了一句提醒——要做抽查,因为代理也会犯系统性错误,比如把同类问题全按同一个错误方向修了。

派发提示词:四组官方「好 vs 坏」对照

代理迷路,九成是派发提示词写松了。SKILL.md 的 Common Mistakes 一节给了四组对照,坏写法都是真实会犯的:

派发提示词好写法与坏写法四组对照表

四组对照与一条合格派发单的四要素,逐字引自官方示例

范围那句最值得展开。写「Fix all the tests」,代理面对的是几百个测试的搜索空间,它不知道你真正在意哪三个;写「Fix agent-tool-abort.test.ts」,搜索空间瞬间收窄到一个文件。上下文同理——你 console 里那条报错信息,你不贴,代理就得自己重跑一遍才能看到。约束和输出是另一半:不写约束,代理可能顺手把周边代码重构了;不规定输出,它回来只说一句「修好了」,你没法 review。

官方还给了一条完整的示例派发单,结构是:精确到文件(列出 3 个失败测试的名字和现象)、先告诉代理问题性质("These are timing/race condition issues")、给任务清单(读测试、判根因、修三选一)、加禁令和回传要求。里面有一句很硬的话值得单独抄出来:

Do NOT just increase timeouts - find the real issue.(不许只加大超时——去找真正的问题。)—— SKILL.md, Agent Prompt Structure

这句禁令针对的就是代理偷懒的典型路径:测试因时序问题挂了,把超时从 1 秒调到 10 秒,测试绿了,问题还在。派发单里预埋这种禁令,比事后 review 再打回来便宜得多。

本机实测:并行到底省不省时间

道理讲完了,实测一遍。给一个支持子代理派发的编码代理(这里用 Hermes Agent 的 delegate_task)一次发两条独立派发:任务 A 算一个字符串的 SHA256,任务 B 算另一个字符串的 SHA256。两个任务毫无依赖,正好对应「一个代理一个独立域」。

并行派发实测终端记录:两任务同时跑总耗时27.7秒

实测记录:两条派发一次发出,任务 A 用 16.0 秒、任务 B 用 27.1 秒,墙钟总耗时 27.7 秒

结果值得琢磨:任务 A 自己跑了 16.0 秒,任务 B 自己跑了 27.1 秒,顺序相加应该是 43.1 秒,实际墙钟只有 27.7 秒——总时长约等于最慢的那个任务,两个代理确实在同时干活。而两个任务里真正的计算部分都不足 1 毫秒,剩下的十几秒全是代理启动、读上下文、组织回答的开销。

这组数字反过来解释了官方白名单为什么那么严:单个代理的开销是「秒」级的,如果你的问题域不独立——B 需要 A 的结果,或者 A 和 B 改同一批文件——并行一分钱不省,还搭进去协调成本。开销固定、赚的是并发,这是并行派发全部的账。

真实案例:一次六个失败、三个文件的派发

SKILL.md 里存了一次完整的实战记录(Real Example from Session),场景是大重构之后 6 个测试挂在了 3 个文件上:agent-tool-abort.test.ts 挂 3 个(时序问题)、batch-completion-behavior.test.ts 挂 2 个(工具没执行)、tool-approval-race-conditions.test.ts 挂 1 个(执行计数为 0)。

判定独立域的逻辑是:中止逻辑、批量完成、审批竞态三块互不沾边,各自派一个代理。三个代理分头修完,各自返回的修法也不一样——第一个把硬编码超时换成了事件等待,第二个修了一个事件结构 bug(threadId 挂错了位置),第三个补上了对异步工具执行完成的等待。最后整合:三份修复互不冲突,全量测试绿。

这个案例的好处是完整覆盖了四步:分组(三个文件三个域)、派发(三条同时发)、回收(读三份摘要)、整合(确认无冲突再跑全量)。照着它套自己的场景,基本不会走样。

什么时候不该用

技能单设了一节 When NOT to Use,四条劝退理由都有具体含义。故障相关:修好一个可能顺带修好其他,先一起查再决定拆不拆。需要全量上下文:问题出在系统整体行为上,每个代理只看一角,谁也给不出对的答案。探索式调试:你自己都不知道什么坏了,没法定域,派了也是白派。共享状态:两个代理同时改一个文件,后面提交的会把前面的覆盖掉。

另外两条实话也写在文档里:子代理永远不会继承你的会话上下文和历史——它知道的等于你派发单里写的,所以派发单必须自包含;这套模式的定位是「多代理协作的基础技能」,仓库里其他技能(比如 subagent-driven-development)在更长的流程里会反复用到它。

安装与上手

dispatching-parallel-agents 是 superpowers 技能库的 15 个技能之一,随库一起安装,不单独装。安装命令按代理各不同,常用的几条:Claude Code 用 /plugin install superpowers@claude-plugins-official;Gemini CLI 用 gemini extensions install https://github.com/obra/superpowers;Qwen Code 用 qwen extensions install obra/superpowers;Hermes Agent 用 hermes plugins install obra/superpowers --enable。装完重启会话即可。技能在「面对 2 个以上可并行处理、无需共享状态的独立任务」时自动触发,也可以在对话里直接点名要求用它。

想先看原文的,技能文件就一个 SKILL.md,地址是 https://github.com/obra/superpowers/tree/main/skills/dispatching-parallel-agents,全文不到两百行,读完用不了一支烟的功夫。

本文步骤与配图依据 obra/superpowers 官方 README 与 dispatching-parallel-agents SKILL.md 整理,实测数据来自本机 Hermes Agent 会话,版权归原作者所有。

评论 (0)