报告需要检查事实和格式,两个工作相互独立,似乎很适合交给两个 Agent。但如果它们都直接修改同一份报告,一个刚修正状态,另一个又用旧版本覆盖,增加 Agent 反而让结果更难控制。
多 Agent 的收益来自合理分工,不来自数量。要先说明哪些任务可以独立完成,怎样接收结果,再决定是否需要额外模型。
三种协作方式的控制权不同
Agent-as-Tool 把子 Agent 当作有界能力。父任务提交目标与输入,收到报告后继续负责整体结果。Handoff 则转交后续处理权,常用于业务领域切换。并行汇总把多个独立子任务交给执行器,等待结果后统一合并。
例如事实核验适合 Agent-as-Tool;售后客服转给物流客服更接近 Handoff;检查十份独立文件可以并行。它们的接口、生命周期和用户体验不同,不能因为都调用另一个模型就视为同一种模式。
简单字段一致性校验用普通函数就够。本系列委派示例下载故意使用确定性检查函数,让读者先观察契约和合并逻辑,不把并发函数调用伪称为多个真实 Agent。
委派目标要包含边界与证据
“帮我检查报告”缺少输入版本和完成条件。更明确的契约应包含:检查候选 H1 的事实一致性,只读订单快照 S1,返回检查项和证据,不修改文件,最多四次调用,并在父任务剩余时间内完成。
子任务输出应携带 subtask ID、输入 hash、候选 hash、检查结果与证据引用。父任务合并前确认版本一致。若子任务检查 H1 时父任务已生成 H2,旧结果不能直接批准新报告。
不要把完整聊天当作默认输入。子任务不需要知道用户前面讨论了哪些无关方案,也不需要父 Agent 的全部工具结果。传递必要事实既降低成本,也减少跨边界泄露。
隔离至少有五个维度
上下文限定可见信息;工具与 Skill 限定可用能力;工作区限定共享和写入位置;凭证限定身份与资源范围;预算限定时间和调用消耗。这五项需要分别实现。
允许列表写进子任务 JSON,不代表实际工具注册表已经改变。给子 Agent 独立目录,也不代表它运行在独立操作系统身份下。正文前几篇的授权和沙箱机制需要在委派入口继续适用,而不是委派之后被绕过。
父 Agent 有上传权限,事实核验子任务通常只需读取快照。它返回证据和判断,由父任务决定是否进入交付。子任务不能通过输出“请使用管理员工具”给父任务自动增加权限;返回文本仍是待审阅数据。
并行节约的是哪一部分时间
假设两个独立检查各需五秒和八秒,理想并行耗时接近八秒加协调开销,而不是十三秒。但如果第二个检查依赖第一个产物,它们不能同时开始;若每个子 Agent 都重新加载大量资料,Token 成本还可能显著增加。
并行分支中最慢的一个影响整体尾延迟。需要规定超时后是交付部分结果、等待人工,还是整体失败。对于必须通过的事实检查,格式分支成功不能补偿事实分支失联。
总预算也不能按子任务无上限扩张。父任务剩余二十次调用,分配两个子任务各十五次就超出了总额。可预留额度,或由共享执行服务原子扣减;跨进程并发下,普通内存计数器无法提供全局限制。
合并结果时先处理冲突
只读检查最容易合并:父任务收到两份结构化报告,检查全部要求是否满足。写任务则更复杂,可以在独立分支生成差异,由单一合并者应用,再对合并后的整体执行验证。
两个分支分别通过,不保证合并结果通过。一个改了字段名,另一个仍引用旧名字,冲突甚至不会表现为文本合并失败。因此最终验证应针对合并产物,而不是相加子任务的成功标志。
多个模型意见一致也不是事实证明。它们可能共享同一份错误输入。核验结论最终应回到来源和业务约束,而不是采用多数票替代证据。
用图框架表达并行时还要处理状态合并
在 LangGraph 这类图模型里,没有依赖的节点可以进入同一执行步,但多个节点写同一个状态字段时,框架需要知道怎样合并。列表追加可以使用 Reducer;订单状态这种单值事实不能简单拼接成两个答案。
例如 facts 分支和 format 分支都返回 checks,应把两份带类型和候选 hash 的检查记录合并,再由汇总节点判断。Reducer 处理的是状态更新规则,不会给外部文件加锁;两条分支直接写同一个磁盘路径,仍需前文的独立产物与统一合并者。
取消需要沿任务树传播
父任务取消时,应通知仍在运行的子任务,停止新增动作,回收资源并记录已经产生的产物。取消通知送达与实际停止之间仍可能有时间窗口,不能直接删除所有回执假装什么都没发生。
任务树应保存父子关系和调用关联 ID,以便追踪哪一个分支消耗预算、哪个输出导致最终结论。但日志不应无条件汇总全部子任务敏感输入。
当工作强顺序依赖、共享可变状态很多,或没有独立验收条件时,单 Agent 配合普通函数通常更容易理解和维护。生产设计应从这种简单结构出发,再依据实际需求增加并发,见下一篇。