多智能体协作(Multi-Agent):从团队协作到自主组织的技术实现

深度解析多智能体系统的核心问题:通信协议、任务分配、冲突解决、共识达成。 涵盖 CrewAI、AutoGen、LangGraph 三大框架的实战对比:角色定义、层级编排、路由分发。 附基于 CrewAI 的产品开发团队仿真案例,含完整代码与性能调优策略。

多个 LLM 智能体协同工作时,复杂性不是线性增长——是呈指数级。从简单的主从分工到复杂的自主组织,每一个设计选择都会产生大量连带影响。本文系统拆解多智能体架构的 5 大核心挑战,用 3 个主流框架的实战代码给出落地方案。


1. 为什么需要多智能体?

单智能体的瓶颈:

  • 上下文窗口限制 → 知识过载导致决策质量下降
  • 角色模糊 → 同一模型既要技术决策又要商业判断
  • 并发瓶颈 → 顺序执行无法处理并行任务
  • 不稳定 → 复杂任务中错误容易扩散

多智能体的价值:

  • 分工:每个 Agent 专精一个领域(研究、写作、代码、测试)
  • 并行:信息收集和代码实现可以同时进行
  • 审查:Agent A 写完代码,Agent B 自动做代码审查
  • 弹性:一个 Agent 失败,其他 Agent 可以接管或通知人类

2. 通信协议:Agent 之间怎么说话?

2.1 直接对话(Direct Message)

Agent-A ←→ Agent-B
   ↑        ↓
Agent-C ←→ Agent-D

简单、直接。适合小规模协作(2-4 个 Agent)。

2.2 共享黑板(Shared Blackboard)

┌─────────────┐
│  Shared DB  │  ← 所有 Agent 读写
└─────────────┘
   ↑  ↑  ↑  ↑
  A  B  C  D

Agent 将自己的结论写入黑板,其他 Agent 读取。状态集中、可观测性强。

2.3 层级汇报(Hierarchical)

     Manager
      /  |  \
   Dev   Q&A   Ops
    /\    |    /\
  FE BE  Test Mtr Alert

适合有明确汇报线的组织结构。Manager Agent 负责任务分发和冲突仲裁。

2.4 联邦协商(Federated Negotiation)

代理人之间通过协商分配资源(如 CPU、API 调用额度、优先级)。


3. 主流框架对比

维度CrewAIAutoGen (Microsoft)LangGraph
核心思想角色驱动 + 任务流程对话驱动 + 可编程 Agent图结构 + 状态机
抽象层级高(几行代码定义角色和任务)中(Agent + Conversation)低(Nodex + Edge)
并行支持顺序执行为主,可配置并行支持并发 Agent 会话完全并行(图驱动)
工具调用自动注入到角色 PromptAgent-level Function Calling节点级工具集成
记忆管理每轮任务记忆会话级 + 语义记忆显式状态管理
调式友好度⭐⭐⭐⭐⭐⭐⭐⭐⭐
最佳场景内容创作、产品分析代码生成、数据分析复杂流程编排

4. CrewAI 实战:产品开发团队仿真

4.1 安装

pip install crewai crewai-tools langchain-openai

4.2 定义角色和任务

from crewai import Agent, Task, Crew, Process
from crewai_tools import SerperDevTool

# 工具
search = SerperDevTool()

# 定义 Agent
researcher = Agent(
    role="产品研究员",
    goal="深入研究目标用户、竞品和市场机会",
    backstory="你是一位有 10 年经验的 SaaS 产品研究员,擅长提炼用户痛点。",
    tools=[search],
    verbose=True,
)

writer = Agent(
    role="产品文档撰写者",
    goal="基于研究成果撰写高质量的产品需求文档",
    backstory="你是一位资深的 Agile 产品负责人,擅长将模糊的想法转化为可执行的 PRD。",
    verbose=True,
)

reviewer = Agent(
    role="产品文档审查者",
    goal="审查 PRD 的完整性和可执行性",
    backstory="你是一位严格的技术 VP,确保每个 PRD 都有清晰的验收标准。",
    verbose=True,
)

# 定义任务
task1 = Task(
    description="研究 '个人开发者 AI 工具 SaaS' 市场。包括:1) 目标用户画像;2) TOP5 竞品及其定价;3) 核心痛点未满足”。输出结构化的调研报告。",
    expected_output="500 字以上的结构化调研报告,包含用户画像、竞品分析和 3 个核心痛点。",
    agent=researcher,
)

task2 = Task(
    description="基于调研报告,撰写产品需求文档(PRD),包括:产品概述、核心功能列表、用户故事、验收标准。",
    expected_output="完整的 Markdown PRD 文档,不少于 800 字。",
    agent=writer,
)

task3 = Task(
    description="审查 PRD:检查是否包含用户故事、是否有明确验收标准、技术可行性如何。给出修改建议。",
    expected_output="审查报告,列出 5-10 条详细的修改建议。",
    agent=reviewer,
)

