跳转至

多智能体框架

引言

多智能体框架提供了构建多 Agent 系统的基础设施,封装了通信、协作、任务分配等底层逻辑。本节介绍当前最流行的 LLM 多智能体框架。

AutoGen(Microsoft)

概述

AutoGen 是 Microsoft 推出的多 Agent 对话框架,核心概念是"可对话的 Agent"(Conversable Agent)。

核心概念

  • ConversableAgent:可以与其他 Agent 对话的基础类
  • AssistantAgent:使用 LLM 生成回复的 Agent
  • UserProxyAgent:代表用户、可执行代码的 Agent
  • GroupChat:多个 Agent 的群聊

代码示例

from autogen import AssistantAgent, UserProxyAgent, GroupChat, GroupChatManager

# 定义 Agent
coder = AssistantAgent(
    name="Coder",
    system_message="你是一个 Python 专家。编写清晰、高效的代码。",
    llm_config={"model": "gpt-4o"},
)

reviewer = AssistantAgent(
    name="Reviewer",
    system_message="你是一个代码审查专家。审查代码的质量、安全性和性能。",
    llm_config={"model": "gpt-4o"},
)

tester = AssistantAgent(
    name="Tester",
    system_message="你是一个测试工程师。编写全面的测试用例。",
    llm_config={"model": "gpt-4o"},
)

user_proxy = UserProxyAgent(
    name="User",
    human_input_mode="NEVER",
    code_execution_config={"work_dir": "coding_output"},
)

# 创建群聊
group_chat = GroupChat(
    agents=[user_proxy, coder, reviewer, tester],
    messages=[],
    max_round=20,
)

manager = GroupChatManager(groupchat=group_chat, llm_config={"model": "gpt-4o"})

# 开始对话
user_proxy.initiate_chat(
    manager,
    message="请实现一个 LRU 缓存,包含完整的测试。"
)

AutoGen 特点

特性 说明
对话驱动 Agent 通过自然语言对话协作
代码执行 内置安全的代码执行环境
灵活的对话流程 支持两人对话、群聊、嵌套对话
人类参与 支持 human-in-the-loop
工具调用 Agent 可以注册和使用工具

CrewAI

概述

CrewAI 采用角色扮演模式,将多 Agent 协作组织为"团队"(Crew)。

核心概念

  • Agent:有角色、目标和背景的智能体
  • Task:需要完成的具体任务
  • Crew:Agent 和 Task 的组合
  • Process:执行方式(顺序/层级)

代码示例

from crewai import Agent, Task, Crew, Process

# 定义 Agent
researcher = Agent(
    role="研究分析师",
    goal="深入研究给定主题并提供全面的分析",
    backstory="你是一位经验丰富的研究分析师,擅长信息收集和深度分析。",
    tools=[search_tool, scrape_tool],
    llm="gpt-4o",
    verbose=True,
)

writer = Agent(
    role="技术写作者",
    goal="将研究成果转化为清晰、引人入胜的文章",
    backstory="你是一位专业的技术作家,擅长将复杂概念用简明的语言表达。",
    llm="gpt-4o",
)

editor = Agent(
    role="编辑",
    goal="确保文章质量,检查事实准确性和可读性",
    backstory="你是一位严谨的编辑,对质量有极高的标准。",
    llm="gpt-4o",
)

# 定义任务
research_task = Task(
    description="研究 {topic} 的最新发展、关键技术和市场趋势。",
    expected_output="一份全面的研究报告,包含关键发现和数据支持。",
    agent=researcher,
)

writing_task = Task(
    description="基于研究报告撰写一篇技术文章。",
    expected_output="一篇 2000 字左右的技术文章,结构清晰、内容丰富。",
    agent=writer,
    context=[research_task],  # 依赖研究任务的输出
)

editing_task = Task(
    description="审核和编辑文章,确保质量达标。",
    expected_output="一篇经过审核的最终版文章。",
    agent=editor,
    context=[writing_task],
)

# 创建团队
crew = Crew(
    agents=[researcher, writer, editor],
    tasks=[research_task, writing_task, editing_task],
    process=Process.sequential,  # 顺序执行
    verbose=True,
)

# 执行
result = crew.kickoff(inputs={"topic": "LLM Agent 技术"})
print(result)

MetaGPT

概述

MetaGPT(Hong et al., 2023)将标准操作流程(SOP)引入多 Agent 协作,模拟软件公司的开发流程。

核心理念

  • Agent 通过 SOP 约束行为,而不是自由对话
  • 结构化的输出格式(PRD、设计文档、代码等)
  • 明确的角色定义和职责分工

角色定义

# MetaGPT 的预定义角色
roles = {
    "ProductManager": {
        "goal": "创建成功的产品",
        "constraints": "使用与用户需求相同的语言",
        "actions": ["WritePRD"],
    },
    "Architect": {
        "goal": "设计简洁可用的系统",
        "constraints": "使用现有的 API/库",
        "actions": ["WriteDesign"],
    },
    "ProjectManager": {
        "goal": "提高团队效率",
        "actions": ["WriteTasks"],
    },
    "Engineer": {
        "goal": "编写优雅、模块化的代码",
        "actions": ["WriteCode"],
    },
    "QAEngineer": {
        "goal": "确保质量",
        "actions": ["WriteTest"],
    },
}

