CrewAI 与 AutoGen
CrewAI 和 AutoGen 是目前最流行的两个多智能体框架,各有侧重。CrewAI 以"角色扮演"为核心设计理念,让每个 Agent 扮演特定角色进行协作;AutoGen 由微软推出,以"对话"为核心,通过多 Agent 对话实现复杂任务。本章深入对比两个框架的设计理念和实战用法。
CrewAI 和 AutoGen 是目前最流行的两个多智能体框架,各有侧重。CrewAI 以"角色扮演"为核心设计理念,让每个 Agent 扮演特定角色进行协作;AutoGen 由微软推出,以"对话"为核心,通过多 Agent 对话实现复杂任务。本章深入对比两个框架的设计理念和实战用法。
理解单体与多智能体架构
CrewAI、Microsoft AutoGen、CrewAI vs AutoGen 对比
工程框架 · 智能体框架与平台
文章导航
点击图中节点可定位到对应正文。
引言
CrewAI 和 AutoGen 是目前最流行的两个多智能体框架,各有侧重。CrewAI 以"角色扮演"为核心设计理念,让每个 Agent 扮演特定角色进行协作;AutoGen 由微软推出,以"对话"为核心,通过多 Agent 对话实现复杂任务。本章深入对比两个框架的设计理念和实战用法。
1. CrewAI
1.1 核心理念
CrewAI 的设计灵感来自真实团队协作——每个 Agent 有明确的角色、目标和背景故事:
根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
┌─ Agent(智能体)──────────────────────────────────┐
│ 角色: "资深数据分析师" │
│ 目标: "从数据中提取有价值的商业洞察" │
│ 背景: "10年数据分析经验,擅长 SQL 和 Python" │
│ 工具: [search, query_database, create_chart] │
└────────────────────────────────────────────────────┘根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
┌─ Task(任务)─────────────────────────────────────┐
│ 描述: "分析 Q4 销售数据,找出增长最快的产品线" │
│ 预期输出: "包含数据和图表的分析报告" │
│ 执行者: 数据分析师 Agent │
└────────────────────────────────────────────────────┘根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
┌─ Crew(团队)─────────────────────────────────────┐
│ Agents: [分析师, 作家, 审核员] │
│ Tasks: [分析任务, 写作任务, 审核任务] │
│ 流程: sequential(顺序)/ hierarchical(层级) │
└────────────────────────────────────────────────────┘1.2 完整示例
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)
# 管理者 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 高级特性
# 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 通过对话协作完成任务:
根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
┌─ ConversableAgent(可对话 Agent)─────────────────┐
│ 所有 Agent 的基类 │
│ 能力: 发送/接收消息、调用 LLM、执行代码 │
└────────────────────────────────────────────────────┘根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
┌─ AssistantAgent(助手 Agent)─────────────────────┐
│ 使用 LLM 生成回复 │
│ 可以定义系统提示和工具 │
└────────────────────────────────────────────────────┘根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
┌─ UserProxyAgent(用户代理 Agent)─────────────────┐
│ 代表人类用户 │
│ 可以执行代码、要求人类输入 │
└────────────────────────────────────────────────────┘根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
┌─ GroupChat(群聊)────────────────────────────────┐
│ 多个 Agent 在一个对话中协作 │
│ 支持多种发言选择策略 │
└────────────────────────────────────────────────────┘2.2 基础示例
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)
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 高级特性
# 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 核心差异
| 维度 | CrewAI | AutoGen |
|---|---|---|
| 设计哲学 | 角色扮演 + 任务驱动 | 对话驱动 |
| Agent 定义 | 角色/目标/背景故事 | 系统提示 |
| 协作方式 | 任务流水线 / 层级管理 | 群聊对话 |
| 代码执行 | 通过工具 | 内置 Docker 沙箱 |
| 学习曲线 | 较低,概念直观 | 中等,概念较多 |
| 灵活性 | 结构化,约束较多 | 灵活,可自定义一切 |
| 社区生态 | 快速增长 | 微软支持,企业级 |
| 适用场景 | 角色明确的任务 | 需要讨论和迭代的任务 |
3.2 选型建议
选择 CrewAI 当:
✓ 任务可以清晰分解为角色和步骤
✓ 想要快速搭建,不需要太多底层控制
✓ 团队成员是"不同专业的专家"
✓ 类似流水线的工作模式
选择 AutoGen 当:
✓ 任务需要多个 Agent 讨论和辩论
✓ 需要代码执行和验证(内置沙箱)
✓ 需要更细粒度的对话控制
✓ 类似团队会议的工作模式4. 其他值得关注的框架
4.1 OpenAI Swarm
# 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
低代码 Agent 开发平台:
- 可视化拖拽式 Agent 构建
- 内置 RAG、工具调用、工作流
- 支持多种 LLM 后端
- 一键部署为 API 或聊天应用
- 适合非开发者快速构建 Agent4.3 Coze(扣子)
字节跳动的 Agent 开发平台:
- 可视化 Bot 构建
- 丰富的插件市场
- 支持知识库、工作流、多 Agent
- 一键发布到飞书、微信、网页等渠道
- 适合快速原型和商业应用5. 本章小结
| 框架 | 核心特点 | 最佳场景 |
|---|---|---|
| CrewAI | 角色扮演 + 任务流水线 | 多专家协作的结构化任务 |
| AutoGen | 对话驱动 + 代码执行 | 需要讨论和代码验证的任务 |
| OpenAI Swarm | 轻量级,教学性质 | 学习和简单多 Agent 场景 |
| Dify | 低代码,可视化 | 快速原型和非开发者 |
| Coze | 商业平台,丰富生态 | 商业应用和多渠道发布 |
相关章节
- LangChain 与 LangGraph — 同章对照框架,LangGraph 以状态图方式编排多 Agent
- 多智能体系统 — CrewAI/AutoGen 背后的多 Agent 协作与通信理论
- 低代码 Agent 平台与行业解决方案 — 面向非开发者的低代码替代方案
延伸阅读
- 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