知识模块
🤖 Agent 知识模块
十、多 Agent 协作
多智能体协作概述

多智能体协作概述

多智能体协作是构建复杂 AI 系统的基础架构,通过多个 Agent 的分工协作,实现超越单一 Agent 能力边界的任务处理。理解协作模式、设计原则和核心概念是掌握多智能体系统的第一步。


一、核心原理

1.1 多智能体系统的定义

多智能体系统(Multi-Agent System, MAS)由多个自治 Agent 组成,每个 Agent 具有以下特征:

特征描述示例
自治性Agent 能独立决策和行动自主选择执行哪个任务
社会性Agent 能与其他 Agent 交互通过消息传递协作
反应性Agent 能感知环境并响应根据任务状态调整策略
主动性Agent 能主动追求目标主动请求协作或资源
┌─────────────────────────────────────────────────────────────┐
│                    多智能体系统架构                          │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│                    ┌─────────────────┐                      │
│                    │    环境         │                      │
│                    │  Environment    │                      │
│                    └────────┬────────┘                      │
│                             │                               │
│         ┌───────────────────┼───────────────────┐          │
│         │                   │                   │          │
│         ↓                   ↓                   ↓          │
│   ┌───────────┐       ┌───────────┐       ┌───────────┐   │
│   │  Agent A  │ ←───→ │  Agent B  │ ←───→ │  Agent C  │   │
│   │           │       │           │       │           │   │
│   │ • 自治    │       │ • 自治    │       │ • 自治    │   │
│   │ • 感知    │       │ • 感知    │       │ • 感知    │   │
│   │ • 决策    │       │ • 决策    │       │ • 决策    │   │
│   │ • 行动    │       │ • 行动    │       │ • 行动    │   │
│   └───────────┘       └───────────┘       └───────────┘   │
│         │                   │                   │          │
│         └───────────────────┴───────────────────┘          │
│                             │                               │
│                    ┌────────┴────────┐                      │
│                    │   通信网络      │                      │
│                    │ Communication   │                      │
│                    └─────────────────┘                      │
│                                                             │
└─────────────────────────────────────────────────────────────┘

1.2 协作的本质

协作的本质是信息共享行动协调

┌─────────────────────────────────────────────────────────────┐
│                    协作的三个维度                            │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  1. 信息维度:知识共享                                       │
│   ┌─────────────────────────────────────────────────────┐  │
│   │ Agent A 拥有知识 K1 ──→ 共享 ──→ Agent B 获知 K1   │  │
│   │                                                      │  │
│   │ 示例:                                               │  │
│   │ 搜索Agent 找到数据 → 传递给 → 分析Agent 处理数据    │  │
│   └─────────────────────────────────────────────────────┘  │
│                                                             │
│  2. 任务维度:工作分配                                       │
│   ┌─────────────────────────────────────────────────────┐  │
│   │ 总任务 T ──→ 分解 ──→ 子任务 {t1, t2, t3}          │  │
│   │                ↓                                     │  │
│   │          分配给不同Agent执行                         │  │
│   │                                                      │  │
│   │ 示例:                                               │  │
│   │ "开发网站" → 需求分析 + 设计 + 前端 + 后端 + 测试   │  │
│   └─────────────────────────────────────────────────────┘  │
│                                                             │
│  3. 目标维度:统一方向                                       │
│   ┌─────────────────────────────────────────────────────┐  │
│   │ Agent A 目标 GA ──┐                                 │  │
│   │ Agent B 目标 GB ──┼──→ 协调 ──→ 共同目标 G         │  │
│   │ Agent C 目标 GC ──┘                                 │  │
│   │                                                      │  │
│   │ 示例:                                               │  │
│   │ 各Agent优化各自目标 → 协调 → 整体最优解             │  │
│   └─────────────────────────────────────────────────────┘  │
│                                                             │
└─────────────────────────────────────────────────────────────┘

二、协作模式详解

2.1 顺序协作(Sequential)