工作流程

graph LR
    U[用户需求] --> PM[产品经理<br/>写 PRD]
    PM --> ARCH[架构师<br/>系统设计]
    ARCH --> PJM[项目经理<br/>任务分解]
    PJM --> ENG[工程师<br/>编写代码]
    ENG --> QA[QA 工程师<br/>编写测试]
    QA --> OUTPUT[交付物]

OpenAI Swarm

概述

OpenAI Swarm 是一个轻量级的多 Agent 编排框架,核心概念是 Agent 之间的"交接"(Handoff)。

核心概念

  • Agent:有 instructions 和 tools 的对话实体
  • Handoff:Agent 将对话控制权交给另一个 Agent
  • Context Variables:跨 Agent 共享的上下文

代码示例

from swarm import Swarm, Agent

client = Swarm()

# 定义 Agent
triage_agent = Agent(
    name="分诊 Agent",
    instructions="你是客服分诊员。根据用户问题将其转接到合适的专家。",
)

sales_agent = Agent(
    name="销售 Agent",
    instructions="你是销售专家。帮助用户了解产品和购买。",
)

support_agent = Agent(
    name="技术支持 Agent",
    instructions="你是技术支持专家。帮助用户解决技术问题。",
)

# 定义交接函数
def transfer_to_sales():
    """转接到销售"""
    return sales_agent

def transfer_to_support():
    """转接到技术支持"""
    return support_agent

triage_agent.functions = [transfer_to_sales, transfer_to_support]

# 运行
response = client.run(
    agent=triage_agent,
    messages=[{"role": "user", "content": "我想了解你们的企业版定价"}]
)
# triage_agent 会自动交接给 sales_agent

Swarm 特点

  • 极其轻量(单文件实现)
  • 适合简单的路由和分工场景
  • 无状态设计
  • 教育/实验目的为主

LangGraph 多 Agent

使用 LangGraph 构建多 Agent

from langgraph.graph import StateGraph, END

class MultiAgentState(TypedDict):
    messages: list
    current_agent: str
    task_status: str

# 定义 Agent 节点
def researcher_node(state):
    # 研究 Agent 的逻辑
    result = research_agent.invoke(state["messages"])
    return {"messages": state["messages"] + [result], "current_agent": "writer"}

def writer_node(state):
    result = writer_agent.invoke(state["messages"])
    return {"messages": state["messages"] + [result], "current_agent": "reviewer"}

def reviewer_node(state):
    result = reviewer_agent.invoke(state["messages"])
    if "approved" in result.lower():
        return {"messages": state["messages"] + [result], "task_status": "done"}
    return {"messages": state["messages"] + [result], "current_agent": "writer"}

# 构建图
graph = StateGraph(MultiAgentState)
graph.add_node("researcher", researcher_node)
graph.add_node("writer", writer_node)
graph.add_node("reviewer", reviewer_node)

# 定义边
graph.set_entry_point("researcher")
graph.add_edge("researcher", "writer")
graph.add_edge("writer", "reviewer")
graph.add_conditional_edges("reviewer", 
    lambda s: END if s["task_status"] == "done" else "writer"
)

app = graph.compile()
result = app.invoke({"messages": [initial_task], "current_agent": "researcher", "task_status": ""})

框架对比

特性 AutoGen CrewAI MetaGPT Swarm LangGraph
协作模式 对话驱动 角色任务 SOP 驱动 交接式 图工作流
复杂度 极低
灵活性
代码执行 内置 通过工具 内置 通过函数 通过节点
人类参与 支持 支持 有限 有限 支持
生产就绪 实验性
状态管理 对话历史 上下文传递 文档流 无状态 图状态

选型建议

场景 推荐框架 原因
快速原型 CrewAI 简单直观的 API
对话式协作 AutoGen 灵活的对话管理
软件开发模拟 MetaGPT 内置的开发 SOP
简单路由/分工 Swarm 极其轻量
复杂工作流 LangGraph 精确的流程控制
生产环境 LangGraph / AutoGen 成熟度和可靠性

实践建议

常见陷阱

  1. 过度设计:简单任务不需要多 Agent,单 Agent 即可
  2. 通信爆炸:Agent 之间过多的对话消耗 token 和时间
  3. 职责不清:Agent 之间的职责边界要明确
  4. 缺乏终止条件:Agent 可能陷入无限循环对话

何时使用多 Agent

  • 任务涉及多个明确不同的专业领域
  • 需要质量检查/审核环节
  • 任务可以自然分解为独立子任务
  • 需要多角度分析或辩论

何时不使用多 Agent

  • 简单的单步任务
  • 延迟敏感的场景
  • 预算有限(多 Agent 消耗更多 token)

参考文献

  • Wu, Q., et al. (2023). "AutoGen: Enabling Next-Gen LLM Applications via Multi-Agent Conversation"
  • Hong, S., et al. (2023). "MetaGPT: Meta Programming for Multi-Agent Collaborative Framework"
  • CrewAI Documentation (crewai.com)
  • OpenAI Swarm GitHub Repository

评论 #