跳转至

第7章 多智能体简介

学习目标

  • 理解单 Agent 与多 Agent 系统的区别
  • 掌握中心化与去中心化两种协作模式
  • 了解 CrewAI、AutoGen、OpenAI Swarm 等主流框架
  • 识别多 Agent 系统的典型应用场景
  • 使用 Python 编写一个简单的多 Agent 协作示例

问题导入

当一个 Agent 承担过多职责——既要检索、又要分析、还要撰写报告——它的 Prompt 会臃肿、工具会冲突、错误率会上升。正如人类社会通过分工提升效率,复杂 AI 任务也需要多个专精 Agent 协作完成。多智能体(Multi-Agent)系统让每个 Agent 专注一类能力,通过通信与协调完成超出单 Agent 能力边界的任务。例如"软件研发团队"可由产品经理 Agent、开发 Agent、测试 Agent、Code Review Agent 协同交付一个功能。多智能体是 Agent 工程从"单兵作战"走向"组织化协作"的关键演进,也是本章作为第 1 卷收尾、衔接后续卷次的桥梁。

核心概念

1. 单 Agent vs 多 Agent 系统

  • 单 Agent:一个 LLM 实例承担所有角色与工具,结构简单、成本低,但 Prompt 易冲突、上下文易膨胀。
  • 多 Agent 系统(MAS):多个各有专精的 Agent 分工协作,每个 Agent 拥有独立 Prompt、工具集与记忆,通过消息传递协同。
  • 取舍:多 Agent 提升了能力上限与可扩展性,但增加了协调复杂度、token 成本与延迟。

2. 协作模式

  • 中心化(Orchestrator / Hub):一个"主管 Agent"负责任务分解、分派与汇总,其他 Agent 作为执行者。结构清晰、易控,但主管可能成为瓶颈。OpenAI Agents SDK 的 Handoff、CrewAI 的 Crew 即属此类。
  • 去中心化(Peer-to-Peer):Agent 之间平等通信,无中央控制。灵活、可扩展,但协调复杂、易陷入死循环。AutoGen 的群聊模式接近此类。
  • 层级化(Hierarchical):多级主管嵌套,适合大型任务分解,如"总监→经理→执行者"。

3. 通信机制

  • 直接消息传递:Agent A 显式调用 Agent B 并传递任务。
  • 共享黑板(Blackboard):所有 Agent 读写同一共享状态空间。
  • Handoff / 转交:Agent A 判断任务不属于自己,转交给更合适的 Agent B(OpenAI Agents SDK 核心特性)。

4. 主流框架简介

框架 厂商 特点
OpenAI Agents SDK OpenAI 轻量,原生 Handoff、Guardrails,与 OpenAI 模型深度集成
CrewAI CrewAI Inc. 角色化(Crew + Task),上手快,社区活跃
AutoGen Microsoft 对话驱动,支持群聊与代码执行,研究友好
LangGraph LangChain 基于状态图,灵活可控,适合复杂流程
Swarm(实验性) OpenAI 极简概念验证,启发 Agents SDK

5. 应用场景

  • 软件研发:PM Agent 拆需求 → Dev Agent 写代码 → Test Agent 写测试 → Reviewer Agent 审查。
  • 内容生产:调研 Agent 收集资料 → 撰写 Agent 起草 → 编辑 Agent 润色 → 校对 Agent 查错。
  • 投资研究:行业 Agent 分析赛道、财务 Agent 解读财报、风控 Agent 评估风险、汇总 Agent 出报告。
  • 客户运营:售前 Agent 推荐方案、售后 Agent 处理工单、分析 Agent 沉淀洞察。

6. 多 Agent 设计要点

  • 职责单一:每个 Agent 只负责一个明确职责,避免 Prompt 膨胀。
  • 明确接口:Agent 间传递的数据结构需清晰定义。
  • 可观测:记录每个 Agent 的输入输出,便于调试。
  • 成本控制:多 Agent 易放大 token 消耗,需设预算与最大轮次。
  • 避免环路:设置终止条件与最大交互轮数,防止 Agent 互相推诿死循环。

原理图

flowchart TD
    User[用户任务] --> Orchestrator[主管 Agent\n中心化协调]

    Orchestrator -->|分派| A1[调研 Agent]
    Orchestrator -->|分派| A2[分析 Agent]
    Orchestrator -->|分派| A3[撰写 Agent]

    A1 -->|结果| Orchestrator
    A2 -->|结果| Orchestrator
    A3 -->|结果| Orchestrator

    Orchestrator --> Final[最终交付]

    subgraph 去中心化对比
        B1[Agent X] <--> B2[Agent Y]
        B2 <--> B3[Agent Z]
        B1 <--> B3
    end
图:中心化多 Agent 协作(上)与去中心化对等协作(下)对比

示例代码

使用 CrewAI 构建一个"调研 + 撰写"两 Agent 协作的最小示例。

import os
from crewai import Agent, Task, Crew, Process

# 默认使用 OpenAI,可按需切换 LLM
os.environ.setdefault("OPENAI_API_KEY", "your-key-here")


