Skip to content

65. 多智能体模式(Multi-Agent Pattern) ​

难度 P1 高频 · 岗位 应用 · 频率 ★★★★☆ · 预计阅读 10 min 公司 OpenAI · Anthropic 相关题 Q60 设计模式 · Q61 反射模式

本题阅读地图 ​

  1. 面试场景还原 — 1 min
  2. TL;DR 速记 — 30 sec
  3. 图解 — 30 sec
  4. 详细解析 — 6 min
  5. 常见踩坑与反例 — 1 min
  6. 面试官可能继续追问 — 1 min

面试场景还原 ​

👔面试官:假设你要做一个 AI 助手,能自动完成「帮我调研 AI 编程工具市场,写一份 50 页的行业分析报告,包含竞品对比、市场规模、技术趋势、投资建议」。单 Agent 能做吗?

🙋‍♂️我:可能做不完,任务太复杂了,涉及搜索、数据分析、文案写作多个环节。

👔面试官:对,这种跨领域、多步骤、长周期的超复杂任务,单 Agent 很难搞定。这时候需要多智能体模式。你能讲讲多智能体的架构是怎么设计的吗?比如 Manus 是怎么实现的?

🙋‍♂️我:呃……多个 Agent 分工合作?

👔面试官:可以这么理解。但具体有哪些协作方式?主从式、对等式、流水线式分别适用于什么场景?Agent 之间怎么通信、怎么协调?这些都是多智能体架构的关键问题。


TL;DR 速记 ​

  • 多智能体核心价值:处理单 Agent 无法完成的超复杂、跨领域、长周期任务
  • 三种协作拓扑:主从式(最常见)、对等式(灵活复杂)、流水线式(顺序执行)
  • 角色专业化:每个 Agent 有专属领域(搜索、分析、写作、审核)
  • 通信机制:共享状态(黑板)、消息传递、函数调用
  • 关键挑战:协调开销、错误传播、调试困难、成本高昂
  • 典型产品:Manus(主从式)、MetaGPT(角色分工)、AutoGen(通用框架)
  • 选型原则:任务复杂度 > 单 Agent 能力时,考虑多智能体

图解 ​

图 1:多智能体系统架构 ​

图 2:三种协作拓扑对比 ​


详细解析 ​

为什么需要多智能体? ​

单 Agent 的局限性:

局限说明示例
上下文限制LLM 上下文窗口有限无法同时处理 50 页报告的全部内容
能力单一单个 Agent 难以精通所有领域搜索、分析、写作、设计都擅长
稳定性差复杂任务容易出错长链路任务一步错步步错
效率低下串行处理慢搜索和写作可以并行
成本高全用大模型不划算简单子任务可以用小模型

多智能体的优势:

  1. 专业化分工:每个 Agent 精通特定领域
  2. 并行处理:独立子任务同时执行
  3. 容错性强:单个 Agent 失败不影响整体
  4. 可扩展性:新增 Agent 扩展新能力
  5. 成本优化:不同 Agent 可用不同模型

多智能体的核心架构 ​

三层架构模型:

┌─────────────────────────────────────────────────────────────┐
│                    协调层(Orchestrator)                      │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────────┐      │
│  │ 任务理解  │→│ 任务拆解  │→│ 资源分配  │→│ 结果整合  │      │
│  └──────────┘  └──────────┘  └──────────┘  └──────────┘      │
└─────────────────────────────────────────────────────────────┘
                              ↓ 分发任务
┌─────────────────────────────────────────────────────────────┐
│                    执行层(Execution Layer)                   │
│  ┌────────┐  ┌────────┐  ┌────────┐  ┌────────┐  ┌────────┐ │
│  │搜索Agent│  │分析Agent│  │写作Agent│  │设计Agent│  │审核Agent│ │
│  └────────┘  └────────┘  └────────┘  └────────┘  └────────┘ │
└─────────────────────────────────────────────────────────────┘
                              ↓ 读写数据
┌─────────────────────────────────────────────────────────────┐
│                    共享层(Shared Layer)                      │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐                    │
│  │ 任务上下文 │  │ 中间结果  │  │ 执行状态  │                    │
│  └──────────┘  └──────────┘  └──────────┘                    │
└─────────────────────────────────────────────────────────────┘

角色设计原则:

角色职责常用模式工具
规划 Agent理解任务、拆解子任务、分配资源规划模式任务管理工具
搜索 Agent信息检索、数据收集ReAct + 工具搜索引擎、数据库
分析 Agent数据处理、模式识别、洞察提取ReAct分析工具、Python
写作 Agent内容生成、文案撰写反射模式文档工具
设计 Agent可视化、UI/UX 设计反射模式设计工具
审核 Agent质量检查、合规审查、事实核查反射模式规则引擎
整合 Agent汇总结果、生成最终输出规划模式文档生成

协作拓扑:主从式 ​

