并行工作 是做什么的?
并行化为每个单元提供全新的上下文和速度。它需要协调成本:必须等待的扇入、不能冲突的合并、不能由制作人担任的评审人。在单元真正独立时使用,并显式支付协调成本。
前提条件
- 单元是独立的:没有一个单元需要另一个单元的结果才能开始。
- 你知道单元是什么。原因未知 → 先进行一次调查分派。
- 写入是隔离的:每个单元写入不同的文件,或者每个单元在自己的工作树中运行,并且只提交该单元修改的文件(机制:参见 delegate/references/harness-notes/claude-code.md 的隔离部分)。
缺少任何一个 → 序列化,或先进行调查。
模式
扇出、扇入。 同一阶段的 N 次分派,每个单元一次,一起发送。一次整合性分派等待所有分派完成——这个等待就是屏障——并将它们的交付文件合并为一个。将每个单元的输出保存在一个文件中;整合器读取路径,而不是你的上下文。
机械扇出。 一个 process 分派决定确切的更改。N 次通用分派逐字应用它,每次针对其自己的目标。一个 review 分派检查整个集合。编排器本身从不应用编辑,无论集合有多小。
制作人/检查人。 产生结果的人永远不会评审它。将 review 路由给不同的智能体——如果存在,则路由给该领域的评审员类型智能体,否则路由给不同角色的专家——并附上成功标准和工件路径,不包含制作人的任何推理过程。
生成并过滤。 扇出以产生候选方案;一次分派对它们进行去重并根据书面评分标准评分;只有存活者才能继续。在生成之前编写评分标准。
锦标赛。 用于对太大而无法在一个窗口中评审的集合进行排名:两两比较的分派,每个分派包含两个项目,括号保存在一个文件中。比较判断比绝对分数更可靠。
假设扇出。 用于根因分析:每个不相交的证据源(日志、代码、数据)进行一次分派,仅从其源形成假设。然后对每个假设进行一次分派,试图反驳它。在反驳中存活下来的就是发现结果。
循环直到停止。 用于未知大小的工作:重复分派,直到可观察的条件成立——没有新的发现,门控输出中的零错误,检查清单文件没有未勾选的项目。在第一次迭代之前设置上限(默认为 5)。达到上限时,报告 PARTIAL 并附上剩余内容。
检查清单扇出
一个包含 - [ ] 项目的 Markdown 文件就是一个现成的单元列表:每个未勾选的项目进行一次分派,每个分派被告知在完成时勾选其自己的行,然后循环直到停止,直到“没有未勾选的项目剩余”。对命名相同文件的项目进行序列化。
上限和停止条件
每个循环和每个扇入在开始之前都有一个写下来的数字:迭代次数、重新分派次数或单元数量。达到上限会给用户一个 PARTIAL 或 BLOCKED 报告,而不是静默重试。
持久团队
某些工具框架提供具有共享任务列表和消息传递的长期存在的智能体团队。它们增加了智能体执行不一致的指令和通信开销,并且它们在不同工具框架之间不可移植。上述模式不需要任何这些。只有当智能体必须在任务中间交换消息时才考虑使用团队,并且此时需要参考工具框架文档。
参考
- delegate —— 每个单元使用的提示模板。
- delegate/references/harness-notes/claude-code.md —— 如何发送并发分派、隔离工作树,以及将长流水线移动到 Claude Code 上的工作流脚本中。