单体 Agent 的天花板:为什么复杂任务必然走向 Multi-Agent?

作 者:吴佳浩(Alben)
微信公众号:全栈架构师笔记
系列专栏:《企业级 Agent 实战指南————Multi-Agent 架构设计:从单体 ReAct 到群智协同》· 第 01 篇
导读
给一个 Prompt 塞入 20 个工具、3 个角色的要求,模型就会在长程推理中彻底精神分裂;让 5 个专职 Agent 各司其职并通过协议协同通信,才是复杂工程任务的解法。
很多团队以为 Multi-Agent 就是建几个不同 System Prompt 的聊天机器人互相扯皮;但在严肃的企业生产环境中,无状态的群聊是性能与成本的灾难。
单体 Agent 的天花板在于注意力承载力与职责耦合,Multi-Agent 的本质是基于分布式软件工程原则解耦状态、工具与认知负荷。
在 Agent 落地初期,团队通常采用经典的 ReAct(Reasoning + Acting)单体架构:在一个无限循环中,让单个 Agent 既做架构分析、又写代码、又跑测试、又负责总结汇报。
这种单兵作战模式在处理 3 步以内的简单任务时很顺畅,但一旦面对跨模块重构、线上故障排查或复杂文档生成等长流程任务时,单体 Agent 会迅速撞上三堵坚硬的工程之墙:
| 1. 认知负荷过载 | 既要规划又要执行细节,走着走着 | 单一 Context 混合了高层目标与 |
| (Cognitive Load) | 忘记了最原始的核心业务目标 | 底层工具执行细节,注意力严重稀释 |
| 2. 错误级联放大 | 前期步骤做出的一个微小误判,在 | 缺乏独立的评审与对立校验视角, |
| (Error Cascading) | 后续自循环中被自己不断确认固化 | 陷入自我循环论证的逻辑死锁 |
| 3. 上下文与成本雪崩 | 执行 15 轮之后,Prompt 膨胀至 | 无法对任务进行并行分发与子上下文 |
| (Context Blowup) | 数十万 Token,单次调用慢且昂贵 | 隔离,中间噪音无法物理清除 |
要突破单体 Agent 的认知天花板,系统架构必须从“单体巨石”演进为多智能体协同系统(Multi-Agent Systems, MAS)。
一、单体与多智能体的系统分水岭:康威定律在 AI 时代的体现
软件工程中的**康威定律(Conway’s Law)**指出:系统的架构往往反映了设计该系统的组织的沟通结构。
在人类企业中,我们绝不会让同一个员工既当产品经理、又当主架构师、又当一线研发、又当 QA 测试负责人——因为角色之间存在天然的职责冲突与不同的关注点(Separation of Concerns):
| 角色模型 | 全能通才 (Jack of all trades) | 专业专家组合 (Specialized Swarm |
| Context 隔离度 | 单一全局共享 Context (极易污染) | 分布式隔离 Context (高信噪比) |
| 工具分配策略 | 单个 Prompt 挂载全部 20+ Tools | 每个 Agent 按需挂载 2~3 个专属 |
| 执行并发模型 | 纯串行阻塞自循环 | 独立子代理并行执行 (Fan-out) |
| 纠错与防幻觉机制 | 自己检查自己 (极易产生确认偏误) | 对抗性独立 Agent 交叉审核验收 |
#mermaid-svg-KUYV3fHxdXoTRt5j{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-KUYV3fHxdXoTRt5j .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-KUYV3fHxdXoTRt5j .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-KUYV3fHxdXoTRt5j .error-icon{fill:#552222;}#mermaid-svg-KUYV3fHxdXoTRt5j .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-KUYV3fHxdXoTRt5j .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-KUYV3fHxdXoTRt5j .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-KUYV3fHxdXoTRt5j .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-KUYV3fHxdXoTRt5j .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-KUYV3fHxdXoTRt5j .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-KUYV3fHxdXoTRt5j .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-KUYV3fHxdXoTRt5j .marker{fill:#333333;stroke:#333333;}#mermaid-svg-KUYV3fHxdXoTRt5j .marker.cross{stroke:#333333;}#mermaid-svg-KUYV3fHxdXoTRt5j svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-KUYV3fHxdXoTRt5j p{margin:0;}#mermaid-svg-KUYV3fHxdXoTRt5j .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-KUYV3fHxdXoTRt5j .cluster-label text{fill:#333;}#mermaid-svg-KUYV3fHxdXoTRt5j .cluster-label span{color:#333;}#mermaid-svg-KUYV3fHxdXoTRt5j .cluster-label span p{background-color:transparent;}#mermaid-svg-KUYV3fHxdXoTRt5j .label text,#mermaid-svg-KUYV3fHxdXoTRt5j span{fill:#333;color:#333;}#mermaid-svg-KUYV3fHxdXoTRt5j .node rect,#mermaid-svg-KUYV3fHxdXoTRt5j .node circle,#mermaid-svg-KUYV3fHxdXoTRt5j .node ellipse,#mermaid-svg-KUYV3fHxdXoTRt5j .node polygon,#mermaid-svg-KUYV3fHxdXoTRt5j .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-KUYV3fHxdXoTRt5j .rough-node .label text,#mermaid-svg-KUYV3fHxdXoTRt5j .node .label text,#mermaid-svg-KUYV3fHxdXoTRt5j .image-shape .label,#mermaid-svg-KUYV3fHxdXoTRt5j .icon-shape .label{text-anchor:middle;}#mermaid-svg-KUYV3fHxdXoTRt5j .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-KUYV3fHxdXoTRt5j .rough-node .label,#mermaid-svg-KUYV3fHxdXoTRt5j .node .label,#mermaid-svg-KUYV3fHxdXoTRt5j .image-shape .label,#mermaid-svg-KUYV3fHxdXoTRt5j .icon-shape .label{text-align:center;}#mermaid-svg-KUYV3fHxdXoTRt5j .node.clickable{cursor:pointer;}#mermaid-svg-KUYV3fHxdXoTRt5j .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-KUYV3fHxdXoTRt5j .arrowheadPath{fill:#333333;}#mermaid-svg-KUYV3fHxdXoTRt5j .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-KUYV3fHxdXoTRt5j .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-KUYV3fHxdXoTRt5j .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-KUYV3fHxdXoTRt5j .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-KUYV3fHxdXoTRt5j .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-KUYV3fHxdXoTRt5j .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-KUYV3fHxdXoTRt5j .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-KUYV3fHxdXoTRt5j .cluster text{fill:#333;}#mermaid-svg-KUYV3fHxdXoTRt5j .cluster span{color:#333;}#mermaid-svg-KUYV3fHxdXoTRt5j div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-KUYV3fHxdXoTRt5j .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-KUYV3fHxdXoTRt5j rect.text{fill:none;stroke-width:0;}#mermaid-svg-KUYV3fHxdXoTRt5j .icon-shape,#mermaid-svg-KUYV3fHxdXoTRt5j .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-KUYV3fHxdXoTRt5j .icon-shape p,#mermaid-svg-KUYV3fHxdXoTRt5j .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-KUYV3fHxdXoTRt5j .icon-shape .label rect,#mermaid-svg-KUYV3fHxdXoTRt5j .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-KUYV3fHxdXoTRt5j .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-KUYV3fHxdXoTRt5j .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-KUYV3fHxdXoTRt5j :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
Multi-Agent:职责解耦与分布式上下文
派发独立子任务
派发独立子任务
交付代码
交付代码
测试未通过
测试全绿
用户任务
Leader / Architect Agent (只做规划与拆解)
Coder Agent 1 (独立隔离上下文 / 专注写模块A)
Coder Agent 2 (独立隔离上下文 / 专注写模块B)
QA Agent (独立对抗视角 / 运行测试与代码审查)
汇总终态结果给用户
单体 Agent:职责混乱与 Context 爆炸
塞入全部 30 个工具
用户任务
单体 Agent (Prompt: 你既是架构师又是Coder又是QA)
单一 Context 空间 (膨胀至 80K Tokens)
结果:逻辑混乱、死循环、首字延迟 8s+
- 🔸 职责解耦:每个 Agent 拥有极其聚焦的 System Prompt 和极其精简的专属 Toolset(如 Coder 只有代码修改工具,QA 只有测试执行工具);
- 🔸 上下文物理隔离:Subagent 在自己的独立沙箱和独立会话中工作,其探索过程中的中间报错、调试日志不会污染主 Agent 的全局规划;
- 🔸 引入对抗与校验视角:由独立的 QA / Reviewer Agent 站在客观对立面进行验收,打破单体 Agent 的自我幻觉闭环。
一句话总结这一章的核心观点:
Multi-Agent 的本质,是用分布式软件工程的解耦思想,解决大模型在长程推理中的注意力与认知过载问题。
二、Multi-Agent 四大主流协作拓扑架构
在设计多智能体系统时,必须根据业务任务的确定性与发散性选择合适的协作拓扑:
1. 层次主从模式 (Supervisor / Hierarchical) ──► 适用于明确目标、自顶向下拆解的任务
(如企业研发重构、全自动化报告生成)
2. 顺序流水线模式 (Sequential Pipeline) ──► 适用于确定性的多阶段 SOP 流程
(如需求澄清 -> 架构设计 -> 编码 -> 测试)
3. 共享黑板模式 (Blackboard / Shared State) ──► 适用于高并发、多专家异步协作场景
(如多 Agent 协同排查复杂系统告警)
4. 对等自治网络模式 (Peer-to-Peer Swarm) ──► 适用于开放式发散探索与头脑风暴
(如多视角辩论、复杂博弈模拟)
#mermaid-svg-5NSC4PMAdxIJq0Wx{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-5NSC4PMAdxIJq0Wx .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-5NSC4PMAdxIJq0Wx .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-5NSC4PMAdxIJq0Wx .error-icon{fill:#552222;}#mermaid-svg-5NSC4PMAdxIJq0Wx .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-5NSC4PMAdxIJq0Wx .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-5NSC4PMAdxIJq0Wx .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-5NSC4PMAdxIJq0Wx .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-5NSC4PMAdxIJq0Wx .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-5NSC4PMAdxIJq0Wx .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-5NSC4PMAdxIJq0Wx .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-5NSC4PMAdxIJq0Wx .marker{fill:#333333;stroke:#333333;}#mermaid-svg-5NSC4PMAdxIJq0Wx .marker.cross{stroke:#333333;}#mermaid-svg-5NSC4PMAdxIJq0Wx svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-5NSC4PMAdxIJq0Wx p{margin:0;}#mermaid-svg-5NSC4PMAdxIJq0Wx .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-5NSC4PMAdxIJq0Wx .cluster-label text{fill:#333;}#mermaid-svg-5NSC4PMAdxIJq0Wx .cluster-label span{color:#333;}#mermaid-svg-5NSC4PMAdxIJq0Wx .cluster-label span p{background-color:transparent;}#mermaid-svg-5NSC4PMAdxIJq0Wx .label text,#mermaid-svg-5NSC4PMAdxIJq0Wx span{fill:#333;color:#333;}#mermaid-svg-5NSC4PMAdxIJq0Wx .node rect,#mermaid-svg-5NSC4PMAdxIJq0Wx .node circle,#mermaid-svg-5NSC4PMAdxIJq0Wx .node ellipse,#mermaid-svg-5NSC4PMAdxIJq0Wx .node polygon,#mermaid-svg-5NSC4PMAdxIJq0Wx .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-5NSC4PMAdxIJq0Wx .rough-node .label text,#mermaid-svg-5NSC4PMAdxIJq0Wx .node .label text,#mermaid-svg-5NSC4PMAdxIJq0Wx .image-shape .label,#mermaid-svg-5NSC4PMAdxIJq0Wx .icon-shape .label{text-anchor:middle;}#mermaid-svg-5NSC4PMAdxIJq0Wx .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-5NSC4PMAdxIJq0Wx .rough-node .label,#mermaid-svg-5NSC4PMAdxIJq0Wx .node .label,#mermaid-svg-5NSC4PMAdxIJq0Wx .image-shape .label,#mermaid-svg-5NSC4PMAdxIJq0Wx .icon-shape .label{text-align:center;}#mermaid-svg-5NSC4PMAdxIJq0Wx .node.clickable{cursor:pointer;}#mermaid-svg-5NSC4PMAdxIJq0Wx .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-5NSC4PMAdxIJq0Wx .arrowheadPath{fill:#333333;}#mermaid-svg-5NSC4PMAdxIJq0Wx .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-5NSC4PMAdxIJq0Wx .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-5NSC4PMAdxIJq0Wx .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-5NSC4PMAdxIJq0Wx .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-5NSC4PMAdxIJq0Wx .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-5NSC4PMAdxIJq0Wx .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-5NSC4PMAdxIJq0Wx .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-5NSC4PMAdxIJq0Wx .cluster text{fill:#333;}#mermaid-svg-5NSC4PMAdxIJq0Wx .cluster span{color:#333;}#mermaid-svg-5NSC4PMAdxIJq0Wx div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-5NSC4PMAdxIJq0Wx .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-5NSC4PMAdxIJq0Wx rect.text{fill:none;stroke-width:0;}#mermaid-svg-5NSC4PMAdxIJq0Wx .icon-shape,#mermaid-svg-5NSC4PMAdxIJq0Wx .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-5NSC4PMAdxIJq0Wx .icon-shape p,#mermaid-svg-5NSC4PMAdxIJq0Wx .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-5NSC4PMAdxIJq0Wx .icon-shape .label rect,#mermaid-svg-5NSC4PMAdxIJq0Wx .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-5NSC4PMAdxIJq0Wx .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-5NSC4PMAdxIJq0Wx .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-5NSC4PMAdxIJq0Wx :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
3. 共享黑板模式 (Blackboard)
Central Blackboard带版本控制的状态共享空间
Diagnostic Agent
Patch Agent
Verify Agent
2. 顺序流水线模式 (Pipeline)
Agent A (需求)
Agent B (架构)
Agent C (编码)
Agent D (测试)
1. 层次主从模式 (Hierarchical)
Leader / Router
Worker 1
Worker 2
- 🔸 企业生产首选:层次主从(Hierarchical) 与 共享黑板(Blackboard)。因为企业任务追求结果的确定性与执行的可控性,必须有明确的 Leader 掌控全局状态;
- 🔸 警惕无控群聊:严禁在生产中使用没有主控路由的纯自由群聊(Free Chat Swarm),否则 Agent 之间会陷入无限互相客套与死循环对话。
一句话总结这一章的核心观点:
拓扑决定系统上限。没有层级与路由控制的多 Agent,就是一群失控的自嗨机器人。
三、生产级代码实战:手写轻量级 Multi-Agent 分发调度引擎
以下为基于 Python 3.11+ 构建的极简轻量级 Multi-Agent 主从分发调度系统(不依赖任何第三方重型框架,支持并行子任务派发与独立上下文隔离):
"""
multi_agent_orchestrator.py
生产级轻量 Multi-Agent 编排引擎
包含:
– Leader Agent 任务规划
– SubAgent 独立上下文隔离
– 并行任务调度
– 结果聚合(Fan-out / Fan-in)
"""
import asyncio
from typing import Any, Dict, List, Optional
from pydantic import BaseModel
# ============================================================
# Task 数据模型
# ============================================================
class SubTask(BaseModel):
"""Leader 拆解后的子任务"""
task_id: str
assigned_role: str
goal: str
context: str
class SubAgentResult(BaseModel):
"""子代理执行结果"""
task_id: str
status: str
output: str
# ============================================================
# SubAgent
# ============================================================
class SubagentWorker:
"""
具备独立上下文与独立 Toolset 的轻量子代理
每个 SubAgent 拥有:
– 独立 System Prompt
– 独立 Message History
– 独立 Tool 集
"""
def __init__(
self,
role: str,
system_prompt: str,
tools: Optional[Dict[str, Any]] = None,
):
self.role = role
self.system_prompt = system_prompt
self.tools = tools or {}
async def execute_task(
self,
task: SubTask,
) –> SubAgentResult:
"""
在完全隔离的上下文中执行任务
每个 SubAgent 都拥有自己的上下文,
不共享 Message History。
"""
# —————————————————-
# 独立上下文
# —————————————————-
isolated_messages = [
{
"role": "system",
"content": self.system_prompt,
},
{
"role": "user",
"content": (
f"Task Goal: {task.goal}\\n"
f"Context: {task.context}"
),
},
]
# 避免示例中变量未使用
_ = isolated_messages
# —————————————————-
# 模拟 LLM 推理
# —————————————————-
await asyncio.sleep(0.5)
result = (
f"[{self.role}] "
f"Completed task '{task.task_id}': "
"verified and generated artifacts."
)
return SubAgentResult(
task_id=task.task_id,
status="success",
output=result,
)
# ============================================================
# Leader Agent
# ============================================================
class LeaderAgentOrchestrator:
"""
Multi-Agent 主控调度器
工作流程:
User Goal
│
▼
Leader Planning
│
▼
Task Decomposition
│
┌──────┴──────┐
▼ ▼
Coder QA Agent
▼ ▼
└──────┬──────┘
▼
Result Aggregation
▼
Final Deliverable
"""
def __init__(self):
self.workers: Dict[str, SubagentWorker] = {
"coder": SubagentWorker(
role="Coder",
system_prompt=(
"You are an expert Python backend engineer. "
"Focus strictly on code writing."
),
),
"qa": SubagentWorker(
role="QA",
system_prompt=(
"You are a strict QA test engineer. "
"Focus on pytest edge cases and verification."
),
),
}
async def plan_and_dispatch(
self,
user_goal: str,
) –> str:
"""
Leader Agent 执行流程
1. 拆解任务
2. 分配 Agent
3. 并行执行
4. 聚合结果
"""
print(f"🎯 [Leader] Planning goal:\\n{user_goal}\\n")
# —————————————————-
# Step 1:任务拆解
# —————————————————-
subtasks = [
SubTask(
task_id="task_1",
assigned_role="coder",
goal="Implement JWT authentication logic",
context="Using PyJWT",
),
SubTask(
task_id="task_2",
assigned_role="qa",
goal="Write pytest test cases for JWT expired tokens",
context="Coverage > 95%",
),
]
print(
f"📋 [Leader] "
f"Decomposed into {len(subtasks)} subtasks.\\n"
)
# —————————————————-
# Step 2:Fan-out
# —————————————————-
async_tasks = []
for task in subtasks:
worker = self.workers.get(task.assigned_role)
if worker is None:
continue
print(
f"🚀 Launching "
f"[{task.assigned_role}] "
f"for {task.task_id}"
)
async_tasks.append(worker.execute_task(task))
# —————————————————-
# Step 3:并行执行
# —————————————————-
results: List[SubAgentResult] = await asyncio.gather(
*async_tasks
)
# —————————————————-
# Step 4:Fan-in 聚合
# —————————————————-
summary = [
"🎉 [Leader] All subagents finished.",
"",
"Aggregated Deliverable:",
]
for result in results:
summary.append(
f"- {result.task_id} "
f"({result.status})"
)
summary.append(f" {result.output}")
final_report = "\\n".join(summary)
print(final_report)
return final_report
本篇总结
- 🔸 单体 ReAct Agent 存在天然的认知过载与上下文爆炸瓶颈;
- 🔸 Multi-Agent 的核心价值在于职责解耦、上下文物理隔离与对抗校验;
- 🔸 企业生产优先选择层次主从(Hierarchical)与共享黑板(Blackboard)拓扑;
- 🔸 主 Agent 负责全局规划,Subagent 负责隔离执行并集中汇总交付。
理解了多智能体的设计动因后,下一个关键问题是:多 Agent 之间如何定义统一的通信消息格式?如何用 DAG(有向无环图)编排复杂的跨代理工作流?
筒子们本篇为《企业级 Agent 实战指南》· 第三章的第 1 篇,后续续会更新完整的agent的开发的全部过程,如果你对Agent开发感兴趣不妨关注一下本合集。
在下一篇中,我们将深入解构:《Multi-Agent 通信协议与编排中枢:状态机、DAG 与事件总线》!





