难的从来不是让每个 agent 变聪明,而是 让它们别互相拖后腿—— 多智能体系统的协调原理
单个 agent 只需要处理一条时间线:感知、推理、行动、循环。一旦变成多个 agent,问题的维度立刻从一维变成了多维——谁该做哪一部分?谁需要知道谁发现了什么?谁的动作要等谁先完成?两个 agent 的判断打架了听谁的?系统怎么知道所有人都干完了?
这五个问题,不管用的是哪个框架、哪个大模型、哪种业务场景,只要是多个自治单元一起工作,就必须回答。这篇文章不打算讲某一家公司命名好的架构模式,而是想把这五个问题拆开,讲清楚“协调”这件事本身有哪些通用的解法——原理是什么、代价是什么、具体怎么用代码实现出来。
本文看点
-
- 01、协调的五个基本维度
- 02、每个维度的通用机制
- 03、通用协调层的代码实现
01、协调问题的五个基本维度
在设计任何一个多智能体系统之前,先把这五个维度想清楚,比直接选一个架构模板更重要:
1、任务分配——整体目标怎么拆成可独立执行的子任务,落到具体哪个 agent 头上。
2、信息流动——一个 agent 的发现、结论、中间状态,怎么传递给需要它的其他 agent。
3、执行时序——多个 agent 是严格排队,还是可以同时铺开;同时铺开时何时该停下对齐。
4、冲突消解——两个 agent 产出互相矛盾、或同时想改同一份资源时,听谁的、怎么合并。
5、终止判定——系统怎么知道“这件事已经做完了”,而不是无限空转或草率收场。
接下来分别展开这五个维度各自有哪些通用机制。
02、任务分配——谁来做什么
层级式分配:一个大脑说了算
最直接的分配方式是设一个“大脑”agent,由它分析整体目标、拆解子任务、指派给合适的执行者,执行者做完后交回大脑整合。这种方式很像公司里的项目经理制——任务拆解和分配的决策权高度集中,好处是全局一致性有保障,代价是这个“大脑”会变成整个系统的瓶颈:它的判断力上限决定了拆解质量上限,一旦它本身出故障,整个系统就会停摆。
市场式分配:谁能干、谁来抢
另一种思路借鉴市场机制:把子任务发布出去,让具备相应能力的 agent 自主“竞标”或按能力匹配去认领,不需要中心节点决定“该给谁”。原理是用局部的分布式决策替代中心化决策,好处是没有单点瓶颈、扩展性强;代价是全局最优不再有保障,可能出现多个 agent 争抢同一个高价值任务、某些任务却无人问津的情况。
自组织分配:从共享队列里领活
介于两者之间的是设一个共享任务队列,agent 谁有空谁去领,做完标记完成再领下一个——更接近生产线的“拉动式”调度。它兼顾去中心化和简单性,实现成本比市场机制低得多;局限是只解决了“谁来做”,没解决任务之间是否存在依赖关系——依赖条件还没满足时,agent 可能就把任务抢走了。
03、信息流动——谁需要知道谁的发现
直接寻址:点对点传递
一个 agent 直接把消息发给另一个指定 agent,类似打电话。信息路径最短,不容易被中间环节压缩污染;但要求发送方在发送时就明确知道该发给谁,agent 数量和交互关系一旦频繁变化,硬编码的点对点连接会迅速变得难以维护。
集中转发:一切经过中枢
所有信息先汇总到一个中枢节点,再由它决定转发给谁。好处是中枢天然拥有全局视角,能识别跨 agent 的关联性;局限是中枢容易变成瓶颈,且信息每经过一次转发和总结都有被压缩、丢失细节的风险,层层转手之后最初的关键信息很可能面目全非。
共享内存:把信息放进公共空间
不经过中转,所有 agent 直接读写一个共享存储——有发现就写进去,需要信息就去查。这个思路来自更早的分布式人工智能研究中的“黑板系统”(blackboard system):多个专家把推理结果写上共享黑板,其他专家看到新信息就被触发做进一步推理,协作行为是“涌现”出来的。好处是没有中转损耗、没有单点故障;局限是行为难以预测,容易出现重复劳动,也容易出现自我强化但不收敛的循环。
发布-订阅:按主题广播
agent 不把消息发给具体对象,而是发布到一个“主题”上,订阅者提前订阅好,由路由层负责投递。原理是把“谁该收到”的判断从发送方转移到了显式的订阅关系上,扩展性很强;代价是路由层本身可能出错——消息被误分类或路由丢失时,系统会安安静静地什么都不做,这种“沉默失效”比直接崩溃更难排查。
04、执行时序——谁先谁后
顺序执行:接力棒模式
agent 排队工作,前一个做完把结果交给后一个。好处是任何时刻只有一个 agent 在动,不存在并发冲突,逻辑最容易推理和调试;代价是总耗时是所有 agent 耗时的简单相加,完全没利用任务本可以互不干扰、同时进行这个特性。
并行执行 + 屏障同步:分头行动,定点汇合
子任务彼此独立时,可以让所有 agent 同时开始,等全部完成后在一个“屏障”节点统一汇总,再进入下一阶段——原理和分布式计算里的 map-reduce 一致。它能把总耗时从“相加”压缩到“取最长的那一个”;代价是整体进度取决于最慢的那个 agent,其余早完工的只能干等,直到超时或被强制跳过。
事件驱动异步:谁触发谁响应
不设固定阶段划分,agent 监听特定事件,事件发生就响应,处理完可能产生新事件触发下一个 agent,整条链路由事件流自然驱动。优势是灵活,不需要提前把所有分支设计进固定流程;代价是执行路径难以追溯——一个事件触发的连锁反应可能经过五六个 agent,必须依赖完善的日志和链路追踪,否则调试难度会显著上升。
05、冲突消解——听谁的
集中仲裁:一个人拍板
把最终裁决权交给某一个特定 agent,不同来源的意见汇总上来由它综合判断。原理上和层级式任务分配是同一思路——牺牲一部分去中心化的灵活性,换取判断的一致性。
生成者-验证者:分权而非集权
把“产出结果”和“评判结果是否可信”显式拆成两个不同的 agent,而不是同一个 agent 既当运动员又当裁判。这个机制的原理来自一个反复验证过的现象:让 agent 自己判断自己做得好不好,几乎必然会倾向于认可自己的结果,自我评估天然带有偏向性。这个机制真正生效的前提是评判标准必须写得足够具体——一句笼统的“检查一下好不好”起不到任何把关作用。
投票与共识:多数人说了算
没有天然可信的裁决者时,让多个 agent 各自独立判断,再通过投票或共识机制决定最终结果。好处是能过滤掉单个 agent 的偶然性错误;代价是成本更高,且如果多个 agent 共享同一种系统性偏差(比如都基于同一个基座模型),投票机制无法纠正这种共同的盲点。
锁与版本控制:技术层面的并发冲突
当冲突不是“意见不一致”而是“两个 agent 同时想改同一份资源”,解法通常借用分布式系统里现成的机制:加锁、乐观并发控制、版本控制。这类机制解决的是“谁先动手”的工程问题,而不是“谁的判断更对”的认知问题,两者不能用同一套机制笼统应付。
06、终止判定——什么时候算完成
固定预算:跑满就停
设一个硬性上限——最大轮次数、最长运行时间、最高花费,到了就停。实现最简单,能兜住无限循环这种最坏情况;但它不关心任务是否真的完成,可能在还差一点点时强行掐断,也可能早该结束却继续空转到上限。
收敛阈值:没有新发现就停
观察系统的“新增产出速率”,连续若干轮没有产生有价值的新信息,就认为已经收敛。尤其适合共享状态、事件驱动这类没有中心节点掌控全局进度的架构,因为没有人能直接说“任务完成了”,只能靠观察系统整体活跃度间接判断。
独立评估终止:由裁判说了算
最可靠但成本也最高:设一个专门的评估角色,用明确、可核验的标准检查产出是否满足要求,通过才真正终止。这和“生成者-验证者”冲突消解机制在原理上是同一件事——评判权必须独立于执行权,否则“是否完成”这个判断会被执行者自己的乐观偏差污染。
07、把五个维度组合起来
理论讲完了,下面用一段简化的 TypeScript 伪代码,展示怎么把上面五个维度组装成一个可运行的协调层,不绑定任何具体厂商的 SDK,核心是把“分配、通信、时序、冲突消解、终止”这五件事显式拆成五个可替换的组件。
...typescript
interface Allocator { // 任务分配
assign(tasks, agents): Map;
}
interface Channel { // 信息流动
publish(from, payload): void;
read(agentId): any[];
}
interface Scheduler { // 执行时序
run(assignments): Promise<Result[]>;
}
interface Resolver { // 冲突消解
resolve(results): any;
}
interface TerminationPolicy { // 终止判定
shouldStop(history, budget): boolean;
}
...typescript
async function coordinate(...) {
while (true) {
const assign = allocator.assign(tasks, agents);
const results = await scheduler.run(assign);
results.forEach(r => channel.publish(r.id, r));
history.push(results);
if (termination.shouldStop(history, budget))
break;
tasks = deriveNext(resolver.resolve(results));
}
return resolver.resolve(history.flat());
}
「任何一个具体的多智能体架构,本质上都是在给这五个接口分别选一个实现」
选层级式分配器 + 集中转发通道 + 并行调度器 + 集中仲裁 + 固定预算终止,得到的就是最常见的“一个大脑指挥多个执行者”的架构;换成队列式分配器 + 共享内存通道 + 事件驱动调度器 + 投票消解 + 收敛阈值终止,得到的就是完全去中心化的协作架构。中间还有大量排列组合,具体选哪一种,取决于任务本身的依赖结构、对一致性的要求,以及愿意为并行和去中心化付出多少额外的工程复杂度。
08、代价是共同的
不管选择哪种组合,多智能体协调都要为以下几件事付出代价,这是通用的、和具体选哪种机制无关:
信息保真度下降
信息每多经过一层转发、一次总结,就有一次被压缩、被简化、被误读的风险,层级越深、中转越多,风险积累越明显。
并行的速度收益要用同步开销换
完全不并行最容易保证一致性但慢;完全并行最快但需要更复杂的机制处理冲突和保证收敛,没有免费午餐。
去中心化程度越高,行为越难预测
高度去中心化的系统里,行为是多个自治单元互动“涌现”出来的,出问题时排查成本显著更高。
终止条件最容易被忽视
很多团队认真设计任务怎么分、信息怎么传,却把“什么时候算完”留到最后,或者交给一个固定轮次上限草草了事。
写在最后
多智能体协作说到底不是“用了几个 agent”的问题,而是“任务分配、信息流动、执行时序、冲突消解、终止判定”这五件事分别怎么解决的问题。具体某个厂商命名的某种架构模式,不过是在这五个维度上分别选定了一组实现方式的组合。
理解了这五个维度的通用原理,就不再需要记住某个模式的名字才能设计系统
而是可以直接从任务本身的结构出发,为这五个问题分别挑选最合适的解法,再把它们组装起来。
END
我是写代码的中年人,写代码,也写技术;研究 AI,也分享实践,希望让复杂技术变得简单。
329