# 8.4 多智能体协作：多智能体框架实战

单体智能体受限于上下文窗口和角色的单一性，难以处理极其复杂的任务。这就好比一个人再厉害，也无法独自完成一部电影的拍摄。

**多智能体系统**（Multi-Agent System，简称 MAS）通过模拟人类团队的协作模式，让多个专注于不同领域的智能体共同解决问题。本节将通过实战案例，用两类代表性范式来理解多智能体框架：对话编排与角色任务编排。

## 8.4.1 对话编排范式：对话即计算

这类框架的核心特点是 **对话即计算**：智能体通过对话驱动任务推进，并结合受控执行环境实现“生成→执行→反馈→修复”的闭环。

> **生态现状**：Microsoft AutoGen 官方仓库已明确进入 maintenance mode，并建议新项目转向 **Microsoft Agent Framework**；AG2 官方则把自己定义为 **AG2 (formerly AutoGen)**，也就是从 AutoGen 演化出的社区主线。与此同时，CrewAI 的稳定发布线已经进入 **1.14.x**。

### 核心概念：执行代理与规划代理

一种常见抽象是把系统拆成两个基本角色：

1. **规划 / 生成代理**：负责分析、规划与生成代码/操作。
2. **执行代理**：负责在沙箱中执行、收集结果与报错并回传。

**工作流**：

1. 任务：“请画一张股价走势图”。
2. Assistant：生成一段 Python 代码。
3. 执行代理：在受控沙箱中运行，报错提示“缺少依赖”。
4. 执行代理：将报错信息发回给 Assistant。
5. Assistant：根据报错重写代码。
6. 执行代理：再次运行，直到产出满足要求。

### 适用场景与风险

这种范式适合“需要在环境中反复试错”的任务，例如编程、数据分析与自动化操作。但也要注意两类风险：

* **成本失控**：一旦陷入重试循环，Token 与工具成本可能快速飙升，需要步数上限与熔断。
* **安全边界**：执行代理必须在沙箱内运行，并对文件、网络与高风险操作设置硬限制。

## 8.4.2 实战：构建自动编程团队

```python
# AG2 示例：使用当前文档中的 ConversableAgent + AutoPattern 风格

import logging
from autogen import ConversableAgent, LLMConfig
from autogen.agentchat import run_group_chat
from autogen.agentchat.group.patterns import AutoPattern

logging.basicConfig(level=logging.INFO)

llm_config = LLMConfig.from_json(path="OAI_CONFIG_LIST")

planner = ConversableAgent(
    name="planner",
    system_message="把需求拆成可执行的开发任务。",
    description="负责任务拆解与推进。",
    llm_config=llm_config,
)
coder = ConversableAgent(
    name="coder",
    system_message="根据任务编写代码，并说明如何运行与测试。",
    description="负责实现。",
    llm_config=llm_config,
)
reviewer = ConversableAgent(
    name="reviewer",
    system_message="审查代码、指出问题，满足要求时输出 DONE。",
    description="负责质量把关。",
    is_termination_msg=lambda x: "DONE" in (x.get("content", "") or "").upper(),
    llm_config=llm_config,
)

pattern = AutoPattern(
    agents=[planner, coder, reviewer],
    initial_agent=planner,
    group_manager_args={"name": "group_manager", "llm_config": llm_config},
)

response = run_group_chat(
    pattern=pattern,
    messages="做一个简单的贪吃蛇游戏，并给出运行说明。",
    max_rounds=12,
)
response.process()
print(response.summary)
```

**运行结果**：Planner 会先拆任务，Coder 负责实现，Reviewer 负责挑错和收敛。当 `DONE` 出现时，说明这一轮群聊已经收敛到可交付结果。对于仍在使用旧 AutoGen 风格群聊的团队，AG2 是更自然的延续路径。

> **扩展阅读**：如果你需要 Microsoft 官方支持、长期维护和更强的企业治理能力，应优先评估 **Microsoft Agent Framework**。如果你已经采用 AutoGen 风格的对话式多智能体编排，AG2 的迁移心智更接近原范式。

## 8.4.3 角色任务编排范式：像导演一样编排团队

另一类框架更强调 **角色扮演** 与 **任务流编排**：先定义谁做什么、每步交付什么，再把任务按顺序或层级组织起来。

### 核心概念：角色、任务、工作流

这类框架通常要求你先回答三个问题：

1. **Who**：谁来做？例如角色、目标、背景设定。
2. **What**：做什么？例如任务描述、预期输出。
3. **How**：怎么配合？例如顺序式或层级式流程。

### 模板化与验收标准

为了让角色任务编排在生产环境中可控，建议把“角色卡”“交付物模板”“验收清单”做成可复用模板，并在每个关键节点进行自动校验（格式、字段完整性、引用证据、风险动作审批等）。