定义:Agent 按照预设顺序依次执行任务,前一个 Agent 的输出作为后一个 Agent 的输入。

┌─────────────────────────────────────────────────────────────┐
│                    顺序协作模式                              │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   输入 ──→ [Agent A] ──→ [Agent B] ──→ [Agent C] ──→ 输出  │
│             │            │            │                     │
│             ↓            ↓            ↓                     │
│          处理1        处理2        处理3                     │
│                                                             │
│   特点:                                                    │
│   • 流程固定,易于理解和调试                                │
│   • 每个步骤有明确的输入输出                                │
│   • 适合有依赖关系的任务                                    │
│                                                             │
│   示例:新闻写作流水线                                      │
│   ┌─────────┐    ┌─────────┐    ┌─────────┐               │
│   │ 选题    │ ─→ │ 撰写    │ ─→ │ 编辑    │               │
│   │ Agent   │    │ Agent   │    │ Agent   │               │
│   └─────────┘    └─────────┘    └─────────┘               │
│                                                             │
│   适用场景:                                                │
│   • 内容生产流水线                                          │
│   • 数据处理管道                                            │
│   • 审批流程                                                │
│                                                             │
└─────────────────────────────────────────────────────────────┘

代码示例

from crewai import Agent, Task, Crew, Process
 
# 定义 Agent
researcher = Agent(
    role="研究员",
    goal="收集和分析信息",
    backstory="专业的研究员,擅长信息搜集",
    allow_delegation=False
)
 
writer = Agent(
    role="撰稿人",
    goal="撰写高质量文章",
    backstory="资深作家,文笔流畅",
    allow_delegation=False
)
 
editor = Agent(
    role="编辑",
    goal="审校和优化文章",
    backstory="专业编辑,追求完美",
    allow_delegation=False
)
 
# 定义任务
research_task = Task(
    description="研究主题:{topic}",
    agent=researcher
)
 
write_task = Task(
    description="根据研究结果撰写文章",
    agent=writer
)
 
edit_task = Task(
    description="审校文章",
    agent=editor
)
 
# 创建顺序协作的 Crew
crew = Crew(
    agents=[researcher, writer, editor],
    tasks=[research_task, write_task, edit_task],
    process=Process.sequential  # 顺序执行
)
 
# 执行
result = crew.run()

2.2 并行协作(Parallel)

定义:多个 Agent 同时执行独立任务,最后汇总结果。

┌─────────────────────────────────────────────────────────────┐
│                    并行协作模式                              │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│                    ┌─────────┐                             │
│                ┌──→│ Agent A │──┐                          │
│                │   └─────────┘   │                          │
│   输入 ──→ [分发器]              │ [汇总器] ──→ 输出       │
│                │   ┌─────────┐   │                          │
│                └──→│ Agent B │──┘                          │
│                    └─────────┘                             │
│                                                             │
│   特点:                                                    │
│   • 执行效率高,多任务同时进行                              │
│   • 任务之间无依赖关系                                      │
│   • 需要结果汇总机制                                        │
│                                                             │
│   示例:多源数据收集                                        │
│   ┌─────────┐    ┌─────────┐    ┌─────────┐               │
│   │ 天气API │    │ 新闻API │    │ 股票API │               │
│   │ Agent   │    │ Agent   │    │ Agent   │               │
│   └────┬────┘    └────┬────┘    └────┬────┘               │
│        │              │              │                     │
│        └──────────────┼──────────────┘                     │
│                       ↓                                     │
│               ┌─────────────┐                              │
│               │  汇总Agent  │                              │
│               └─────────────┘                              │
│                                                             │
│   适用场景:                                                │
│   • 多源数据收集                                            │
│   • 批量任务处理                                            │
│   • 多方案对比分析                                          │
│                                                             │
└─────────────────────────────────────────────────────────────┘

2.3 层次协作(Hierarchical)

定义:高层 Agent 负责规划和协调,底层 Agent 负责具体执行。

