智能体框架与平台 / CrewAI 与 AutoGen
CHAPTER 07 · TOPIC 02

CrewAI 与 AutoGen

CrewAI 和 AutoGen 是目前最流行的两个多智能体框架,各有侧重。CrewAI 以"角色扮演"为核心设计理念,让每个 Agent 扮演特定角色进行协作;AutoGen 由微软推出,以"对话"为核心,通过多 Agent 对话实现复杂任务。本章深入对比两个框架的设计理念和实战用法。

一句话理解

CrewAI 和 AutoGen 是目前最流行的两个多智能体框架,各有侧重。CrewAI 以"角色扮演"为核心设计理念,让每个 Agent 扮演特定角色进行协作;AutoGen 由微软推出,以"对话"为核心,通过多 Agent 对话实现复杂任务。本章深入对比两个框架的设计理念和实战用法。

阅读前置

理解单体与多智能体架构

本文关注

CrewAI、Microsoft AutoGen、CrewAI vs AutoGen 对比

所在知识层

工程框架 · 智能体框架与平台

文章导航
主教学视觉CrewAI 与 AutoGen · 知识结构

点击图中节点可定位到对应正文。

核心主题关系与流向

引言

CrewAI 和 AutoGen 是目前最流行的两个多智能体框架,各有侧重。CrewAI 以"角色扮演"为核心设计理念,让每个 Agent 扮演特定角色进行协作;AutoGen 由微软推出,以"对话"为核心,通过多 Agent 对话实现复杂任务。本章深入对比两个框架的设计理念和实战用法。


1. CrewAI

1.1 核心理念

CrewAI 的设计灵感来自真实团队协作——每个 Agent 有明确的角色、目标和背景故事:

语义 SVG 重绘CrewAI 与 AutoGen · 结构 1

根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。

输入与上下文Agent(智能体)系统核心角色: "资深数据分析师"目标: "从数据中提取有价值的商业洞察"背景: "10年数据分析经验,擅长 SQL 和 P…工具、结果与反馈工具: search, querydatabase…
查看原文结构
┌─ Agent(智能体)──────────────────────────────────┐
│  角色: "资深数据分析师"                              │
│  目标: "从数据中提取有价值的商业洞察"                  │
│  背景: "10年数据分析经验,擅长 SQL 和 Python"         │
│  工具: [search, query_database, create_chart]       │
└────────────────────────────────────────────────────┘
语义 SVG 重绘CrewAI 与 AutoGen · 结构 2

根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。

输入与上下文Task(任务)系统核心描述: "分析 Q4 销售数据,找出增长最快的产品…预期输出: "包含数据和图表的分析报告"执行者: 数据分析师 Agent工具、结果与反馈
查看原文结构
┌─ Task(任务)─────────────────────────────────────┐
│  描述: "分析 Q4 销售数据,找出增长最快的产品线"       │
│  预期输出: "包含数据和图表的分析报告"                 │
│  执行者: 数据分析师 Agent                           │
└────────────────────────────────────────────────────┘
语义 SVG 重绘CrewAI 与 AutoGen · 结构 3

根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。

输入与上下文Crew(团队)系统核心Agents: 分析师, 作家, 审核员Tasks: 分析任务, 写作任务, 审核任务流程: sequential(顺序)/ hiera…工具、结果与反馈
查看原文结构
┌─ Crew(团队)─────────────────────────────────────┐
│  Agents: [分析师, 作家, 审核员]                     │
│  Tasks: [分析任务, 写作任务, 审核任务]               │
│  流程: sequential(顺序)/ hierarchical(层级)     │
└────────────────────────────────────────────────────┘

1.2 完整示例

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

# ==================== 定义工具 ====================
search_tool = SerperDevTool()
file_tool = FileReadTool()

