找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

4685

积分

0

好友

645

主题
发表于 6 小时前 | 查看: 8| 回复: 0

在上一篇文章中,我们讨论了多Agent系统何时有价值,以及何时单Agent才是更好的选择。这篇面向的是已经决定采用多Agent方案,接下来需要决定到底该选哪一种协调模式的团队。

我们见过不少团队不是根据问题结构来选择模式,而是根据“听起来是否高级”来做决定。我们的建议是:先从最简单、但可能有效的模式开始,观察它卡在哪里,再从那里逐步演化。本文将逐一拆解五种模式的运作方式与适用场景:

  • Generator-verifier:适用于输出质量要求极高、且评估标准可以明确写出来的场景。
  • Orchestrator-subagent:适用于任务拆解清晰、子任务边界明确的场景。
  • Agent teams:适用于并行、彼此独立、且持续时间较长的子任务。
  • Message bus:适用于事件驱动的流水线,以及会持续扩张的Agent生态。
  • Shared-state:适用于协作式工作,多个Agent需要基于彼此发现继续推进。

模式 1:Generator-verifier

这是最简单也是应用最广泛的多Agent模式之一。它在上一篇里被称为 verification subagent pattern(验证子Agent模式),但这里我们采用更广义的 generator-verifier 表述,因为负责生成结果的并不一定是orchestrator。

工作原理

一个生成器(generator)接到任务后,先生成初始输出,再把结果交给验证器(verifier)评估。verifier检查输出是否满足预设要求:如果满足,则接受并结束;如果不满足,则带着反馈驳回。generator根据反馈进行修订。这个循环持续进行,直到verifier接受输出,或达到预设的最大迭代次数。

适合场景

想象一个客服系统,需要自动为客户工单生成邮件回复。generator基于产品文档和工单上下文生成回复草案;verifier则对照知识库检查事实准确性,对照品牌规范检查语气,并确认是否回应了用户的所有问题。如果未通过,反馈会明确指出具体问题。

输出质量非常关键,且评估标准可以写得很明确时,这种模式就很适用。它尤其适合代码生成(一个Agent写代码,另一个写并运行测试)、事实核验、基于rubric的打分、合规验证等“错误输出的代价高于多跑一轮生成”的场景。

潜在问题与局限

验证器能力的上限,取决于其掌握的评估标准。如果只告诉verifier“检查输出好不好”,却不给具体标准,它很可能流于形式。最常见的失败方式,就是实现了循环却从未认真定义“验证”到底意味着什么,这只能制造质量控制的幻觉。

该模式还隐含了一个前提:生成验证是可分离的技能。如果评估一个创造性方案和提出方案本身一样难,那么verifier也未必能稳定地发现问题。

此外,迭代循环本身也可能卡住。如果generator无法有效回应反馈,系统就会来回振荡。因此,必须设置最大迭代次数,并配置兜底策略(如转人工处理或返回“当前最好版本”),以避免无限循环。

模式 2:Orchestrator-subagent

这种模式的核心是层级结构。一个Agent充当团队负责人(orchestrator),负责规划、分派任务并综合结果;子Agent(subagent)则承担具体职责并回报结果。

工作原理

一个主导Agent接收到任务后,规划如何处理。它可能自己完成部分子任务,同时将其他部分派发给子Agent。子Agent完成工作后返回结果,最后由orchestrator进行综合,形成最终输出。

Claude Code 就采用了这种模式。主Agent自己负责写代码、改文件、运行命令;当需要搜索大规模代码库或调查多个独立问题时,它会在后台分派子Agent,让主线工作继续推进,同时接收子Agent提炼后的结论。每个子Agent在独立的上下文窗口运行,只返回关键发现,从而确保orchestrator的上下文始终聚焦在主任务上。

适合场景

设想一个自动化代码评审系统。收到一个pull request后,系统需要检查安全漏洞、验证测试覆盖率、评估代码风格、判断架构一致性。每一项检查都很独立,需要不同上下文,输出也相对清晰。此时,一个orchestrator就可以将这些检查分派给不同的专家子Agent,收集结果后再综合成统一的评审结论。

当任务拆解足够清楚,且子任务间相互依赖很少时,这种模式就非常合适。orchestrator能维持整体目标的一致视角,而子Agent则专注于各自的责任领域。

潜在问题与局限

orchestrator很容易变成信息瓶颈。如果一个子Agent的发现关系到另一个子Agent的工作,这条信息必须先绕回orchestrator,再由它决定如何转发。转手次数一多,关键信息就容易丢失或被过度摘要。