# 组装 Crew
crew = Crew(
    agents=[researcher, writer, reviewer],
    tasks=[task1, task2, task3],
    process=Process.sequential,  # 顺序执行(也可以 Process.parallel)
    verbose=True,
)

# 运行
result = crew.kickoff(inputs={"topic": "个人开发者 AI 工具 SaaS"})
print(result)

4.3 从顺序到并行

from crewai import Process

# Process.parallel — 所有 Agent 同时工作
crew = Crew(
    agents=[researcher, writer, reviewer],
    tasks=[task1, task2, task3],
    process=Process.parallel,
)

# Process.hierarchical — Manager Agent 动态调度
crew = Crew(
    agents=[researcher, writer, reviewer],
    tasks=[task1, task2, task3],
    process=Process.hierarchical,
    manager_llm="gpt-4o",  # 指定 Manager 的模型
)

5. LangGraph 实战:复杂工作流编排

LangGraph 允许你定义显式的状态转换图,每个节点是一个 Agent,每条边是条件分支。

from langgraph.graph import StateGraph, END
from typing import TypedDict, Annotated
import operator

# 定义状态
class AgentState(TypedDict):
    messages: Annotated[list, operator.add]
    next_step: str
    research_done: bool
    code_done: bool
    test_passed: bool

# 定义节点(Agent 函数)
def research_agent(state):
    # 调用 LLM 做研究
    return {"messages": ["Research completed"], "research_done": True, "next_step": "code"}

def code_agent(state):
    if not state["research_done"]:
        return {"messages": ["Need research first"], "next_step": "research"}
    # 生成代码
    return {"messages": ["Code generated"], "code_done": True, "next_step": "test"}

def test_agent(state):
    if not state["code_done"]:
        return {"messages": ["Need code first"], "next_step": "code"}
    # 运行测试
    passed = True  # 模拟
    return {
        "messages": ["Tests passed" if passed else "Tests failed"],
        "test_passed": passed,
        "next_step": "end" if passed else "code",
    }

# 定义条件路由
def router(state):
    return state["next_step"]

# 构建图
builder = StateGraph(AgentState)
builder.add_node("research", research_agent)
builder.add_node("code", code_agent)
builder.add_node("test", test_agent)
builder.add_edge("research", "code")
builder.add_edge("code", "test")
builder.add_conditional_edges("test", router, {"end": END, "code": "code"})
builder.set_entry_point("research")

graph = builder.compile()

# 运行
result = graph.invoke({
    "messages": ["Implement REST API for user management"],
    "research_done": False,
    "code_done": False,
    "test_passed": False,
})

6. 性能优化与故障注入

6.1 常见性能问题

问题原因解决策略
Agent 死锁循环依赖(A 等 B,B 等 A)设置全局超时;引入 Manager Agent
令牌膨胀聊天记录无限增长滑动窗口摘要;向量记忆
工具选择失败工具描述模糊,模型选错增加工具名字的唯一性;One-shot prompting
达成共识慢N 个 Agent 需要全体一致多数投票制 > 全员一致

6.2 容错策略

from tenacity import retry, stop_after_attempt, wait_exponential

class FaultTolerantAgent:
    @retry(
        stop=stop_after_attempt(3),
        wait=wait_exponential(multiplier=1, min=4, max=10)
    )
    def invoke_with_retry(self, agent, task):
        try:
            return agent.run(task)
        except Exception as e:
            # 降级策略:跳过当前任务,流式报告错误
            return {"status": "error", "fallback": str(e)}

7. 选型决策树

团队规模 ≤ 3 Agent?
├── 是 → Agent 间通信复杂度低
│   ├── 任务高度结构化(如流水线)? → LangGraph (图编排)
│   └── 任务偏创意协作(如写作)? → CrewAI (角色驱动)
│
└── 否 → 需要水平扩展
    ├── 需要动态角色创建? → AutoGen (对话驱动)
    ├── 需要严格状态管理? → LangGraph
    └── 快速原型验证? → CrewAI

推荐阅读

📂 相关专题:


FAQ

Q: CrewAI 和 AutoGen 哪个更适合代码生成团队?
A: AutoGen 更适合。AutoGen 的 CodeInterpreter + UserProxy 模式允许代码自动执行 + 人类确认,在代码验证环节比 CrewAI 的纯文本输出更直接。

Q: Manager Agent 用 GPT-4o-mini 还是 GPT-4o?
A: 如果 Manager 主要做任务分发(简单分类),mini 即可。如果 Manager 需要理解复杂依赖、动态调整优先级,用 GPT-4o。成本差异约为 10 倍。

Q: 怎么判断 “该用单智能体还是多智能体”?
A: 如果任务需要 >5 步且步骤之间存在明确的并行机会专业壁垒(如需要同时调用数据库和视觉模型),则用多智能体。如果只是顺序工具调用,单智能体更简单可靠。

继续阅读

探索更多技术文章

浏览归档,发现更多关于系统设计、工具链和工程实践的内容。

全部文章 返回首页

「llm」更多文章