┌─────────────────────────────────────────────────────────────┐
│                    层次协作模式                              │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│                     ┌─────────────┐                        │
│                     │  Manager    │ ← 规划、协调、监督     │
│                     │   Agent     │                        │
│                     └──────┬──────┘                        │
│                            │                               │
│              ┌─────────────┼─────────────┐                │
│              ↓             ↓             ↓                │
│        ┌──────────┐  ┌──────────┐  ┌──────────┐          │
│        │ Worker   │  │ Worker   │  │ Worker   │          │
│        │ Agent A  │  │ Agent B  │  │ Agent C  │          │
│        │ (执行者) │  │ (执行者) │  │ (执行者) │          │
│        └──────────┘  └──────────┘  └──────────┘          │
│              │             │             │                │
│              └─────────────┼─────────────┘                │
│                            ↓                               │
│                     ┌─────────────┐                        │
│                     │  结果汇总   │                        │
│                     └─────────────┘                        │
│                                                             │
│   特点:                                                    │
│   • 清晰的职责分层                                          │
│   • 便于管理和监控                                          │
│   • 支持动态任务分配                                        │
│                                                             │
│   示例:项目管理                                            │
│   ┌───────────────────────────────────────────────┐       │
│   │                项目经理Agent                   │       │
│   │               (规划、分配、监督)               │       │
│   └─────────────────────┬─────────────────────────┘       │
│              ┌──────────┼──────────┐                      │
│              ↓          ↓          ↓                      │
│        ┌────────┐ ┌────────┐ ┌────────┐                  │
│        │开发Agent│ │测试Agent│ │运维Agent│                  │
│        └────────┘ └────────┘ └────────┘                  │
│                                                             │
│   适用场景:                                                │
│   • 大型项目开发                                            │
│   • 复杂任务分解                                            │
│   • 企业级应用                                              │
│                                                             │
└─────────────────────────────────────────────────────────────┘

2.4 混合协作(Hybrid)

定义:根据任务特点,灵活组合多种协作模式。

┌─────────────────────────────────────────────────────────────┐
│                    混合协作模式                              │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│                    ┌─────────────┐                         │
│                    │ Orchestrator│ ← 总调度                │
│                    │   Agent     │                         │
│                    └──────┬──────┘                         │
│                           │                                │
│         ┌─────────────────┼─────────────────┐             │
│         ↓                 ↓                 ↓             │
│   ┌───────────┐     ┌───────────┐     ┌───────────┐      │
│   │ 顺序链    │     │ 并行组    │     │ 层次结构  │      │
│   │ A → B → C │     │ D ║ E ║ F │     │  G        │      │
│   │           │     │           │     │ / \       │      │
│   │ (流水线)  │     │ (并行)    │     │H   I      │      │
│   └───────────┘     └───────────┘     └───────────┘      │
│         │                 │                 │             │
│         └─────────────────┼─────────────────┘             │
│                           ↓                                │
│                    ┌─────────────┐                         │
│                    │  结果整合   │                         │
│                    └─────────────┘                         │
│                                                             │
│   特点:                                                    │
│   • 最大灵活性                                              │
│   • 适应复杂场景                                            │
│   • 需要精细设计                                            │
│                                                             │
│   示例:智能客服系统                                        │
│   ┌───────────────────────────────────────────────┐       │
│   │                调度Agent                       │       │
│   │           (分析问题、路由分发)                 │       │
│   └─────────────────────┬─────────────────────────┘       │
│              ┌──────────┼──────────┐                      │
│              ↓          ↓          ↓                      │
│        ┌────────┐ ┌────────┐ ┌────────┐                  │
│        │FAQ Agent│ │人工客服│ │技术支持│                  │
│        │(自动应答)│ │Agent   │ │Agent   │                  │
│        └────────┘ │(人机协作)│ │(专家链) │                  │
│                    └────────┘ └────────┘                  │
│                                                             │
│   适用场景:                                                │
│   • 企业级应用                                              │
│   • 复杂业务流程                                            │
│   • 多场景覆盖                                              │
│                                                             │
└─────────────────────────────────────────────────────────────┘