此外,除非显式并行化,否则子Agent通常是顺序执行的。这样一来,你承担了多Agent的token成本,却拿不到并行带来的速度收益。

模式 3:Agent teams

当任务能被拆分成多个彼此独立、且能长时间并行推进的子任务时,orchestrator-subagent模式就可能显得束手束脚了。

工作原理

一个协调者(coordinator)启动多个工作者Agent(teammate),让它们作为独立进程持续存在。teammate从共享队列领取任务,围绕任务自主工作多个步骤,完成后发出信号。

它与orchestrator-subagent最大的区别在于worker的持续性。在后者中,子Agent为有边界的子任务而生,完成后即结束;而在agent teams中,teammate会跨多个任务持续存活,逐渐积累上下文和领域专长,从而提升表现。coordinator负责分配工作和收集结果,但不会在每次任务间重置worker。

适合场景

设想将一个大型代码库从某个框架迁移到另一个框架。每个服务(service)都可相对独立地迁移,有各自的依赖、测试套件和部署配置。coordinator将不同服务分派给不同的teammate,每个teammate围绕自己负责的服务自主推进迁移工作,最后coordinator收集所有结果并运行集成测试。

如果子任务彼此独立,且能从持续、分步骤的工作中受益,那么这种模式就很合适。每个teammate能逐渐建立自己负责领域的深度上下文。

潜在问题与局限

这套模式最关键的前提是:任务之间必须真正独立。在agent teams中,teammate是自主运作的,无法轻松共享中间发现。如果一个teammate的工作会影响到另一个而彼此不知情,最终输出就容易冲突。

另一个难点是完成检测更复杂。teammate以不同节奏工作,coordinator必须处理部分完成的情况。

共享资源会让问题加剧。多个teammate同时操作同一个代码库、数据库或文件系统,可能产生冲突。因此,这种模式需要谨慎的任务切分和明确的冲突解决机制。

模式 4:Message bus

当Agent数量增多、交互关系复杂时,直接协调会变得难以维护。Message bus 引入了一层共享通信层,让Agent通过发布和订阅事件来协作。

工作原理

Agent之间通过两个基本动作互动:publish(发布)subscribe(订阅)。每个Agent订阅自己关心的话题,由路由器(router)将匹配的消息投递给它。这样,即使新增带有新能力的Agent,也无需重连已有结构,只需让其订阅相应主题即可。

适合场景

一个安全运营自动化系统能体现这种模式的优势。告警从多个来源涌入;一个分类(triage)Agent按严重程度和类型分类,将高严重度网络告警路由给网络调查Agent,将凭证相关告警路由给身份分析Agent。各调查Agent在需要时可继续发布信息补充请求,由负责收集上下文的Agent完成。调查发现再流向响应协调Agent,由其决定行动。

这种流水线很适合message bus,因为事件从一个阶段流向下一个阶段。随着威胁类别演化,团队可以不断新增Agent类型,各Agent也能独立开发、部署。

如果你的工作流由事件驱动自然生长,而非固定顺序;或预期Agent生态会持续扩张,那么这种模式很合适。

潜在问题与局限

事件驱动通信最大的代价是可追踪性变差。如果一个告警触发了五个Agent之间的一连串事件,要弄清发生了什么,必须有非常仔细的日志和关联机制。调试比跟踪orchestrator的顺序决策要难得多。

此外,路由准确率非常关键。一旦router错分或丢失事件,系统就会悄无声息地失效。基于LLM的router带来了语义灵活性,但也引入了新的失败模式。

模式 5:Shared state

前面几种模式中,orchestrator、team lead或message router本质上都在集中管理信息流。而 Shared state(共享状态) 移除了这个中间层,让Agent直接通过一个所有人都能读写的持久化存储来协作。

工作原理

多个Agent自主运行,直接读写共享数据库、文件系统或文档。没有中心协调者。Agent检查存储中是否有相关信息,基于读到的内容采取行动,再把自己的发现写回去。工作通常从一个初始化步骤开始(如放入一个问题),结束则依赖终止条件(如时间上限、收敛阈值,或由某个指定Agent判断“答案已足够”)。

适合场景

设想一个研究综合系统,需要多个Agent分别调查一个复杂问题的不同方面:一个查学术文献,一个分析行业报告,一个看专利申请,另一个盯新闻报道。每个Agent的发现都可能影响其他Agent的调查方向。

在shared state模式下,发现被直接写进共享存储。行业Agent可立刻看到学术Agent的发现,无需等待协调者转发。各Agent能建立在彼此工作之上继续推进,共享存储本身也逐渐演化为知识库。