架构特点:

  • 一个 Supervisor(主 Agent)负责协调
  • 多个 Worker(子 Agent)负责执行
  • Supervisor 决定任务分配和结果整合
  • Worker 之间不直接通信,都通过 Supervisor

工作流程:

python
class SupervisorWorkerSystem:
    """主从式多智能体系统"""

    def __init__(self):
        self.supervisor = SupervisorAgent()
        self.workers = {
            "researcher": ResearchAgent(),
            "analyst": AnalysisAgent(),
            "writer": WritingAgent(),
        }

    async def execute(self, task: str) -> str:
        # Supervisor 理解并拆解任务
        subtasks = await self.supervisor.decompose(task)

        # 分配任务给 Workers
        results = {}
        for subtask in subtasks:
            worker = self.workers[subtask.assigned_role]
            result = await worker.execute(subtask)
            results[subtask.id] = result

            # Supervisor 检查中间结果
            if await self.supervisor.need_revision(subtask, result):
                revised = await worker.revise(result)
                results[subtask.id] = revised

        # Supervisor 整合最终结果
        final = await self.supervisor.synthesize(task, results)
        return final

适用场景:

场景说明
任务拆解清晰可以明确分配子任务
需要中心协调子任务之间有依赖关系
质量要求高Supervisor 可以审核和修正
团队规模中等5-10 个 Worker 比较合适

典型产品:Manus、MetaGPT

协作拓扑:对等式 ​

架构特点:

  • 没有中心协调者
  • Agent 之间直接通信
  • 更灵活,适合动态协作
  • 复杂度高,难以调试

工作流程:

python
class PeerToPeerSystem:
    """对等式多智能体系统"""

    def __init__(self):
        self.agents = {
            "agent_a": AgentA(),
            "agent_b": AgentB(),
            "agent_c": AgentC(),
        }
        # 注册通信接口
        for name, agent in self.agents.items():
            agent.register_peers(self.agents)

    async def execute(self, task: str) -> str:
        # 启动一个 Agent 作为入口
        entry_agent = self.agents["agent_a"]

        # Agent 自主决定调用哪个其他 Agent
        result = await entry_agent.handle(task)

        # 结果在 Agent 之间传递,直到完成
        return result

通信协议示例:

python
class AgentMessage:
    """Agent 间消息格式"""

    def __init__(self, sender: str, receiver: str, content: dict, msg_type: str):
        self.sender = sender
        self.receiver = receiver
        self.content = content
        self.type = msg_type  # REQUEST, RESPONSE, BROADCAST
        self.timestamp = datetime.now()

适用场景:

场景说明
任务边界模糊难以预先定义子任务
需要动态协作Agent 根据情况自主决定调用谁
探索性任务不确定最佳路径
容错要求高单个 Agent 失败可以切换

典型产品:AutoGen、CAMEL

协作拓扑:流水线式 ​

架构特点:

  • Agent 按顺序排列
  • 输出直接作为下一个 Agent 的输入
  • 类似工厂流水线
  • 适合有明确步骤的任务

工作流程:

python
class PipelineSystem:
    """流水线式多智能体系统"""

    def __init__(self):
        self.stages = [
            DataCollectionAgent(),
            DataCleaningAgent(),
            AnalysisAgent(),
            VisualizationAgent(),
            ReportGenerationAgent(),
        ]

    async def execute(self, input_data: str) -> str:
        data = input_data

        for i, stage in enumerate(self.stages):
            print(f"Stage {i+1}: {stage.__class__.__name__}")
            data = await stage.process(data)

            # 可选:中间结果检查点
            if i < len(self.stages) - 1:
                await self.checkpoint(data, stage=i)

        return data

适用场景:

场景流水线示例
数据处理采集 → 清洗 → 转换 → 存储
内容生产选题 → 资料 → 写作 → 编辑 → 发布
软件开发需求 → 设计 → 编码 → 测试 → 部署
报告生成搜索 → 分析 → 撰写 → 排版 → 校对

错误处理策略:

python
async def execute_with_recovery(self, input_data: str) -> str:
    data = input_data

    for i, stage in enumerate(self.stages):
        try:
            data = await stage.process(data)
        except Exception as e:
            # 策略 1:重试当前阶段
            if await self.can_retry(stage, e):
                data = await stage.retry(data)
            # 策略 2:回退到上一阶段
            elif i > 0:
                data = await self.rollback(i-1)
                data = await self.stages[i-1].reprocess(data)
            # 策略 3:人工介入
            else:
                raise PipelineError(f"Stage {i} failed: {e}")

    return data

通信与协调机制 ​

三种通信模式:

模式说明优点缺点
直接调用Agent A 直接调用 Agent B简单、延迟低紧耦合、难扩展
消息队列通过消息中间件通信解耦、异步、可扩展延迟高、复杂
共享状态通过共享存储通信状态可见、可恢复需要同步机制