三、核心组件设计

3.1 Agent 角色设计

每个 Agent 需要明确定义其角色:

设计要素说明示例
角色名称标识 Agent 身份"数据分析师"
目标Agent 追求的结果"从数据中提取洞察"
能力Agent 具备的技能"数据清洗、统计分析、可视化"
工具Agent 可用的工具"Python解释器、数据库查询"
约束Agent 的行为边界"不执行删除操作"
from dataclasses import dataclass
from typing import List, Optional
 
@dataclass
class AgentRole:
    """Agent 角色定义"""
    name: str                    # 角色名称
    goal: str                    # 目标
    backstory: str               # 背景故事
    skills: List[str]            # 技能列表
    tools: List[str]             # 可用工具
    constraints: List[str]       # 约束条件
    
    def to_prompt(self) -> str:
        """转换为系统提示词"""
        return f"""
你是一个{self.name}
 
背景:{self.backstory}
 
目标:{self.goal}
 
技能:{', '.join(self.skills)}
 
可用工具:{', '.join(self.tools)}
 
约束条件:
{chr(10).join(f'- {c}' for c in self.constraints)}
"""
 
# 定义角色
data_analyst = AgentRole(
    name="数据分析师",
    goal="从数据中提取有价值的洞察",
    backstory="拥有10年数据分析经验,擅长从复杂数据中发现规律",
    skills=["数据清洗", "统计分析", "可视化", "机器学习"],
    tools=["Python解释器", "数据库查询", "图表生成器"],
    constraints=["不修改原始数据", "不执行删除操作"]
)

3.2 任务分配机制

┌─────────────────────────────────────────────────────────────┐
│                    任务分配流程                              │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   ┌─────────────┐                                          │
│   │   总任务    │                                          │
│   └──────┬──────┘                                          │
│          │                                                  │
│          ↓                                                  │
│   ┌─────────────────────────────────────────────────────┐  │
│   │                   任务分解                           │  │
│   │                                                      │  │
│   │   总任务 ──→ 子任务列表 ──→ 依赖关系图               │  │
│   │                                                      │  │
│   │   示例:                                            │  │
│   │   "分析销售数据" ──→ {                              │  │
│   │     t1: 数据收集 (无依赖),                          │  │
│   │     t2: 数据清洗 (依赖t1),                          │  │
│   │     t3: 统计分析 (依赖t2),                          │  │
│   │     t4: 生成报告 (依赖t3)                           │  │
│   │   }                                                 │  │
│   └─────────────────────────────────────────────────────┘  │
│          │                                                  │
│          ↓                                                  │
│   ┌─────────────────────────────────────────────────────┐  │
│   │                   能力匹配                           │  │
│   │                                                      │  │
│   │   子任务 ──→ 匹配Agent ──→ 检查负载                  │  │
│   │                                                      │  │
│   │   匹配算法:                                        │  │
│   │   score = skill_match * 0.5 +                       │  │
│   │          availability * 0.3 +                       │  │
│   │          success_rate * 0.2                         │  │
│   └─────────────────────────────────────────────────────┘  │
│          │                                                  │
│          ↓                                                  │
│   ┌─────────────────────────────────────────────────────┐  │
│   │                   执行调度                           │  │
│   │                                                      │  │
│   │   按依赖顺序 ──→ 分配任务 ──→ 监控执行               │  │
│   │                                                      │  │
│   │   调度策略:                                        │  │
│   │   • 拓扑排序确定执行顺序                           │  │
│   │   • 无依赖任务并行执行                             │  │
│   │   • 失败任务重新分配或重试                         │  │
│   └─────────────────────────────────────────────────────┘  │
│                                                             │
└─────────────────────────────────────────────────────────────┘

3.3 通信基础设施

