Multi-Agent 协作模式与工程实践
前言
当 LLM 的能力边界不断扩展,一个显而易见的问题浮出水面:单个 Agent 能否解决所有问题?
答案是否定的。就像软件开发从单体架构走向微服务,Agent 架构也在经历类似的演进。在面对复杂业务场景时,单一 Agent 往往受限于上下文窗口、工具集规模、以及"单点故障"式的决策偏差。而 Multi-Agent(多智能体)系统 通过多个 Agent 的分工协作,正在成为 Agent 工程化的核心范式。
本文将从模式分类、架构设计、工程实践三个维度,拆解 Multi-Agent 系统的落地经验。
一、为什么需要 Multi-Agent?
单一 Agent 的瓶颈
在实际生产环境中,单一 Agent 架构往往面临以下问题:
- 上下文过载:一个 Agent 需要同时兼顾系统指令、用户需求、工具描述、历史对话,很容易触及上下文窗口上限
- 工具集膨胀:Agent 掌握的 Tool 数量越多,选择正确 Tool 的准确率越低(研究表明,超过 20 个工具时准确率下降明显)
- 角色冲突:同一个 Agent 既要负责严谨的数据计算,又要进行创意文案生成,风格切换困难
- 单点脆弱性:Agent 在某个环节出错后,缺乏"同行评审"机制,错误会一路传递到最终结果
Multi-Agent 的优势
- 专业化分工:每个 Agent 专注自己的领域,就像一个团队里有后端、前端、设计师
- 并行处理:多个 Agent 可以同时处理独立子任务,大幅缩短响应时间
- 容错性:通过 Agent 间的交叉验证和评审机制,降低单点错误率
- 可扩展性:新增能力只需添加新的 Agent,无需修改现有系统
二、Multi-Agent 协作模式分类
根据协作方式的不同,我将 Multi-Agent 系统分为以下四种核心模式:
1. 星型模式(Orchestrator-Worker)
结构:一个主控 Agent(Orchestrator)负责任务分解、调度和结果整合,多个 Worker Agent 执行具体子任务。
适用场景:复杂任务拆解,如代码生成、数据分析报告、多步骤工作流。
典型流程:
Orchestrator(主控)
├── Worker 1: 需求分析
├── Worker 2: 方案设计
├── Worker 3: 代码实现
├── Worker 4: 测试验证
└── Worker 5: 文档生成
优缺点:
- ✅ 结构清晰,易于管理和调试
- ✅ 主控 Agent 可以控制全局质量
- ❌ Orchestrator 可能成为瓶颈
- ❌ 通信开销随 Worker 数量增加
2. 流水线模式(Pipeline)
结构:任务按顺序经过多个 Agent,每个 Agent 处理特定阶段,输出作为下一个 Agent 的输入。
适用场景:有明确步骤顺序的流程,如内容审核、数据清洗、多阶段处理。
典型流程:
Agent A(数据采集)→ Agent B(数据清洗)→ Agent C(数据分析)→ Agent D(报告生成)
优缺点:
- ✅ 责任清晰,每个阶段可独立优化
- ✅ 便于添加中间审核节点
- ❌ 整体延迟等于各阶段之和
- ❌ 前序 Agent 的错误会被放大
3. 辩论模式(Debate / Verifier)
结构:多个 Agent 各自独立完成任务,然后通过讨论、辩论或投票达成共识。
适用场景:需要高准确率的决策场景,如代码审查、风险评估、事实核查。
典型流程:
Agent A: 独立分析 → 给出结论
Agent B: 独立分析 → 给出结论
Agent C: 独立分析 → 给出结论
↓
仲裁 Agent: 汇总三个结论,找出分歧点,引导讨论
↓
最终共识
优缺点:
- ✅ 显著提高准确率(研究表明可降低 40% 以上的错误率)
- ✅ 多个视角避免思维盲区
- ❌ 计算成本高(多个 LLM 调用)
- ❌ 可能陷入无休止的辩论循环
4. 分层模式(Hierarchical)
结构:多个层级的 Agent 组成的树状结构,高层 Agent 负责策略和方向,低层 Agent 负责执行和细节。
适用场景:大规模复杂系统,如企业级自动化平台、自动化运维。
典型流程:
Level 1: 战略 Agent(确定目标优先级)
├── Level 2: 规划 Agent(制定执行计划)
│ ├── Level 3: 执行 Agent 1(具体操作)
│ ├── Level 3: 执行 Agent 2(具体操作)
│ └── Level 3: 执行 Agent 3(具体操作)
└── Level 2: 监控 Agent(跟踪进度、异常处理)
优缺点:
- ✅ 可扩展到非常大规模的系统
- ✅ 每一层职责清晰,便于定位问题
- ❌ 架构复杂度高,调试困难
- ❌ 层级间通信延迟累积
三、工程实践:从模式到实现
实战案例:自动代码审查系统
我们团队使用 Multi-Agent 模式构建了一个自动代码审查系统,采用 辩论模式 + 星型模式 的混合架构。
架构设计
Orchestrator Agent(主控)
│
├── Code Review Agent A(关注代码规范 & 风格)
├── Code Review Agent B(关注性能 & 安全)
├── Code Review Agent C(关注架构 & 设计模式)
│
└── Arbitration Agent(仲裁 & 汇总报告)
关键实现细节
1. Agent 间的通信协议
每个 Agent 的输出需要遵循统一的格式,才能被其他 Agent 理解:
@dataclass
class AgentMessage:
agent_id: str
task_id: str
message_type: MessageType # ANALYSIS | REVIEW | VERDICT | QUESTION
content: dict
confidence: float # 0.0 - 1.0
references: list[str] # 引用的代码行号或文件路径
2. 辩论轮次控制
为了防止无限辩论,我们设置了最大辩论轮次和收敛条件:
MAX_DEBATE_ROUNDS = 3
CONVERGENCE_THRESHOLD = 0.85 # 置信度超过 0.85 即认为达成一致
def should_continue_debate(responses: list[AgentMessage]):
if responses.round >= MAX_DEBATE_ROUNDS:
return False
avg_confidence = sum(r.confidence for r in responses) / len(responses)
return avg_confidence < CONVERGENCE_THRESHOLD
3. 上下文管理策略
每个 Agent 不需要看到全部上下文,只接收与其职责相关的部分:
def prepare_context_for_agent(agent_role: str, code_diff: str, full_context: dict):
if agent_role == "style":
return {
"code": code_diff,
"rules": full_context["style_guide"],
"focus": "代码规范、命名、格式"
}
elif agent_role == "performance":
return {
"code": code_diff,
"rules": full_context["performance_guide"],
"focus": "时间复杂度、资源使用、安全漏洞"
}
# ...
实战案例:内容生成流水线
另一个案例是内容自动生成系统,采用 流水线模式。
选题 Agent → 大纲 Agent → 写作 Agent → 审校 Agent → 排版 Agent
(分析趋势) (生成结构) (填充内容) (质量检查) (格式优化)
每个 Agent 配备专用工具集:
- 选题 Agent:网页搜索、趋势分析 API
- 大纲 Agent:思维导图工具、结构模板库
- 写作 Agent:长文本生成、RAG 检索
- 审校 Agent:事实核查 API、语法检查工具
- 排版 Agent:Markdown 渲染、图片搜索
四、避坑指南
1. 通信开销管理
Agent 间的通信如果是全量文本传输,会迅速耗尽上下文窗口。推荐做法:
- 只传输增量信息和引用
- 使用结构化数据格式(JSON/Protobuf)而非自然语言
- 设置消息长度上限
2. Agent 数量选择
不是越多越好。根据我们的实测数据:
| Agent 数量 | 任务完成率 | 平均延迟 | 成本 |
|---|---|---|---|
| 1 | 72% | 5s | 1x |
| 2-3 | 85% | 12s | 3x |
| 4-5 | 91% | 25s | 6x |
| 6+ | 93% | 45s+ | 10x+ |
建议:2-4 个 Agent 是性价比最高的区间。
3. 错误传播与隔离
在流水线模式中,一个 Agent 的错误会扩散到下游。解决方案:
- 每个阶段增加校验步骤
- 使用 Circuit Breaker 模式:当某个 Agent 连续失败时,降级使用默认值
- 引入 Checkpoint 机制:定期保存中间状态,方便回滚重试
4. 调试与可观测性
Multi-Agent 系统调试极其困难。必须做好以下基础设施:
# 必须记录每轮 Agent 通信
logging.setup_agent_tracing(
trace_id=task_id,
export_to="otel_collector:4318"
)
# 每个 Agent 的输入/输出都要序列化存储
async def run_agent(agent, task):
input_snapshot = snapshot(task)
result = await agent.run(task)
output_snapshot = snapshot(result)
store_interaction(agent.id, input_snapshot, output_snapshot)
return result
五、主流框架对比
| 特性 | AutoGen (Microsoft) | CrewAI | LangGraph | 自研 |
|---|---|---|---|---|
| 协作模式 | 辩论/对话 | 星型/流水线 | 图/流水线 | 灵活 |
| 学习曲线 | 中等 | 低 | 高 | - |
| 可定制性 | 高 | 中 | 高 | 极高 |
| 调试工具 | 有 | 弱 | 弱 | 自建 |
| 生产就绪度 | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
选择建议:
- 快速原型验证 → CrewAI
- 复杂图状流程 → LangGraph
- 需要多 Agent 对话/辩论 → AutoGen
- 生产环境定制 → 在框架基础上自研
总结
Multi-Agent 不是银弹,但它是应对复杂 AI 应用的必然方向。关键不在于"用了多少 Agent",而在于如何设计协作模式。
从我的实践经验来看,建议遵循以下原则:
- 从简单开始:先 2-3 个 Agent 验证模式,再逐步扩展
- 通信成本是核心瓶颈:设计好 Agent 间的消息协议
- 可观测性优先:没有好的追踪系统,Multi-Agent 就是黑盒
- 混合模式更实用:大多数生产系统需要组合多种协作模式
如果你正在构建 Agent 系统,不妨从今天开始尝试 Multi-Agent 架构。毕竟,一个团队比一个人走得更远——这句话对 Agent 同样适用。
本文是"Agent 工程化"系列的第 5 篇。欢迎关注交流,有问题评论区见。