## 8.4.4 实战：构建市场调研团队

```python
# CrewAI 示例（1.14.x 系列 API）：用"角色 + 任务流"构建市场调研团队

from crewai import Agent, Task, Crew

researcher = Agent(
    role="研究员",
    goal="收集信息并给出可验证依据",
    verbose=True
)
writer = Agent(
    role="写作者",
    goal="把研究结果组织成可读文章",
    verbose=True
)

research_task = Task(
    description="调研某主题的关键趋势",
    agent=researcher,
    expected_output="包含可验证来源的调研报告"
)
write_article_task = Task(
    description="基于调研产出文章",
    agent=writer,
    expected_output="结构清晰的最终文章",
    context=[research_task]
)

crew = Crew(
    agents=[researcher, writer],
    tasks=[research_task, write_article_task],
    verbose=True
)

crew_output = crew.kickoff()
print(crew_output.raw)
print(crew_output.tasks_output)
```

## 8.4.5 两类范式对比与框架选择

| 维度       | 对话编排范式                                                           | 角色任务编排范式           |
| -------- | ---------------------------------------------------------------- | ------------------ |
| **代表框架** | AG2（社区延续，AutoGen 风格） / Microsoft Agent Framework（Microsoft 当前主线） | CrewAI（1.14.x 稳定线） |
| **强项**   | 生成-执行闭环、快速迭代修复                                                   | 角色分工清晰、流程可控、输出预期明确 |
| **交互模式** | 对话流（自由度高）                                                        | 任务流（结构化更强）         |
| **底层**   | 框架自带编排                                                           | 依赖通用组件/生态          |
| **上手难度** | 取决于沙箱/工具链集成复杂度                                                   | 取决于流程抽象与模板完善度      |
| **社区状态** | AG2：社区驱动；MAF：Microsoft 官方                                        | 活跃，定期更新特性与优化       |

## 8.4.6 跨智能体通信：Branch Agent 与进度快照模式

当多个智能体需要实时协作时，传统的串行或简单的消息队列可能引入延迟。一种高效的模式是 **Branch Agent 通信**，结合定期的进度快照。

### 状态隔离与缓存共享

Branch Agent 通常通过以下方式平衡隔离与协作：

* **克隆隔离**：每个 Branch Agent 获得独立的 LRU 缓存和 AbortController，防止会话间状态污染
* **缓存前缀共享**：系统提示、工具定义等稳定前缀通过缓存共享，利用推理引擎的前缀复用机制降本
* **Agent 摘要**：使用 Haiku 等轻量模型每 30 秒生成 3-5 词的进度快照，作为其他 Agent 的上下文更新

### 跨智能体实时消息

通过 `SendMessage` 机制支持即时通信：

* **广播模式**：主 Agent 可向所有 Branch Agent 广播任务更新或中断信号
* **跨会话通信**：Branch Agent 间可通过共享消息队列或事件总线通信，无需重新启动会话
* **消息可溯源**：每条消息携带源 Agent 的 ID 与时间戳，支持调试与审计

这种设计避免了过度的上下文复制，同时保证了 Agent 间的实时协调。

## 8.4.7 小结

多智能体系统不仅是“人多力量大”，更是 **分而治之** 思想的体现。

* 通过让 Researcher 专注搜索，Writer 专注写作，每个智能体的系统提示词 (System Prompt) 都可以更短、更聚焦，从而降低幻觉，提升质量。
* 一类框架更偏“执行闭环”（写代码/跑代码/修复），典型如 AG2（社区延续）或 Microsoft Agent Framework（Microsoft 官方主线）。
* 一类框架更偏“角色流程”（研究→写作→审阅→交付），典型如 CrewAI（稳定线已进入 1.14.x）。
* 在并行多智能体场景中，利用 Branch Agent 的缓存共享与定期快照可显著降低通信开销与上下文膨胀。

**框架选择指南**：

* 如果项目已采用 AutoGen 风格群聊与对话编排，迁移至 **AG2** 往往最平滑。
* 如果新项目需要 Microsoft 官方支持、企业治理和统一主线，优先看 **Microsoft Agent Framework**。
* 如果关注明确的角色卡、任务依赖和流程控制，**CrewAI** 更贴近 SOP 驱动的团队协作。

下节将探讨如何将这些智能体集成到现有的企业系统中。

***

**下一节**: [8.5 企业级集成：与现有系统整合](/agentic_ai_guide/di-san-bu-fen-gong-cheng-shi-jian-yu-luo-di/08_frameworks/8.5_enterprise.md)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://yeasy.gitbook.io/agentic_ai_guide/di-san-bu-fen-gong-cheng-shi-jian-yu-luo-di/08_frameworks/8.4_multi_agent.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