# ==================== 定义 Agent ====================
researcher = Agent(
    role="资深行业研究员",
    goal="深入研究指定主题,提供全面、准确的信息和分析",
    backstory="""你是一位在科技行业有 15 年经验的高级研究员。
    你擅长从多个信息源收集和整合信息,发现行业趋势和关键洞察。
    你的研究报告以数据驱动、逻辑严密著称。""",
    tools=[search_tool],
    llm="gpt-4o",
    verbose=True,
    allow_delegation=True,  # 可以将子任务委派给其他 Agent
    max_iter=10             # 最大迭代次数
)

analyst = Agent(
    role="商业分析师",
    goal="从研究数据中提取商业洞察,提出可行的战略建议",
    backstory="""你是一位顶级咨询公司的商业分析师,擅长 SWOT 分析、
    市场定位和竞争分析。你能将复杂数据转化为清晰的战略建议。""",
    tools=[search_tool, file_tool],
    llm="gpt-4o",
    verbose=True
)

writer = Agent(
    role="商业报告撰写专家",
    goal="将分析结果转化为专业、有说服力的商业报告",
    backstory="""你是一位资深商业报告撰写专家,为财富 500 强企业
    撰写战略报告。你的报告结构清晰、数据充分、结论有力。""",
    llm="gpt-4o",
    verbose=True
)

# ==================== 定义任务 ====================
research_task = Task(
    description="""深入研究 2025 年 AI Agent 市场:
    1. 市场规模和增长预测
    2. 主要玩家和产品
    3. 技术趋势和突破
    4. 关键挑战和机遇""",
    expected_output="详细的市场研究报告,包含数据、案例和趋势分析",
    agent=researcher
)

analysis_task = Task(
    description="""基于研究报告,进行商业分析:
    1. SWOT 分析
    2. 竞争格局分析
    3. 市场进入策略建议
    4. 风险评估""",
    expected_output="结构化的商业分析报告,包含可行的战略建议",
    agent=analyst,
    context=[research_task]  # 依赖研究任务的输出
)

writing_task = Task(
    description="""将分析结果撰写成专业的商业报告:
    - 3000 字左右的深度报告
    - 包含执行摘要
    - 数据可视化建议
    - 结论和下一步行动""",
    expected_output="专业的商业报告文档",
    agent=writer,
    context=[research_task, analysis_task],
    output_file="ai_agent_market_report.md"  # 输出到文件
)

# ==================== 组建团队并执行 ====================
crew = Crew(
    agents=[researcher, analyst, writer],
    tasks=[research_task, analysis_task, writing_task],
    process=Process.sequential,  # 顺序执行
    verbose=True,
    memory=True,  # 启用记忆
    cache=True    # 启用缓存(减少重复的 LLM 调用)
)

result = crew.kickoff()
print(result)

1.3 层级流程(Hierarchical Process)

PYTHON
# 管理者 Agent 自动分配任务
manager = Agent(
    role="项目经理",
    goal="高效协调团队完成复杂任务",
    backstory="经验丰富的项目经理,擅长任务分配和进度管理"
)

crew = Crew(
    agents=[researcher, analyst, writer],
    tasks=[research_task, analysis_task, writing_task],
    process=Process.hierarchical,  # 层级模式
    manager_llm="gpt-4o",          # 管理者使用的模型
    # 管理者会自主决定:谁做什么、什么顺序、是否需要返工
)

1.4 CrewAI 高级特性

PYTHON
# 1. 任务委派(Delegation)
# Agent 可以将部分工作委派给其他 Agent
researcher.allow_delegation = True
# 研究员可以将"查找竞品价格"委派给其他 Agent

# 2. 异步执行
import asyncio
result = await crew.kickoff_async()

# 3. 回调函数
def task_callback(task_output):
    print(f"任务完成: {task_output.description[:50]}...")

research_task.callback = task_callback

# 4. 自定义 LLM
from langchain_openai import ChatOpenAI
custom_llm = ChatOpenAI(model="gpt-4o", temperature=0.3)
researcher = Agent(role="...", goal="...", llm=custom_llm)

# 5. 记忆系统
crew = Crew(
    memory=True,              # 启用短期+长期记忆
    memory_backend="rag",     # 使用 RAG 作为记忆后端
)