def build_research_crew(topic: str) -> Crew:
    """构建一个调研+撰写的两 Agent 协作 Crew。

    Args:
        topic: 待调研的主题。
    """
    researcher = Agent(
        role="资深研究员",
        goal=f"围绕主题 '{topic}' 收集 3 条关键事实与数据",
        backstory="你擅长快速检索与归纳信息,输出结构化要点。",
        allow_delegation=False,
    )

    writer = Agent(
        role="技术撰稿人",
        goal="基于研究员的要点,撰写一段 200 字的科普短文",
        backstory="你擅长把技术内容转化为通俗易懂的中文短文。",
        allow_delegation=False,
    )

    research_task = Task(
        description=f"调研主题:{topic},输出 3 条关键事实。",
        expected_output="包含 3 条事实的要点列表",
        agent=researcher,
    )

    write_task = Task(
        description="根据研究要点写一段 200 字科普短文。",
        expected_output="一段通顺的中文科普短文",
        agent=writer,
        context=[research_task],
    )

    return Crew(
        agents=[researcher, writer],
        tasks=[research_task, write_task],
        process=Process.sequential,
    )


if __name__ == "__main__":
    crew = build_research_crew("多智能体系统在企业中的应用")
    result = crew.kickoff()
    print("最终产出:\n", result)

运行结果说明:研究员 Agent 先输出 3 条关键事实,撰稿 Agent 据此生成一段科普短文,演示了 Agent 间的顺序协作与任务依赖。

企业案例

案例 1:软件研发多 Agent 流水线

某科技公司基于 LangGraph 构建"PM→开发→测试→Review"四 Agent 流水线。PM Agent 把需求拆成 Jira 卡片,开发 Agent 生成代码与 PR,测试 Agent 自动写单元测试,Reviewer Agent 审查并提改进意见。试点项目交付周期缩短 35%,代码缺陷率下降 22%。

案例 2:投研报告自动化

某券商用 CrewAI 构建"行业分析师 + 财务分析师 + 风控分析师 + 汇总撰稿"四 Agent。各 Agent 分工调用对应数据源与工具,最终由撰稿 Agent 整合输出投研报告初稿。分析师从"写报告"转向"审报告",人均产能提升 3 倍。

案例 3:智能运营中心

某零售品牌部署去中心化多 Agent 运营中心:售前 Agent、售后 Agent、库存 Agent、营销 Agent 通过共享黑板交换状态。当库存 Agent 发现某商品将断货,自动通知营销 Agent 暂停推广、售前 Agent 调整话术,实现跨职能联动,库存周转效率提升 18%。

常见问题

Q1:多 Agent 一定比单 Agent 好吗? A:不一定。简单任务用单 Agent 更快更省;只有当任务复杂到需要多种角色/工具、且单 Agent Prompt 难以承载时,多 Agent 才有优势。

Q2:多 Agent 会不会成本很高? A:会。多 Agent 通常使总 token 消耗增加 2-5 倍。需通过职责单一化、上下文最小化、小模型承担简单 Agent 来控制成本。

Q3:Agent 之间会不会"互相推诿"死循环? A:可能。必须设置最大交互轮数、明确终止条件,并在中心化模式中由主管判断是否结束。

Q4:该选 CrewAI 还是 LangGraph? A:CrewAI 上手快、角色化清晰,适合中等复杂度任务;LangGraph 基于状态图,控制力强,适合需要精细流程编排的复杂场景。

面试题

1. 什么时候该用多 Agent 而非单 Agent? 答题要点:任务需多种专精角色、单 Agent Prompt 过长导致性能下降、需要并行处理、需要可独立观测与调试的子流程。

2. 比较中心化与去中心化协作的优缺点。 参考答案:中心化结构清晰、易控、主管是瓶颈;去中心化灵活可扩展、但协调复杂、易死循环。生产环境多采用中心化或层级化。

3. 如何防止多 Agent 系统的 token 成本失控? 答题要点:职责单一化、上下文最小化、简单 Agent 用小模型、设置预算与最大轮次、缓存中间结果、按需激活 Agent。

4. 简述 OpenAI Agents SDK 的 Handoff 机制。 参考答案:Agent A 在判断任务更适合 Agent B 时,将对话控制权与上下文转交给 B,B 接管后继续完成任务,实现 Agent 间的"接力"。

练习题

  1. 框架对比:用 CrewAI 与 LangGraph 分别实现"调研 + 撰写"两 Agent,对比代码量、可观测性与最终质量。
  2. 角色设计:为一个"自动化内容运营"场景设计 3-4 个 Agent 角色,画出协作流程图并说明数据流。
  3. 思考题:如果让 5 个 Agent 自由讨论一个开放问题,如何设计终止条件与评分机制,避免无意义的循环?

小结

多智能体系统通过角色分工与协作,突破了单 Agent 的能力边界,是复杂企业任务自动化的发展方向。中心化协作清晰可控,去中心化灵活可扩展,需根据任务特点选择。CrewAI、LangGraph、OpenAI Agents SDK 等框架降低了实现门槛,但成本控制与环路防护是工程落地的关键。本章结束第 1 卷"AI 基础",后续卷次将深入 Agent 开发实战、工具集成与生产部署。延伸阅读:CrewAI 官方文档、Microsoft AutoGen 论文、OpenAI Agents SDK Guide、论文《Communicative Agents for Software Development》。