通过隔离与合并契约委派 agent 工作
并行 agent 只有在工作相互独立时才能节省墙钟时间;否则,它们会把一个清晰任务变成协调问题,并更快地失败。
类型: Learn + Build 语言: Python(标准库) 前置要求: 阶段 14 第 39 和 44 课 预计时间: ~70 分钟
学习目标
- 根据真实独立性判断委派是否合理。
- 为每位执行者指定独占文件所有权和明确证明。
- 根据依赖计算执行波次。
- 设计安全合并 agent 工作的契约。
并行性测试
不要因为可用 agent 更多就委派。至少满足以下一项时才委派:
- 两项调查能独立回答不同未知项;
- 两项实现拥有不相交的文件和契约;
- 审阅者可以检查已完成产物而不改它;
- 缓慢的外部检查可在本地工作继续时运行。
当 agent 需要同一文件、同一个未解决决定或同一可变环境时,保持串行。
工作单元是一份契约
每个被委派的单元都需要:
| 字段 | 含义 |
|---|---|
| 目标 | 一个可观察结果 |
| 负责人 | 一位对结果负责的执行者 |
| 路径 | 独占写入所有权 |
| 依赖 | 开始前已完成的单元 |
| 证明 | 返回给集成者的精确证据 |
| 交接 | 改动文件、作出的决定、剩余风险 |
“处理后端”不是工作单元。“在 app/accounts.py 实现重复检查,并用聚焦的账户测试证明它”才是。
隔离有三层
- 文件系统隔离: 独立 worktree 或沙箱避免意外共享编辑。
- 所有权隔离: 契约避免两位执行者有意编辑同一路径。
- 状态隔离: 独立日志和输出避免一位执行者覆盖另一位的证据。
文件系统隔离不能解决所有权问题。两个干净 worktree 仍可能产生冲突设计。开始工作前,合并契约必须解决共享接口。
mermaid
flowchart TD
P[已批准的计划] --> A[API 工作单元]
P --> D[文档工作单元]
A --> H1[证据与交接]
D --> H2[证据与交接]
H1 --> R[只读集成审查]
H2 --> R
R --> G[完整验证门禁]集成者不重做工作
集成者应当:
- 确认每份交接符合分配范围;
- 阅读证明输出,而不只看执行者总结;
- 按依赖顺序合并改动;
- 运行完整的跨单元关卡;
- 拒绝隐蔽的范围扩张;
- 将冲突记录为新决定,而非悄悄编辑。
若集成需要重写执行者的大部分成果,原先的拆分就是错的。
人与 agent 的角色
委派不会消除人工判断。人仍负责会改变公开行为、风险、权限或不可逆成本的选择。agent 可以负责有界的调查、实现、验证和审阅。
这就是校准后的自主性:证据充分且可回滚时系统授予自由;后果高时要求检查点。
动手构建
实验检查路径重叠,验证依赖,计算安全执行波次,并写入 outputs/delegation-plan.json。
运行:
bash
python3 code/main.py
PYTHONPATH=code python3 -m unittest discover code/tests -v把文档单元改为拥有 app/。该计划应被阻止,因为这个父路径与 API 单元重叠。
练习
- 将一次真实改动分解为两个独立工作单元和一个集成者。
- 找出一个看似独立的并行拆分,指出共享的决定。
- 加入一个只读研究执行者,输出为事实表。
- 加入合并关卡,检查最终改动文件集是否符合所有单元契约。
- 为依赖失效的执行者定义取消规则。
延伸阅读
- Reid Smith, The Contract Net Protocol,早期对分布式任务分配与结果报告的正式论述。
- Eric Horvitz, Principles of Mixed-Initiative User Interfaces,了解何时该由自动化行动、何时应把控制权交还给人。
拿去用
保留 outputs/delegation-plan.json。它记录拆分为何安全、每条路径归谁,以及集成必须收到什么证明。