A·Agent Guide 从经典智能体到前沿工程 ← 返回主博客
AGENT GUIDE / READING NOTES

第 7 章 多 Agent 与协作

设计子任务契约、关键路径、隔离工作区与合并验收

7.1 先定位单 Agent 的瓶颈

本章目标:能判断任务是否值得拆分,写出子任务契约,估算并行的关键路径,并处理成果合并与责任归属。

运费函数只有几行,启动三个 Agent 各自读一遍需求通常比一个 Agent 更贵。较大的任务才可能有明确瓶颈:同时阅读多个独立模块;主上下文被探索日志占满;需要不同工具范围;或需要独立审核候选修改。

拆分应针对这些瓶颈,而不是为了让架构图更复杂。共享同一模型的多个角色可能重复同一种错误;同一个结论出现三次并不自动成为三份独立证据。先建立单 Agent 基线,才能知道新增协作解决了什么。

主 Agent 分配任务、子 Agent 返回可验证产物

7.2 四种组织方式怎样改变控制权

模式 下一步由谁决定 合适任务 主要代价
固定流水线 代码 提取 → 草稿 → 核验 前阶段错误沿链传递
独立并行 调度器 分别分析无依赖模块 资源竞争与合并
主 Agent 委派 主 Agent 探索后动态增加子任务 主上下文与调度成本
独立评审 评审者与验收规则 检查补丁遗漏和反例 评审者也可能判断错误

“多 Agent”描述组织,不规定必须有多个模型。角色可以用相同模型、不同提示与工具,也可以由确定性程序承担部分步骤。固定流水线中的每个节点即使使用 LLM,整体仍可能主要由代码编排。

要区别移交控制权和把 Agent 当工具调用。前者由接收者继续面向用户处理,后者由主 Agent 等待子结果并继续整合。选择影响谁保存全局目标、谁回答用户以及谁有权宣布结束。

7.3 子任务契约要能阻止“做了很多但用不上”

把“帮我看看代码”改成一个聚焦任务:检查运费函数的调用者,列出参数类型、返回值假设及可能受修改影响的地方;不修改文件;每条结论附路径与行号;找不到也要注明搜索范围。

{
  "task_id": "inspect-callers",
  "goal": "检查 shipping_fee 的调用约束",
  "inputs": {"workspace_revision": "base-hash", "symbol": "shipping_fee"},
  "allowed_actions": ["search", "read"],
  "deliverable": ["claims_with_paths", "unresolved_questions"],
  "stop_when": "已检查已知调用者,或达到任务预算",
  "acceptance": "结论能追溯到输入版本的代码"
}

这是应用层契约示例,不是特定产品的协议格式。对子任务的限制要落实到工具权限;单在提示中写“只读”,不能阻止有写权限的工具执行。

返回时区分发现、推断和未检查范围。一个短摘要方便父 Agent 使用,但应同时保留原始证据或产物路径;否则父 Agent 无法核实被压缩掉的条件。

7.4 并行速度由关键路径决定

假设三个独立分析各需 4 秒,分发共 2 秒,合并共 3 秒。以下是理想化算例,不是实测:串行耗时 2+4+4+4+3=17 秒;三个并行槽时 2+max(4,4,4)+3=9 秒;只有两个槽则需两轮,约 2+8+3=13 秒。

总工作量没有消失。三个分析仍共消耗 12 秒执行资源,外加分发和合并;模型 token 还可能因为重复背景而增加。用户感知时延降低与总成本降低是不同指标。

如果第三项必须先收到前两项结果,DAG 是 A、B → C → 合并,就不能把三项同时运行。共享文件、API 限流和模型排队也会削弱理想加速。评测要记录墙钟时间、所有子任务成本和合并质量。

7.5 上下文独立、工作区独立与权限独立

子 Agent 有新对话,意味着中间轨迹不挤进父上下文;这不说明它有独立磁盘。两个执行者修改同一文件,可能覆盖补丁,或拿到另一人的未完成状态。

一种做法是每个候选使用独立 worktree 或初始副本,返回 diff;父 Agent 在明确版本上合并并重跑检查。另一种是按模块分配写入所有权,接口改动由主 Agent 协调。即使文本合并没有冲突,语义仍可能冲突:一边改了返回类型,另一边沿用旧调用方式。

权限还要单独分配。探索者不一定需要写入;评审者不一定需要访问用户凭据。角色隔离只有在上下文、工具及环境层被实现,才能形成实际边界。

7.6 合并不是拼接摘要

父 Agent 可以为每条子结论维护“结论、证据、版本、与其他结论是否冲突、需要的验证”。遇到冲突,先回到代码或测试,不按多数票挑一个。若一份报告称负数报错,另一份称会员负数免费,要检查它们是否引用不同版本或不同条件。

任务完成还要落实责任:子任务标记 done 只说明其产物已交付,整体是否合格仍由全局验收决定。超时子任务不能被遗漏,也不能在主任务结束后继续产生无人接管的修改。取消、收尾和资源预算都是编排职责。

7.7 练习与参考解答

将“修复运费规则,并检查所有调用者”拆成实施、调用者探索、独立验收三个角色。参考依赖:实施与调用者探索可部分并行,但最终集成验证必须等相关信息与补丁确定;验收者应读取最终版本,而不是只看实施者摘要。

再回答:三名角色都说正确,测试失败,谁说了算?参考解答是以明确需求和可复现环境证据处理冲突,不把投票当验收;必要时检查测试是否合理。本章交付物:任务 DAG、子任务契约、合并检查表以及与串行基线的比较设计。


Agent Guide · 从反馈闭环走向可靠系统基于 Markdown 构建