从零开始用 CrewAI:构建多 AI 智能体协作工作流的完整实战指南
想让你的 AI 助手不再单打独斗?CrewAI 让你组建 AI 团队,像人类团队一样协作完成复杂任务。本文带你从零开始搭建多智能体工作流。
什么是 CrewAI?
CrewAI 是一个开源框架,用于编排自主 AI 智能体并构建复杂工作流。 它让开发者能够创建生产级的多智能体系统,通过结合 Crews(智能体团队) 的协作智能和 Flows(工作流) 的精确控制来实现复杂任务自动化。
与单个 AI 助手不同,CrewAI 允许你创建多个具有不同角色和专长的智能体,让它们像人类团队一样协作工作。比如:
- 一个智能体负责市场研究
- 一个智能体负责内容创作
- 一个智能体负责质量审核
- 一个智能体负责发布协调
这种分工协作的方式可以显著提升任务完成质量和效率。
为什么选择 CrewAI?
核心优势
- 自主协作:智能体基于角色和可用工具做出智能决策
- 自然交互:智能体像人类团队成员一样沟通和协作
- 可扩展设计:轻松添加新工具、角色和功能
- 生产就绪:为真实世界应用的可靠性和可扩展性而构建
- 安全优先:专为企业安全需求设计
- 成本高效:优化以减少 token 使用和 API 调用
适用场景
- 复杂研究任务:需要多角度分析和验证
- 内容创作流水线:从研究到写作到审核的完整流程
- 数据分析工作流:数据收集、分析、可视化、报告生成
- 客户服务自动化:问题分类、解决方案生成、质量检查
- 软件开发辅助:需求分析、代码生成、测试编写、文档更新
环境准备与安装
系统要求
- Python 3.10 或更高版本
- pip 包管理器
- OpenAI API 密钥(或其他支持的 LLM 提供商)
安装步骤
第一步:创建虚拟环境
# 创建项目目录 mkdir crewai-project cd crewai-project # 创建虚拟环境 python -m venv venv # 激活虚拟环境 # Windows: venv\Scripts\activate # macOS/Linux: source venv/bin/activate
第二步:安装 CrewAI
pip install crewai pip install crewai-tools
第三步:配置 API 密钥
# 设置 OpenAI API 密钥 export OPENAI_API_KEY="your-api-key-here" # Windows PowerShell: $env:OPENAI_API_KEY="your-api-key-here"
第四步:验证安装
python -c "import crewai; print(f'CrewAI version: {crewai.__version__}')"
核心概念解析
1. Agent(智能体)
智能体是 CrewAI 的基本执行单元,每个智能体都有:
- 角色(Role):定义智能体的职责和专长
- 目标(Goal):智能体要达成的具体目标
- 背景故事(Backstory):为智能体提供上下文和个性
- 工具(Tools):智能体可以使用的功能
- LLM 模型:智能体使用的大语言模型
from crewai import Agent
researcher = Agent(
role='高级市场研究员',
goal='发现和分析行业趋势与洞察',
backstory='你是一位经验丰富的市场研究专家,擅长从海量数据中提取有价值的商业洞察。',
verbose=True,
allow_delegation=False,
tools=[search_tool, browser_tool]
)
2. Task(任务)
任务是智能体需要完成的具体工作,包含:
- 描述(Description):任务的详细说明
- 预期输出(Expected Output):任务完成后的交付物
- 执行智能体(Agent):负责执行任务的智能体
- 工具(Tools):任务可用的工具
from crewai import Task
research_task = Task(
description='分析 2026 年 AI 编程工具市场的最新趋势,包括主要玩家、新兴技术和用户 adoption 率。',
expected_output='一份包含 5-7 个关键趋势的详细报告,每个趋势附带数据支持和来源引用。',
agent=researcher
)
3. Crew(团队)
Crew 是智能体的协作团队,负责协调多个智能体完成复杂任务:
from crewai import Crew
crew = Crew(
agents=[researcher, writer, editor],
tasks=[research_task, writing_task, editing_task],
verbose=True,
process=Process.sequential # 顺序执行或 hierarchical(层级式)
)
4. Flow(工作流)
Flow 是 CrewAI 的高级编排层,用于管理状态和控制执行流程:
- 状态管理:在步骤和执行之间持久化数据
- 事件驱动执行:基于事件或外部输入触发动作
- 控制流:使用条件逻辑、循环和分支
实战案例:构建内容创作团队
让我们创建一个完整的内容创作工作流,包含研究、写作和审核三个环节。
完整代码示例
from crewai import Agent, Task, Crew, Process
from crewai_tools import SerperDevTool, ScrapeWebsiteTool
import os
# 配置 API 密钥
os.environ['OPENAI_API_KEY'] = 'your-api-key'
os.environ['SERPER_API_KEY'] = 'your-serper-key' # 用于搜索
# ========== 创建智能体 ==========
# 1. 研究智能体
researcher = Agent(
role='高级技术研究员',
goal='深入调研指定技术主题,收集最新、最准确的信息和数据',
backstory='你是一位拥有 10 年经验的技术研究专家,擅长从学术论文、技术博客和官方文档中提取关键信息。你的研究报告以深度和准确性著称。',
verbose=True,
allow_delegation=False,
tools=[SerperDevTool(), ScrapeWebsiteTool()]
)
# 2. 内容作家智能体
writer = Agent(
role='资深技术内容作家',
goal='将复杂的技术概念转化为易懂、有趣的高质量文章',
backstory='你是一位获奖的技术作家,曾在多家知名科技媒体发表文章。你擅长用生动的例子和清晰的解释让读者理解复杂概念。',
verbose=True,
allow_delegation=False
)
# 3. 编辑审核智能体
editor = Agent(
role='技术内容主编',
goal='确保内容的准确性、一致性和可读性,达到出版标准',
backstory='你是一位经验丰富的技术编辑,审核过上千篇技术文章。你对细节有着敏锐的洞察力,能够发现事实错误、逻辑漏洞和表达不清的地方。',
verbose=True,
allow_delegation=True
)
# ========== 创建任务 ==========
research_task = Task(
description='''调研 CrewAI 多智能体框架的核心功能和应用场景。
具体要求:
1. 查找 CrewAI 的官方文档和最新功能更新
2. 收集实际使用案例和用户评价
3. 分析与其他多智能体框架(如 AutoGen、LangGraph)的对比
4. 整理至少 5 个实际应用场景''',
expected_output='一份结构化的研究报告,包含功能概述、应用场景、优劣势分析和对比表格。',
agent=researcher
)
writing_task = Task(
description='''基于研究报告,撰写一篇面向开发者的 CrewAI 入门教程。
文章要求:
1. 标题吸引人,突出实用价值
2. 包含环境配置和安装步骤
3. 提供完整的代码示例
4. 解释核心概念和使用方法
5. 字数不少于 2000 字''',
expected_output='一篇完整的技术教程文章,包含标题、引言、正文、代码示例和总结。',
agent=writer
)
editing_task = Task(
description='''审核并优化文章质量。
审核要点:
1. 检查技术准确性,修正错误信息
2. 优化文章结构和逻辑流程
3. 改进表达清晰度和可读性
4. 确保代码示例正确且可运行
5. 添加必要的注意事项和最佳实践''',
expected_output='经过审核和优化的最终版本文章,附带修改说明和质量评估。',
agent=editor
)
# ========== 创建团队并执行 ==========
crew = Crew(
agents=[researcher, writer, editor],
tasks=[research_task, writing_task, editing_task],
verbose=True,
process=Process.sequential
)
print("🚀 开始执行内容创作工作流...")
result = crew.kickoff()
print("\n✅ 工作流执行完成!")
print(f"📄 最终输出:{result}")
运行结果
执行上述代码后,你会看到每个智能体的工作过程和输出:
🚀 开始执行内容创作工作流... [研究员]: 开始调研 CrewAI 框架... [研究员]: 完成研究报告,发现 7 个关键应用场景... [作家]: 开始撰写教程文章... [作家]: 完成初稿,共 2500 字... [编辑]: 开始审核文章... [编辑]: 发现 3 处技术错误,已修正... [编辑]: 优化了代码示例的可读性... [编辑]: 审核完成,文章达到出版标准... ✅ 工作流执行完成!
高级功能:使用 Flows 编排复杂工作流
对于更复杂的场景,CrewAI 的 Flows 功能提供了更强的控制能力。
Flow 基础示例
from crewai.flow.flow import Flow, listen, start
from crewai import Crew, Agent, Task
from pydantic import BaseModel
# 定义状态模型
class ContentState(BaseModel):
topic: str = ""
research_done: bool = False
draft_written: bool = False
final_content: str = ""
# 创建 Flow
class ContentCreationFlow(Flow[ContentState]):
@start()
def initialize(self):
"""初始化流程"""
self.state.topic = "AI 多智能体系统"
print(f"📋 主题已设置:{self.state.topic}")
@listen(initialize)
def research(self):
"""执行研究任务"""
researcher = Agent(
role='研究员',
goal='收集主题相关信息',
backstory='专业的技术研究专家'
)
task = Task(
description=f'调研{self.state.topic}的最新发展',
expected_output='研究报告',
agent=researcher
)
crew = Crew(agents=[researcher], tasks=[task])
result = crew.kickoff()
self.state.research_done = True
self.state.research_result = result
print("✅ 研究完成")
@listen(research)
def write(self):
"""执行写作任务"""
writer = Agent(
role='作家',
goal='基于研究结果撰写文章',
backstory='资深技术作家'
)
task = Task(
description='根据研究报告撰写文章',
expected_output='完整文章',
agent=writer
)
crew = Crew(agents=[writer], tasks=[task])
result = crew.kickoff()
self.state.draft_written = True
self.state.final_content = result
print("✅ 写作完成")
@listen(write)
def publish(self):
"""发布内容"""
print("📤 发布最终内容...")
print(self.state.final_content)
# 运行 Flow
flow = ContentCreationFlow()
flow.kickoff()
Flow 的优势
- 状态持久化:在步骤之间保持和共享数据
- 条件执行:基于状态决定是否执行某步骤
- 并行处理:同时执行多个独立任务
- 错误处理:优雅地处理执行中的异常
- 可观测性:清晰追踪执行流程和状态变化
常用工具集成
CrewAI 提供了丰富的工具生态,让智能体能够与外部系统交互。
内置工具
from crewai_tools import (
SerperDevTool, # Google 搜索
ScrapeWebsiteTool, # 网页抓取
BrowserbaseLoadTool, # 浏览器自动化
CodeInterpreterTool, # 代码执行
FileReadTool, # 文件读取
FileWriteTool, # 文件写入
GithubSearchTool, # GitHub 搜索
TXTSearchTool, # 文本搜索
JSONSearchTool, # JSON 搜索
MDXSearchTool, # Markdown 搜索
)
自定义工具
from crewai_tools import BaseTool
from typing import Type
from pydantic import BaseModel, Field
class CustomInput(BaseModel):
"""自定义工具的输入模型"""
query: str = Field(description="要查询的内容")
class MyCustomTool(BaseTool):
name: str = "我的自定义工具"
description: str = "这个工具的详细说明"
args_schema: Type[BaseModel] = CustomInput
def _run(self, query: str) -> str:
# 实现工具逻辑
result = f"处理查询:{query}"
return result
# 在智能体中使用
agent = Agent(
role='自定义智能体',
goal='使用自定义工具完成任务',
tools=[MyCustomTool()]
)
最佳实践与技巧
1. 智能体设计原则
- 角色明确:每个智能体应该有清晰、具体的职责范围
- 目标具体:避免模糊的目标,使用可衡量的成功标准
- 工具适度:只给智能体必要的工具,避免过度复杂
- 背景丰富:详细的背景故事能帮助智能体更好地理解任务
2. 任务设计技巧
- 分解复杂任务:将大任务拆分为多个小任务
- 明确输出格式:清晰描述预期输出的结构和内容
- 设置依赖关系:使用 sequential 流程确保任务顺序执行
- 提供上下文:在任务描述中包含必要的背景信息
3. 性能优化
- 缓存结果:避免重复执行相同的查询
- 限制迭代次数:设置最大迭代次数防止无限循环
- 使用合适模型:根据任务复杂度选择 LLM 模型
- 并行执行:对于独立任务使用并行处理
4. 调试与监控
# 启用详细日志
crew = Crew(
agents=[...],
tasks=[...],
verbose=True # 显示详细执行日志
)
# 使用回调监控执行
def on_step_start(step):
print(f"开始步骤:{step}")
def on_step_end(step, result):
print(f"完成步骤:{step}, 结果:{result}")
crew.on_step_start = on_step_start
crew.on_step_end = on_step_end
常见问题解答
Q1: CrewAI 支持哪些 LLM 提供商?
A: CrewAI 支持多种 LLM 提供商,包括:
- OpenAI (GPT-4, GPT-3.5)
- Anthropic (Claude)
- Google (Gemini)
- Azure OpenAI
- 本地模型(通过 Ollama、LM Studio 等)
配置示例:
from crewai import Agent
agent = Agent(
role='智能体',
goal='完成任务',
llm='anthropic/claude-3-sonnet' # 指定模型
)
Q2: 如何保存和加载 Crew 状态?
A: 可以使用序列化保存状态:
import pickle
# 保存
with open('crew_state.pkl', 'wb') as f:
pickle.dump(crew, f)
# 加载
with open('crew_state.pkl', 'rb') as f:
crew = pickle.load(f)
Q3: CrewAI 与 LangChain 有什么区别?
A:
- LangChain 更侧重于 LLM 应用的基础设施和链式调用
- CrewAI 专注于多智能体协作和角色分工
- 两者可以结合使用:用 LangChain 构建工具,用 CrewAI 编排智能体
Q4: 如何处理长任务执行?
A:
- 使用异步执行
- 设置超时和重试机制
- 将长任务分解为多个子任务
- 使用 Flow 的状态管理追踪进度
Q5: CrewAI 适合生产环境吗?
A: 是的,CrewAI 设计时考虑了生产需求:
- 支持错误处理和重试
- 提供详细的执行日志
- 支持状态持久化
- 可以部署为服务
总结
CrewAI 为构建多智能体协作系统提供了一个强大而灵活的框架。通过合理的角色设计、任务分解和工作流编排,你可以创建出能够自主完成复杂任务的 AI 团队。
核心要点回顾:
- 智能体分工:为不同职责创建专门的智能体
- 任务编排:使用 Crew 协调多个智能体协作
- 流程控制:使用 Flow 管理复杂工作流状态
- 工具集成:扩展智能体能力与外部系统交互
- 最佳实践:遵循设计原则优化性能和可靠性
下一步行动:
- 访问 CrewAI 官方文档 深入学习
- 加入 CrewAI 社区 与其他开发者交流
- 尝试修改本文示例,创建你自己的智能体团队
- 探索更多内置工具和自定义工具的可能性
多智能体协作是 AI 应用开发的重要趋势。掌握 CrewAI,你将能够构建更强大、更智能的自动化系统,让 AI 真正成为你的得力助手团队。
参考资料: