多 Agent 协作的工程取舍:何时拆分,如何收敛 @ Lin | 2026-08-05T10:00:00+08:00 | 3 分钟阅读 | 更新于 2026-09-12T10:00:00+08:00

用独立信息域和验收条件判断拆分价值,控制协作带来的成本与状态冲突。

本文于 2026-09-12 补充整理,按 2026-08 专题归档。示例为方案设计,参数用于说明方法,不代表已上线项目或实测成果。

拆分应来自独立工作,而不是角色名称

给系统安排“专家”“经理”“审核员”三个角色,不会自动得到更可靠的架构。如果它们读取同一份上下文、调用相同工具,只是在重复生成意见,成本可能增加,错误却高度相关。

适合拆分的例子是:一个子任务查询知识库规范,另一个读取工单历史,两者各自有明确输入、权限和输出。协调者负责对齐证据,不让两个工作者随意修改共同业务状态。

Anthropic 的工作流模式介绍提供了并行与协调者模式的背景。本文的重点是对这个企业助手如何约束协作成本和状态。

为子任务定义交付契约

{
  "subtaskId": "history-analysis",
  "goal": "查找同项目内的相似故障处理记录",
  "allowedTools": ["searchTickets", "getTicket"],
  "maxModelCalls": 3,
  "resultSchema": "EvidenceSummaryV1",
  "deadline": "由协调者设置的绝对截止时间"
}

这是任务信封示意。实际传输中截止时间必须是可解析的时间值。身份上下文由执行系统注入,不能从目标描述里解析。

结果至少包含证据 ID、主要发现、未解决问题和状态。子任务输出“没有发现”,应与超时和权限拒绝区分。

避免共享可变状态

知识检索者和工单历史分析者返回独立结果,由一个汇聚节点更新主任务。若多个 Agent 都能修改同一提案,就必须处理版本冲突和覆盖问题。

写操作可以集中到专门执行器,统一检查审批和幂等。子 Agent 提出修改建议,但不直接执行创建工单。这样协调失败时,不至于出现多个工作者各自创建一张记录。

消息应携带任务 ID、子任务 ID、尝试编号和结果版本。重复结果可以被识别,晚到结果不能覆盖已经结束的主任务。

并行收益要扣除协调成本

两项任务并行后,理想耗时接近较慢的一项加汇聚时间,但总 token 通常是两项相加,再增加协调开销。若任务之间强依赖,并行还可能产生大量无效工作。

同一个模型对同一证据的多次投票不是独立事实来源。多票一致可能来自共同偏差,因此不能把“多数赞成”当作安全授权。

遇到证据冲突时,优先比较来源权威性、版本和适用环境。无法解决时,明确列出冲突并请求补充,而不是让协调者挑一段更流畅的答案。

为局部失败定义汇聚规则

知识查询成功、历史查询超时,主任务能否返回?取决于任务要求。如果用户只问规范,可返回带限制说明的结果;如果要判断是否重复工单,历史查询缺失可能意味着不能继续写入。

必须预先定义哪些子任务是必需项,哪些可以缺失。超时后取消不再需要的子任务,并回收预算;晚到结果作为审计记录保存,不重新打开已经完成的任务。

用单 Agent 作为对照组

相同样本、相同工具集合和相近总预算下,比较单 Agent 与多 Agent。观察任务成功率、证据覆盖、冲突率、总成本和端到端耗时。

如果收益只来自给多 Agent 更多 token,而不是任务划分本身,结论就应如实表达。拆分应该解决可解释的问题,而不是成为架构复杂度的默认方向。


查看系列导读与阅读路线

© 2019 - 2026 Lin 的博客

Powered by Hugo with theme Dream.

avatar
关于我

Lin 的 ❤️ 博客

技术专题:Java Agent 工程化:从知识库问答到可靠业务执行。围绕 RAG、工具治理、任务恢复与 Java 平台架构整理设计思路和验证方法。

记录一些 🌈 生活上,技术上的事

  • 🛠️ 技术阵地: 深耕 Java 开发 ,目前向 AI 应用领域探索与拓展。这里主要记录我从后端架构到 AI 赋能的进阶之路、技术思考以及日常的 debug 血泪史。始终致力于写出优雅且没有 bug 的代码(尽量)。
  • 🌈 生活侧写: 偶尔脱下极客的外衣,我也会在这里分享生活中的灵光一现。不管是好用的效率工具,还是周末的一场骑行,都是构成我真实生活的一部分。