from abc import ABC, abstractmethod
from typing import Dict, Any, Optional
from dataclasses import dataclass
from datetime import datetime
import json
 
@dataclass
class Message:
    """标准消息格式"""
    sender: str                 # 发送者ID
    receiver: str               # 接收者ID (broadcast表示广播)
    message_type: str           # 消息类型
    content: Any                # 消息内容
    timestamp: datetime         # 时间戳
    metadata: Dict[str, Any]    # 元数据
    
    def to_json(self) -> str:
        return json.dumps({
            "sender": self.sender,
            "receiver": self.receiver,
            "message_type": self.message_type,
            "content": self.content,
            "timestamp": self.timestamp.isoformat(),
            "metadata": self.metadata
        })
    
    @classmethod
    def from_json(cls, json_str: str) -> "Message":
        data = json.loads(json_str)
        return cls(
            sender=data["sender"],
            receiver=data["receiver"],
            message_type=data["message_type"],
            content=data["content"],
            timestamp=datetime.fromisoformat(data["timestamp"]),
            metadata=data["metadata"]
        )
 
 
class CommunicationBus(ABC):
    """通信总线抽象"""
    
    @abstractmethod
    def send(self, message: Message) -> bool:
        """发送消息"""
        pass
    
    @abstractmethod
    def receive(self, agent_id: str) -> Optional[Message]:
        """接收消息"""
        pass
    
    @abstractmethod
    def broadcast(self, message: Message) -> bool:
        """广播消息"""
        pass
 
 
class InMemoryBus(CommunicationBus):
    """内存通信总线(用于单机)"""
    
    def __init__(self):
        self.mailboxes: Dict[str, list] = {}  # agent_id -> messages
    
    def register(self, agent_id: str):
        """注册 Agent"""
        self.mailboxes[agent_id] = []
    
    def send(self, message: Message) -> bool:
        if message.receiver not in self.mailboxes:
            return False
        self.mailboxes[message.receiver].append(message)
        return True
    
    def receive(self, agent_id: str) -> Optional[Message]:
        if agent_id not in self.mailboxes or not self.mailboxes[agent_id]:
            return None
        return self.mailboxes[agent_id].pop(0)
    
    def broadcast(self, message: Message) -> bool:
        for agent_id in self.mailboxes:
            if agent_id != message.sender:
                self.mailboxes[agent_id].append(
                    Message(
                        sender=message.sender,
                        receiver=agent_id,
                        message_type=message.message_type,
                        content=message.content,
                        timestamp=message.timestamp,
                        metadata=message.metadata
                    )
                )
        return True

四、设计原则

4.1 单一职责原则

每个 Agent 应该只负责一个特定领域:

┌─────────────────────────────────────────────────────────────┐
│                    单一职责原则示例                          │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   ❌ 反模式:全能 Agent                                     │
│   ┌─────────────────────────────────────────────────────┐  │
│   │                   超级 Agent                        │  │
│   │                                                    │  │
│   │  • 搜索信息                                        │  │
│   │  • 分析数据                                        │  │
│   │  • 撰写文章                                        │  │
│   │  • 代码开发                                        │  │
│   │  • 测试验证                                        │  │
│   │  • 部署发布                                        │  │
│   │                                                    │  │
│   │  问题:职责不清、难以优化、出错难定位               │  │
│   └─────────────────────────────────────────────────────┘  │
│                                                             │
│   ✅ 正确模式:职责分离                                     │
│   ┌───────┐   ┌───────┐   ┌───────┐   ┌───────┐          │
│   │搜索   │   │分析   │   │撰写   │   │发布   │          │
│   │Agent  │ → │Agent  │ → │Agent  │ → │Agent  │          │
│   │       │   │       │   │       │   │       │          │
│   │专注   │   │专注   │   │专注   │   │专注   │          │
│   │信息   │   │数据   │   │写作   │   │发布   │          │
│   │检索   │   │处理   │   │创作   │   │运维   │          │
│   └───────┘   └───────┘   └───────┘   └───────┘          │
│                                                             │
│   优势:职责清晰、易于优化、出错易定位                      │
│                                                             │
└─────────────────────────────────────────────────────────────┘