2. Microsoft AutoGen

2.1 核心理念

AutoGen 以"对话"为核心——多 Agent 通过对话协作完成任务:

语义 SVG 重绘CrewAI 与 AutoGen · 结构 1

根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。

ConversableAgent(可对…所有 Agent 的基类能力: 发送/接收消息、调用 LLM、…
查看原文结构
┌─ ConversableAgent(可对话 Agent)─────────────────┐
│  所有 Agent 的基类                                  │
│  能力: 发送/接收消息、调用 LLM、执行代码             │
└────────────────────────────────────────────────────┘
语义 SVG 重绘CrewAI 与 AutoGen · 结构 2

根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。

输入与上下文AssistantAgent(助手 Agent)系统核心使用 LLM 生成回复可以定义系统提示和工具工具、结果与反馈
查看原文结构
┌─ AssistantAgent(助手 Agent)─────────────────────┐
│  使用 LLM 生成回复                                  │
│  可以定义系统提示和工具                              │
└────────────────────────────────────────────────────┘
语义 SVG 重绘CrewAI 与 AutoGen · 结构 3

根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。

输入与上下文UserProxyAgent(用户代理 Agent…系统核心代表人类用户可以执行代码、要求人类输入工具、结果与反馈
查看原文结构
┌─ UserProxyAgent(用户代理 Agent)─────────────────┐
│  代表人类用户                                       │
│  可以执行代码、要求人类输入                          │
└────────────────────────────────────────────────────┘
语义 SVG 重绘CrewAI 与 AutoGen · 结构 4

根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。

GroupChat(群聊)多个 Agent 在一个对话中协作支持多种发言选择策略
查看原文结构
┌─ GroupChat(群聊)────────────────────────────────┐
│  多个 Agent 在一个对话中协作                         │
│  支持多种发言选择策略                                │
└────────────────────────────────────────────────────┘

2.2 基础示例

PYTHON
from autogen import AssistantAgent, UserProxyAgent

# 创建助手
assistant = AssistantAgent(
    name="AI助手",
    system_message="你是一位 Python 专家,帮助用户解决编程问题。",
    llm_config={
        "model": "gpt-4o",
        "api_key": "sk-...",
        "temperature": 0
    }
)

# 创建用户代理(可以执行代码)
user_proxy = UserProxyAgent(
    name="用户",
    human_input_mode="NEVER",     # 不需要人类输入
    max_consecutive_auto_reply=5, # 最大自动回复次数
    code_execution_config={
        "work_dir": "coding",
        "use_docker": True         # 在 Docker 中执行代码
    }
)

# 启动对话
user_proxy.initiate_chat(
    assistant,
    message="帮我写一个 Python 脚本,爬取某网站的文章标题并保存为 CSV"
)
# AutoGen 会自动进行多轮对话,包括代码生成、执行、调试

2.3 群聊(GroupChat)

PYTHON
from autogen import GroupChat, GroupChatManager

# 创建多个专业 Agent
planner = AssistantAgent(
    name="规划师",
    system_message="你是项目规划师,负责分解任务和制定计划。"
)

coder = AssistantAgent(
    name="程序员",
    system_message="你是资深程序员,负责编写代码。"
)

reviewer = AssistantAgent(
    name="审查员",
    system_message="你是代码审查专家,负责审查代码质量和安全性。只指出问题,不要夸奖。"
)

# 创建群聊
groupchat = GroupChat(
    agents=[user_proxy, planner, coder, reviewer],
    messages=[],
    max_round=15,
    # 发言选择策略
    speaker_selection_method="auto",  # LLM 自动选择下一个发言者
    # 可选: "round_robin" (轮流), "random", 或自定义函数
)

# 创建群聊管理器
manager = GroupChatManager(
    groupchat=groupchat,
    llm_config={"model": "gpt-4o"}
)

# 启动群聊
user_proxy.initiate_chat(
    manager,
    message="开发一个简单的 TODO 应用,使用 Flask + SQLite"
)

2.4 AutoGen 高级特性

PYTHON
# 1. 嵌套对话(Nested Chat)
# Agent 内部可以启动子对话
def research_task(message):
    researcher = AssistantAgent(name="研究员", ...)
    result = user_proxy.initiate_chat(researcher, message=message, max_turns=3)
    return result.summary

# 2. 工具注册
from autogen import register_function

register_function(
    search_web,
    caller=assistant,
    executor=user_proxy,
    name="search_web",
    description="搜索网页获取最新信息"
)

# 3. 自定义发言选择
def custom_speaker_selector(last_speaker, groupchat):
    """自定义下一个发言者的选择逻辑"""
    messages = groupchat.messages
    
    # 如果上一条消息包含代码,让审查员发言
    if "```" in messages[-1]["content"]:
        return reviewer
    
    # 如果上一条是审查意见,让程序员修改
    if last_speaker.name == "审查员":
        return coder
    
    # 默认轮流发言
    agents = groupchat.agents
    idx = agents.index(last_speaker)
    return agents[(idx + 1) % len(agents)]

groupchat = GroupChat(
    agents=[...],
    speaker_selection_method=custom_speaker_selector
)

3. CrewAI vs AutoGen 对比

3.1 核心差异

维度CrewAIAutoGen
设计哲学角色扮演 + 任务驱动对话驱动
Agent 定义角色/目标/背景故事系统提示
协作方式任务流水线 / 层级管理群聊对话
代码执行通过工具内置 Docker 沙箱
学习曲线较低,概念直观中等,概念较多
灵活性结构化,约束较多灵活,可自定义一切
社区生态快速增长微软支持,企业级
适用场景角色明确的任务需要讨论和迭代的任务

3.2 选型建议

TEXT
选择 CrewAI 当:
✓ 任务可以清晰分解为角色和步骤
✓ 想要快速搭建,不需要太多底层控制
✓ 团队成员是"不同专业的专家"
✓ 类似流水线的工作模式

选择 AutoGen 当:
✓ 任务需要多个 Agent 讨论和辩论
✓ 需要代码执行和验证(内置沙箱)
✓ 需要更细粒度的对话控制
✓ 类似团队会议的工作模式

4. 其他值得关注的框架

4.1 OpenAI Swarm

PYTHON
# OpenAI 的轻量级多 Agent 框架(教学性质)
from swarm import Swarm, Agent

def transfer_to_sales():
    return sales_agent

triage_agent = Agent(
    name="分流 Agent",
    instructions="判断用户需要技术支持还是销售帮助",
    functions=[transfer_to_sales, transfer_to_support]
)

4.2 Dify

TEXT
低代码 Agent 开发平台:
- 可视化拖拽式 Agent 构建
- 内置 RAG、工具调用、工作流
- 支持多种 LLM 后端
- 一键部署为 API 或聊天应用
- 适合非开发者快速构建 Agent

4.3 Coze(扣子)

TEXT
字节跳动的 Agent 开发平台:
- 可视化 Bot 构建
- 丰富的插件市场
- 支持知识库、工作流、多 Agent
- 一键发布到飞书、微信、网页等渠道
- 适合快速原型和商业应用

5. 本章小结

框架核心特点最佳场景
CrewAI角色扮演 + 任务流水线多专家协作的结构化任务
AutoGen对话驱动 + 代码执行需要讨论和代码验证的任务
OpenAI Swarm轻量级,教学性质学习和简单多 Agent 场景
Dify低代码,可视化快速原型和非开发者
Coze商业平台,丰富生态商业应用和多渠道发布

相关章节


延伸阅读

  • CrewAI: docs.crewai.com / github.com/crewAIInc/crewAI
  • AutoGen: microsoft.github.io/autogen / github.com/microsoft/autogen
  • OpenAI Swarm: github.com/openai/swarm
  • Dify: dify.ai
  • Coze: coze.com