1. 背景介绍
1.1 从单模型到多智能体协作
在早期的 LLM 应用中,很多系统采用单模型单任务的方式:一个大型语言模型(如 GPT-4、Claude)接收用户请求,然后直接生成结果。
这种方式的优点是简单,但缺点也明显:
- 对复杂任务,单模型往往难以兼顾所有环节(例如同时高效检索、专业写作、严格审查)
- 容易出现“泛化但不精专”的输出
- 难以动态扩展能力(添加新工具或新领域专家)
于是出现了两种不同的解决思路:
- MoE(Mixture of Experts):在一个模型内部,使用多个“专家子网络”,通过路由机制让不同输入走向不同的专家。
- Multi-Agent Collaboration(多智能体协作):在系统层面,组织多个具备不同能力的独立智能体(Agent),让它们协作完成任务。
在 LLM 应用场景中,多智能体协作提供了:
- 灵活的任务分工
- 动态扩展能力
- 跨领域知识整合
- 高质量输出的保障机制
1.2 与 MoE 的对比
Multi-Agent Collaboration 与 MoE 的最大不同在于:
- MoE 是模型内部的专家路由机制
- Multi-Agent 是系统层面的专家团队协作
| 对比维度 | MoE(专家混合模型) | Multi-Agent Collaboration(多智能体协作) |
|---|---|---|
| 架构层级 | 模型内部结构(通常是单个大模型的一部分) | 系统层级(多个独立 Agent,可以是不同模型、不同工具) |
| 专家形式 | 神经网络子模块(在训练中学习特定任务) | 独立的 Agent,每个有自己的 Prompt、工具、上下文 |
| 路由机制 | 由 gating network 自动选择专家 | 由 Planner Agent 或调度器根据任务选择执行 Agent |
| 扩展方式 | 需要重新训练或微调才能新增专家 | 可插拔,动态注册新 Agent 或工具即可 |
| 通信方式 | 专家之间通过模型内部张量流交互 | Agent 之间通过标准化消息(JSON、API 调用)交互 |
| 优势 | 高效、参数共享、推理成本可控 | 灵活、可跨平台/跨模型、易于集成外部工具 |
| 适用场景 | 同类任务的细分优化(如不同语言、不同任务类型) | 复杂、多步骤、多领域任务(如科研写作、产品设计) |
1.3 优势
Multi-Agent Collaboration 更像是把任务交给一个团队:
- 每个成员(Agent)有专长(检索、写作、分析、审查、沟通)
- 团队协作可以分担任务复杂度
- 可以随时引入新成员(新工具/新模型)
- 每个成员可以独立迭代,不影响其他 Agent
在 LLM 应用场景下,这种模式特别适合:
- 长链任务(多步骤依赖)
- 跨领域任务(需要不同专业知识)
- 需要工具调用(如数据库查询、API访问)
- 结果质量要求高(需要审查和迭代优化)
2. 核心模块
2.1 Planner Agent(任务规划者)
- 接收用户任务
- 拆解为子任务
- 根据能力匹配最优执行 Agent
- 输出任务依赖图(Task Dependency Graph)
2.2 Agent Registry(智能体注册中心)
存储所有可用 Agent 的元数据:
- 名称
- 描述
- 能力标签(capabilities)
- 工具列表
- Prompt 文件路径
- 版本号
- 提供能力匹配查询接口
- 支持动态注册/注销(可插拔)
2.3 Agent Loader(智能体加载器)
- 从配置文件或数据库读取 Agent 定义
- 加载 Prompt、工具、参数
- 实例化 Agent 并注册到 Registry
- 支持热插拔(运行时增删 Agent)
2.4 Executor Agents(执行智能体)
- 按任务分配执行具体操作
- 专注某个领域或技能(如搜索、写作、分析)
可以是:
- 纯 LLM 角色
- 基于 MCP 协议的工具
- 混合型(LLM + 工具调用)
2.5 Reviewer Agent(审查者)
- 检查结果的逻辑、语言、格式
- 提出修改建议或直接优化
- 提高输出可靠性
2.6 Communicator Agent(沟通者)
- 整合所有结果
- 格式化输出
- 与用户交互,收集反馈
3. 核心功能
任务拆解与分配
- 将复杂任务拆解为子任务
- 按能力匹配分配给最优 Agent
能力暴露与发现
- 每个 Agent 提供能力描述
- Planner 可动态发现并调用
协作通信
- 统一数据格式(JSON、Protobuf)
- 支持同步调用、异步消息
结果整合
- 合并多 Agent 输出
- 去重、冲突解决、统一格式
质量控制
- 审查 Agent 迭代优化结果
动态扩展
- 可插拔设计,支持快速添加新 Agent/工具
4. 工作流程
4.1 串行模式
User → Planner → Researcher → Writer → Reviewer → Communicator → User- 每个步骤依赖上一步的结果
- 适合逐步加工的任务(如科研写作)
4.2 并行模式
User → Planner
Planner → Researcher1, Researcher2(并行)
↓
Writer → Reviewer → Communicator- 独立任务可并行
- 需要结果合并逻辑
4.3 混合模式(Hybrid)
- 部分任务并行,部分串行
例如:
- 多个 Researcher 并行检索
- Writer 串行整合
4.4 迭代模式(Iterative Loop)
- Agent 间多轮交互优化结果
- 适合代码生成、复杂推理任务
5. 执行型 Agent 类型
在多智能体协作架构中,执行型 Agent 是负责真正落地执行任务的单元,它们可以按**实现方式来分类。
5.1. Prompt驱动型 Agent
- 特点:主要依赖大语言模型(LLM),通过精心设计的 Prompt 执行任务
适用场景:
- 文本生成(写作、总结、翻译)
- 创意任务(广告文案、故事创作)
- 优点:开发快、灵活性高
- 缺点:逻辑复杂度受限,结果依赖模型质量
示例:
- Writer Agent
- Summarizer Agent
- Translator Agent
5.2. 代码逻辑型 Agent
- 特点:内部主要是程序逻辑(算法、API调用、数据处理)
适用场景:
- 数据清洗与分析
- 结构化计算任务
- 业务流程自动化
- 优点:可控性强,适合复杂规则或算法
- 缺点:开发周期长,灵活性稍低
示例:
- DataFetcher Agent
- Analyst Agent
- DataVisualizer Agent
5.3. MCP协议型 Agent
- 特点:通过 MCP 协议暴露能力,主系统通过 MCP Client 调用
适用场景:
- 跨语言/跨平台工具
- 第三方团队开发的插件型 Agent
- 云原生部署的微服务型 Agent
优点:
- 完全解耦,语言和平台不限
- 动态加载方便
缺点:
- 网络调用有延迟
示例:
- Researcher Agent(远程API)
- ChartGenerator Agent(云端绘图服务)
6. Agents可插拔
在 Multi-Agent Collaboration 中,执行型 Agent(Executor Agent)是负责真正执行子任务的单元。
但在复杂系统里,执行 Agent 数量可能很多(几十甚至上百个),如果全部写死在代码中:
- 新增/删除 Agent 需要改主程序代码,重新部署
- 不同任务场景下无法按需加载,浪费资源
- Agent 的上下文和参数需求各不相同,维护困难
解决方案:设计一个动态加载机制,让系统可以在运行时加载、卸载和调用 Agent。
6.1. 目标
动态加载执行 Agent 的设计,就是通过一个统一的 Registry + Loader + Dispatcher 架构,让系统在运行时按需加载不同类型的 Agent(Prompt、代码、MCP),并自动适配它们的上下文和参数,实现可扩展、解耦和资源优化的多智能体协作。
- 热插拔:运行中加载或卸载 Agent,不影响其他部分
- 按需加载:只有任务需要时才加载对应 Agent
- 解耦:主系统与 Agent 实现分离,支持不同语言、不同部署方式
- 上下文适配:每个 Agent 能声明自己需要的上下文和参数格式
6.2. 核心组件
Agent Registry(注册中心)
- 存储所有可用 Agent 的元信息
- 可以是数据库、配置文件、或者服务发现系统
元信息包括:
{ "name": "Researcher", "description": "Academic paper search", "capabilities": ["search", "academic"], "context_schema": { "query": "string", "max_results": "integer" }, "execution_type": "mcp", "endpoint": "https://agent-server/research", "version": "1.2" }
Agent Loader(加载器)
- 根据 Registry 的信息,在运行时加载 Agent
支持三种加载方式:
- 本地代码型 Agent:用
importlib(Python)或require(Node.js)加载模块 - 远程 MCP Agent:建立 MCP 协议连接
- Prompt模板型 Agent:读取 Prompt 模板文件,动态替换变量
- 本地代码型 Agent:用
Dispatcher(调度器)
- 接收 Planner 分解的子任务
- 查询 Registry,匹配能力标签和上下文需求
- 调用 Loader 动态加载 Agent
- 把任务上下文和参数传入 Agent 执行
- 收集结果并返回给协作流程
6.3. 动态加载流程
[用户任务] → Planner(任务分解)
→ Dispatcher(匹配能力标签)
→ 查询 Agent Registry
→ Agent Loader(动态加载)
→ 传入上下文/参数
→ Agent 执行任务
→ 返回结果示例:加载一个 MCP Agent
Registry 记录 Agent 信息
{ "name": "ChartGenerator", "capabilities": ["visualize", "chart"], "context_schema": { "dataset": "object", "chart_type": "string" }, "execution_type": "mcp", "endpoint": "https://charts.example.com/api/generate", "version": "1.0" }- Dispatcher 根据任务匹配到 ChartGenerator
- Loader 建立 MCP Client → 调用 Endpoint
传入上下文
{ "dataset": {...}, "chart_type": "bar" }Agent 返回结果
{ "image_url": "https://charts.example.com/output/123.png" }
6.4. 上下文与参数适配
- 每个 Agent 在 Registry 中声明
context_schema(JSON Schema) - Dispatcher 在调用前检查上下文是否满足要求
如果缺少数据,可以:
- 调用其他 Agent 补充
- 请求用户提供
- 参数(params)用于控制执行细节(如语言、响应长度等)
6.5. 优势
- 可扩展性:新增 Agent 只需在 Registry 注册,不改主系统代码
- 资源优化:只加载当前任务需要的 Agent
- 多实现支持:Prompt型、代码型、MCP型都能统一管理
- 跨团队协作:不同团队可独立开发 Agent,通过 MCP 接入
7. 完整示例
用户提出任务:
“帮我生成一份关于 2024 年亚洲旅游市场的分析报告,并附上数据可视化图表。”
- 动态加载:Dispatcher 根据 Registry 信息调用 Loader,按需加载 Agent
- 多类型 Agent:MCP型、代码型、Prompt型混合使用
- 上下文适配:每个 Agent 的
context_schema决定调用所需数据 - Prompt工程:Writer Agent 通过模板+上下文生成高质量报告
- 完整闭环:从任务拆解 → 执行 → 审查 → 输出,全流程覆盖
7.1. 系统中的角色定义
1.1 Planner(任务规划者)
- 职责:分析用户任务,拆分为多个子任务
- 输出:任务分解列表
1.2 Dispatcher(任务调度器)
- 职责:根据任务能力标签匹配合适的执行型 Agent
- 输出:Agent调用计划
1.3 执行型 Agent(Executor Agent)
类型:
- Researcher Agent(MCP协议型,负责检索数据)
- DataVisualizer Agent(代码逻辑型,负责生成图表)
- Writer Agent(Prompt驱动型,负责撰写报告)
1.4 Reviewer(审查者)
- 职责:检查报告是否符合要求(完整性、准确性)
1.5 Communicator(沟通者)
- 职责:将最终结果以用户可理解的形式输出
7.2. Registry 中的 Agent
[
{
"name": "Researcher",
"capabilities": ["search", "market_data"],
"context_schema": {
"region": "string",
"year": "integer"
},
"execution_type": "mcp",
"endpoint": "https://agent-server/research",
"version": "1.0"
},
{
"name": "DataVisualizer",
"capabilities": ["visualize", "chart"],
"context_schema": {
"dataset": "object",
"chart_type": "string"
},
"execution_type": "code",
"entrypoint": "agents/data_visualizer.py",
"version": "2.0"
},
{
"name": "Writer",
"capabilities": ["write", "report"],
"context_schema": {
"topic": "string",
"references": "array",
"charts": "array"
},
"execution_type": "prompt",
"prompt_template": "prompts/writer.txt",
"version": "1.5"
}
]7.3. 完整流程示例
Step 1: 用户任务输入
User → Planner输入:
{
"task": "Generate a market analysis report for Asia tourism in 2024 with charts"
}Step 2: Planner 任务分解
Planner 输出:
[
{
"subtask": "Get tourism market data for Asia in 2024",
"capabilities": ["search", "market_data"]
},
{
"subtask": "Generate chart from dataset",
"capabilities": ["visualize", "chart"]
},
{
"subtask": "Write market analysis report including charts",
"capabilities": ["write", "report"]
}
]Step 3: Dispatcher 匹配 Agent
Dispatcher 查 Registry → 得到匹配:
[
{"subtask": "...", "agent": "Researcher"},
{"subtask": "...", "agent": "DataVisualizer"},
{"subtask": "...", "agent": "Writer"}
]Step 4: 动态加载 & 执行
4.1 调用 Researcher Agent(MCP型)
调用:
{
"region": "Asia",
"year": 2024
}返回:
{
"dataset": [
{"country": "Japan", "visitors": 3200000},
{"country": "Thailand", "visitors": 2800000},
{"country": "Singapore", "visitors": 1500000}
]
}4.2 调用 DataVisualizer Agent(代码型)
输入:
{
"dataset": [...上一步数据...],
"chart_type": "bar"
}返回:
{
"chart_url": "https://charts.example.com/output/asia-tourism-2024-bar.png"
}4.3 调用 Writer Agent(Prompt型)
Prompt 模板(prompts/writer.txt):
You are an expert market analyst specializing in tourism industry reports.
Task: Write a comprehensive market analysis report.
Topic: {{topic}}
References: {{references}}
Charts: {{charts}}
Instructions:
- Provide an introduction to the market
- Include key statistics and trends
- Interpret the chart data
- Give predictions for the coming year
- Keep the tone professional and concise注入上下文:
{
"topic": "Asia Tourism Market 2024",
"references": [
{"country": "Japan", "visitors": 3200000},
{"country": "Thailand", "visitors": 2800000},
{"country": "Singapore", "visitors": 1500000}
],
"charts": ["https://charts.example.com/output/asia-tourism-2024-bar.png"]
}LLM 输出(摘要):
The Asia tourism market in 2024 shows strong recovery post-pandemic, led by Japan and Thailand...
[完整报告省略]Step 5: Reviewer 检查
Reviewer 检查:
- 数据引用是否正确
- 图表链接是否有效
- 报告结构是否完整
Step 6: Communicator 输出给用户
最终输出:
{
"report": "[完整报告文本]",
"chart": "https://charts.example.com/output/asia-tourism-2024-bar.png"
}7.4. 流程图
┌───────────────────────────────┐
│ User(用户) │
└───────────────┬───────────────┘
│ 任务请求
▼
┌──────────────────────────┐
│ Planner(规划者) │
│ 分解任务为多个子任务 │
└───────────────┬──────────┘
│ 子任务列表
▼
┌──────────────────────────┐
│ Dispatcher(调度器) │
│ 匹配能力标签 → 查Registry │
└───────┬─────────┬────────┘
│ │
│ │
┌───────────────────┘ └────────────────────┐
│ │
┌─────────────────────┐ ┌───────────────────────┐
│ Agent Loader(加载器)│ │ Agent Registry(注册中心)│
│ 动态加载执行Agent │<───读取元信息──────────────│ Agent元数据: │
└───────┬──────────────┘ │ name、capabilities、 │
│ │ context_schema、 │
│ │ execution_type、endpoint │
▼ └─────────────────────────┘
┌──────────────────────────┐
│ 执行型 Agent(Executor)│
│ 多类型: │
│ 1. Researcher(MCP型) │
│ 2. DataVisualizer(代码型)│
│ 3. Writer(Prompt型) │
└───────┬─────────┬────────┘
│ │
│ │
▼ ▼
┌─────────────────────┐ ┌────────────────────────────┐
│ 数据检索结果dataset │ │ 图表URL chart_url │
└───────────┬─────────┘ └───────────────┬────────────┘
│ │
└─────────────────┬────────────────┘
▼
┌──────────────────────────┐
│ Writer Agent(Prompt型) │
│ 生成报告 report │
└───────────────┬──────────┘
│
▼
┌─────────────────────────┐
│ Reviewer(审查者) │
│ 检查完整性、准确性 │
└──────────────┬─────────┘
│
▼
┌────────────────────────────┐
│ Communicator(沟通者) │
│ 输出给用户:报告+图表 │
└────────────────────────────┘数据流说明
- User → Planner:用户发起任务,Planner 拆分成子任务。
- Planner → Dispatcher:Dispatcher 根据能力标签匹配合适的 Agent。
- Dispatcher → Agent Loader:Loader 根据 Registry 元信息动态加载 Agent(Prompt型、代码型、MCP型)。
执行型 Agent:
- Researcher(MCP型):调用远程API获取数据集
- DataVisualizer(代码型):生成图表并返回 URL
- Writer(Prompt型):使用 Prompt 模板 + 上下文生成报告
- Reviewer:检查结果质量与合规性
- Communicator:将报告和图表打包返回用户
8. 和 ReAct 的关系
8.1 层次关系
- 工具(Tool) 是最底层的能力单元
- Agent 是上层的能力封装,内部可以调用多个工具
- Multi-Agent Collaboration 是更高层的编排框架,负责协调多个 Agent
用户任务
↓
Multi-Agent Collaboration(编排)
↓
多个 Agent(角色)
↓
Agent 内部可能使用 ReAct 框架调用工具换句话说:
ReAct 解决的是一个智能体如何调用工具的问题,
Multi-Agent Collaboration 解决的是多个智能体如何协作的问题。
在多智能体系统中,单个 Agent 内部可以用 ReAct 方式调用工具。
8.2 技术演进关系
可以理解为一种发展的进步:
早期阶段:
- 单模型调用工具(ReAct)
- 优点:简单直接
- 缺点:任务复杂时,Prompt变得庞大,工具管理困难
中期阶段:
- 引入 Agent 概念,一个 Agent 封装一类能力(可能内部用 ReAct)
- 优点:职责清晰、可扩展
当前阶段:
- 多 Agent 协作(Multi-Agent Collaboration)
优点:
- 动态加载不同类型的 Agent(Prompt型、代码型、MCP型)
- 可跨团队开发
- 高可维护性和可扩展性
所以:
Multi-Agent Collaboration 是在 ReAct 基础上的架构升级,把工具调用的粒度提升为 Agent 调用,并引入编排、调度、动态加载等能力。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。