黑板模式(Blackboard):

python
class BlackboardSystem:
    """黑板模式:共享状态通信"""

    def __init__(self):
        self.blackboard = {
            "task": None,
            "hypotheses": [],  # 各 Agent 的假设/结果
            "solutions": [],
            "status": "idle"
        }
        self.agents = []

    async def execute(self, task: str):
        self.blackboard["task"] = task
        self.blackboard["status"] = "running"

        # 各 Agent 轮询黑板,贡献知识
        while not self.is_complete():
            for agent in self.agents:
                if agent.can_contribute(self.blackboard):
                    contribution = await agent.contribute(self.blackboard)
                    self.blackboard["hypotheses"].append(contribution)

        return self.blackboard["solutions"]

消息总线模式:

python
class MessageBus:
    """消息总线:发布-订阅通信"""

    def __init__(self):
        self.subscribers = defaultdict(list)

    def subscribe(self, event_type: str, agent):
        self.subscribers[event_type].append(agent)

    async def publish(self, event_type: str, message: dict):
        for agent in self.subscribers[event_type]:
            await agent.receive(event_type, message)

五种设计模式完整对比:

模式核心机制复杂度适用场景典型代表
反射模式生成→检查→优化⭐⭐高精度输出代码生成助手
工具使用模式LLM + API 调用⭐⭐⭐需要实时数据天气查询 Bot
ReAct 模式思考-行动循环⭐⭐⭐⭐复杂单任务数据分析助手
规划模式任务拆解+执行⭐⭐⭐⭐⭐战略级长任务Deep Research
多智能体模式多 Agent 协作⭐⭐⭐⭐⭐跨领域超复杂任务Manus

常见踩坑与反例 ​

踩坑 1:过早引入多智能体 ​

错误做法: 单 Agent 能搞定的任务硬上多智能体,增加不必要的复杂度。

正确做法: 从简单模式开始,只有当任务复杂度超过单 Agent 能力时才升级。

踩坑 2:Agent 划分过细 ​

错误做法: 一个简单报告生成任务拆成 10 个 Agent,协调开销超过收益。

正确做法: Agent 数量控制在合理范围(通常 3-7 个),避免过度拆分。

踩坑 3:通信协议不统一 ​

错误做法: 不同 Agent 用不同的消息格式,集成困难。

正确做法: 定义统一的通信协议和接口标准。

踩坑 4:忽视错误传播 ​

错误做法: 一个 Agent 失败导致整个系统崩溃。

正确做法: 实现错误隔离和降级策略(跳过失败 Agent、使用默认值、人工介入)。

踩坑 5:缺少可观测性 ​

错误做法: 多 Agent 协作过程黑盒,出问题无法定位。

正确做法: 完善的日志、追踪、状态可视化(如 LangSmith、Agent 执行看板)。


面试官可能继续追问 ​

  • 追问 1:Manus 的多智能体架构具体是怎么设计的? 答题要点:Manus 采用主从式架构,有一个中央规划 Agent 负责任务拆解和资源分配,多个专业 Agent(搜索、编码、分析等)并行执行,通过共享状态(黑板模式)通信,最后由整合 Agent 汇总结果。

  • 追问 2:多智能体系统的性能瓶颈在哪里? 答题要点:协调开销(Supervisor 成为瓶颈)、通信延迟(Agent 间频繁通信)、上下文传递(大量数据在各 Agent 间传递)、LLM 调用成本(多 Agent 意味着多倍成本)。

  • 追问 3:如何处理 Agent 之间的冲突? 答题要点:中央仲裁(Supervisor 裁决)、投票机制(多数决)、优先级机制(高优先级 Agent 覆盖)、人工介入(复杂冲突人工判断)。

  • 追问 4:多智能体系统如何保证一致性? 答题要点:共享状态版本控制、事务机制(ACID)、最终一致性设计、冲突检测与解决、定期同步检查点。


面试总结 ​

多智能体模式是 AI Agent 设计模式中最复杂的层级。面试时强调三点:

  1. 三种协作拓扑:主从式(最常见,适合明确分工)、对等式(灵活,适合探索性任务)、流水线式(顺序执行,适合流程明确任务)
  2. 核心价值:通过专业化分工和并行处理,解决单 Agent 无法完成的超复杂任务
  3. 关键挑战:协调开销、通信设计、错误隔离、可观测性——这些是多智能体系统的工程难点

记住:多智能体不是万能药。只有当任务复杂度确实超过单 Agent 能力时,才值得引入多智能体的复杂度。面试时展示你能根据任务特征选择合适的协作拓扑,并意识到多智能体带来的工程挑战。

章节首页 · ← Q64 · Q66 →

最后更新2026-05-05
难度P1
频率high
阅读10 min
主题agent / multi-agent / architecture
觉得有帮助?把这个链接转给正在求职的朋友 · 用 Ctrl + K 全站搜索其它题