Shared state还消除了协调者这个单点故障。一个Agent停掉,其他Agent仍可继续读写。而在orchestrator或message bus系统中,协调者一旦失效,整套系统就会停摆。

潜在问题与局限

没有显式协调时,Agent很容易重复劳动或采取矛盾路径。系统行为由Agent互动自然涌现,而非自上而下设计,结果更难预测。

更棘手的是反应式循环(reactive loops)。例如,Agent A写入一条发现,Agent B读到后写入后续结果,A看到后又继续回应。系统不断消耗token却不收敛。重复劳动和并发写入有成熟的工程手段处理(锁、版本控制等),但reactive loop是行为问题,必须把终止条件作为一等公民来设计。

如何在不同模式之间做选择与演化

哪种模式合适,取决于系统的结构性问题。我们在上一篇提过,拆解工作应采用以上下文为中心的思路:按每个Agent需要的上下文来拆。这个原则在此同样适用。不同模式的真正差异,在于它们如何管理上下文边界和处理信息流动。

Orchestrator-subagent vs. agent teams

两者都涉及由协调者分派工作。真正该问的问题是:worker需要把自己的上下文保留多久?

  • 当子任务较短、聚焦,能产出清晰结果时,选 orchestrator-subagent。如代码评审系统,子Agent完成分析、产出报告后即结束,无需跨周期保留上下文。
  • 当子任务能从持续、多步骤的工作中受益时,选 agent teams。如代码库迁移,每个teammate会逐渐熟悉自己负责的服务,这种积累的上下文是临时Agent难以替代的。

Orchestrator-subagent vs. message bus

这两种模式都能处理多步骤工作流。真正该问的问题是:工作流结构是否可预测?

  • 当步骤顺序一开始就已知时,选 orchestrator-subagent。如固定的代码评审流水线。
  • 当工作流由事件自然驱动、且会随发现而变化时,选 message bus。如安全运营系统,无法预知告警类型和调查路径,新的处理逻辑可以轻松加入。

Agent teams vs. shared state

两者都允许Agent自主工作。真正该问的问题是:Agent是否需要看到彼此的发现?

  • 当Agent负责彼此分离、互不互动的分区任务时,选 agent teams。如代码库迁移,各teammate负责自己的服务。
  • 当Agent的工作具有协作性,且彼此发现应实时流动时,选 shared state。如研究综合系统,一个Agent的发现会立刻影响另一个。

Message bus vs. shared state

两者都支持复杂协调。真正该问的问题是:工作是以离散事件流动,还是会沉淀成共享知识库?

  • 当Agent围绕一连串事件做流水线式反应时,选 message bus。如逐阶段处理告警。
  • 当Agent会随时间不断基于累积发现构建知识时,选 shared state。如研究综合系统持续沉淀知识。
    Message bus仍依赖router,存在中心部件;shared state是去中心化的。如果你的优先级之一是消除单点故障,shared state更彻底。

如何开始

生产环境中的系统往往会混合多种模式。例如,整体工作流用orchestrator-subagent,在协作密集的子任务内部使用shared state;或用message bus负责事件路由,再用agent team风格的worker处理不同事件类型。

这些模式是构建模块,而非彼此排斥的单选题。

下表概括了每种模式的适用情况:

情况 适合的模式
输出质量要求极高,且评估标准明确 Generator-Verifier
任务拆解清晰,子任务边界明确 Orchestrator-Subagent
工作负载可并行,且子任务彼此独立、持续时间较长 Agent Teams
工作流由事件驱动,Agent生态会持续增长 Message Bus
协作式研究,多个Agent需要共享发现 Shared State
需要消除单点故障 Shared State

对于大多数场景,我们建议先从orchestrator-subagent开始。它以最小的协调开销覆盖了最广泛的问题类型。先观察它会卡在哪里,再随着具体需求逐步演化到其他模式。

在后续文章中,Claude官方会继续深入每个模式,给出生产级实现和案例分析。若想回看“什么时候多Agent值得投入”这个问题,可参见上一篇《精读Claude官方Agent博文:多 Agent 不是越多越好,先判断什么时候该用》。

对构建多Agent系统感兴趣,想深入交流架构设计与模式选择,欢迎来云栈社区人工智能版块一起探讨。




上一篇:剖析Karpathy LLM Wiki理念:如何构建持续演进的知识库替代传统RAG
下一篇:AWS DevOps Agent 2026年3月正式上线:AI驱动运维,自动接管On-Call噩梦
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-4-16 09:10 , Processed in 0.660607 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表