4.2 松耦合原则

Agent 之间应该通过接口通信,而不是直接依赖:

耦合程度描述问题
紧耦合Agent 直接调用另一个 Agent 的方法难以替换、测试困难
松耦合通过消息队列或共享状态通信易于替换、测试简单

4.3 容错原则

系统应该能够处理单个 Agent 的失败:

class FaultTolerantOrchestrator:
    """容错编排器"""
    
    def __init__(self, agents: List[Agent], max_retries: int = 3):
        self.agents = {agent.id: agent for agent in agents}
        self.max_retries = max_retries
        self.fallback_agents = {}  # 备用 Agent
    
    def register_fallback(self, primary_id: str, fallback_agent: Agent):
        """注册备用 Agent"""
        self.fallback_agents[primary_id] = fallback_agent
    
    async def execute_task(self, task: Task) -> Result:
        """执行任务(带容错)"""
        agent_id = self._select_agent(task)
        
        for attempt in range(self.max_retries):
            try:
                agent = self.agents[agent_id]
                result = await agent.execute(task)
                return result
            except Exception as e:
                print(f"Agent {agent_id} 失败 (尝试 {attempt + 1}): {e}")
                
                # 尝试备用 Agent
                if agent_id in self.fallback_agents:
                    try:
                        fallback = self.fallback_agents[agent_id]
                        result = await fallback.execute(task)
                        return result
                    except Exception as e2:
                        print(f"备用 Agent 也失败: {e2}")
        
        raise RuntimeError(f"任务执行失败,已尝试 {self.max_retries} 次")

五、适用场景

5.1 最佳适用场景

场景类型描述推荐模式
软件开发需求、设计、开发、测试协作层次协作(MetaGPT)
内容创作研究者、写作者、编辑协作顺序协作(CrewAI)
数据分析多源数据收集和处理并行协作
智能客服多场景问题处理混合协作
项目规划规划、执行、监控层次协作

5.2 不适用场景

场景原因推荐替代方案
简单任务协作开销大于收益单 Agent + ReAct
实时响应通信延迟难以接受单 Agent 一步执行
资源受限多 Agent 内存消耗大单 Agent
高度耦合任务难以分解和并行单 Agent + Plan-Execute

六、面试问答

Q1: 什么时候应该使用多 Agent 而不是单 Agent?

回答要点

  • 任务复杂度超出单 Agent 能力边界
  • 需要多种专业能力组合
  • 任务可并行化分解
  • 需要冗余容错机制
  • 任务有明确的子任务分解

Q2: 如何设计 Agent 间的通信协议?

回答要点

  1. 定义标准消息格式(发送者、接收者、类型、内容)
  2. 确定通信模式(同步/异步、点对点/广播)
  3. 设计消息压缩和过滤机制
  4. 处理消息丢失和重复

Q3: 多 Agent 系统的可扩展性如何保证?

回答要点

  1. 模块化设计,Agent 可独立部署
  2. 松耦合架构,通过消息通信
  3. 动态注册机制,支持 Agent 动态加入
  4. 负载均衡,避免单点瓶颈

Q4: 如何评估多 Agent 协作效果?

回答要点

  • 任务完成率
  • 协作效率(通信次数 / 任务完成时间)
  • 资源利用率
  • 冲突发生频率
  • 容错能力

七、小结

概念一句话总结面试关键词
协作模式四种模式应对不同场景顺序、并行、层次、混合
角色设计明确定义 Agent 身份和职责目标、能力、工具、约束
任务分配能力匹配和负载均衡分解、匹配、调度
设计原则单一职责、松耦合、容错SOLID、可扩展

一句话总结:多智能体协作通过明确的角色分工和协调机制,实现了复杂任务的分解和并行处理,是构建企业级 AI 系统的核心架构。


最后更新:2026年3月19日