CrewAI 是一个多智能体编排框架,用于构建由自主 AI 智能体组成的团队,让它们协作解决复杂任务。
主要用途
CrewAI 适用于以下场景:构建具有专业化角色的多智能体系统;需要智能体之间自主协作;希望按角色进行任务分派(如研究员、写作者、分析师);需要顺序或层级流程执行;构建带有记忆和可观测性的生产工作流;以及希望比 LangChain/LangGraph 更简单的设置。
主要能力
- 独立轻量:不依赖 LangChain,占用资源少。
- 基于角色:每个智能体拥有角色、目标和背景故事。
- 双范式:支持 Crews(自主协作)和 Flows(事件驱动编排)。
- 50+ 内置工具:涵盖网页抓取、搜索、数据库、AI 服务等。
- 记忆系统:支持短期记忆(ChromaDB)、长期记忆(SQLite)和实体记忆(ChromaDB)。
- 生产就绪:提供追踪和企业级特性。
使用方式
安装
# 核心框架
pip install crewai
# 包含 50+ 内置工具
pip install 'crewai[tools]'
通过 CLI 创建项目
# 创建新的 crew 项目
crewai create crew my_project
cd my_project
# 安装依赖
crewai install
# 运行 crew
crewai run
纯代码方式定义简单的 crew
from crewai import Agent, Task, Crew, Process
# 1. 定义智能体
researcher = Agent(
role="Senior Research Analyst",
goal="Discover cutting-edge developments in AI",
backstory="You are an expert analyst with a keen eye for emerging trends.",
verbose=True
)
writer = Agent(
role="Technical Writer",
goal="Create clear, engaging content about technical topics",
backstory="You excel at explaining complex concepts to general audiences.",
verbose=True
)
# 2. 定义任务
research_task = Task(
description="Research the latest developments in {topic}. Find 5 key trends.",
expected_output="A detailed report with 5 bullet points on key trends.",
agent=researcher
)
write_task = Task(
description="Write a blog post based on the research findings.",
expected_output="A 500-word blog post in markdown format.",
agent=writer,
context=[research_task] # 使用研究输出
)
# 3. 创建并运行 crew
crew = Crew(
agents=[researcher, writer],
tasks=[research_task, write_task],
process=Process.sequential, # 任务按顺序运行
verbose=True
)
# 4. 执行
result = crew.kickoff(inputs={"topic": "AI Agents"})
print(result.raw)
核心概念
智能体(Agents):自主工作者,可配置角色、目标、背景故事、LLM、工具、记忆、是否允许委派、最大迭代次数和速率限制等。
任务(Tasks):工作单元,可指定描述、预期输出、负责智能体、上下文依赖、输出文件、是否异步执行和是否需要人工输入。
Crews:智能体团队,配置智能体列表、任务列表、流程类型(顺序或层级)、记忆、缓存、速率限制等,通过 kickoff 执行并获取原始输出、任务输出和 token 使用量。
流程类型
- 顺序(Sequential,默认):任务按顺序执行,每个智能体完成自己的任务后再进行下一个。
- 层级(Hierarchical):自动创建经理智能体来分派和协调任务,可指定经理使用的 LLM。
使用工具
可安装 crewai[tools] 使用 50+ 内置工具,例如 SerperDevTool(网页搜索)、ScrapeWebsiteTool(网页抓取)、FileReadTool(读取文件)、PDFSearchTool(搜索 PDF)、WebsiteSearchTool(搜索网站)、CodeDocsSearchTool(搜索代码文档)、YoutubeVideoSearchTool(搜索 YouTube)等。也可通过继承 BaseTool 并实现 _run 方法创建自定义工具。
YAML 配置(推荐)
项目结构通常为 src/my_project/config/agents.yaml 和 tasks.yaml 定义智能体与任务,crew.py 组装 crew,main.py 作为入口。使用 @CrewBase、@agent、@task、@crew 装饰器从配置加载。
Flows(事件驱动编排)
对于带条件逻辑的复杂工作流,可使用 crewai.flow.flow 中的 Flow、start、listen、router 等构建事件驱动流程,并配合 Pydantic 状态模型管理状态。
记忆系统
通过 memory=True 启用记忆,可自定义嵌入提供者。记忆类型包括短期(ChromaDB)、长期(SQLite)和实体(ChromaDB)。
LLM 提供者
支持 OpenAI(默认)、Anthropic、本地 Ollama、Azure 等,通过 crewai.LLM 指定模型和 base_url。
适用场景与限制
CrewAI 适合多智能体团队协作、角色化任务分派、顺序或层级流程以及事件驱动工作流。若需求是通用 LLM 应用或 RAG 管道,可考虑 LangChain;复杂有状态循环工作流可考虑 LangGraph;微软生态的多智能体对话可考虑 AutoGen;文档问答和知识检索可考虑 LlamaIndex。
最佳实践
- 为每个智能体设定清晰且独特的专长。
- 较大项目使用 YAML 配置以便组织。
- 启用记忆以改善跨任务上下文。
- 设置
max_iter防止无限循环(默认 15)。 - 每个智能体限制 3-5 个工具。
- 设置
max_rpm避免 API 速率限制。
常见问题
- 智能体陷入循环:限制
max_iter和max_rpm。 - 任务未使用上下文:在任务中显式传递
context=[task1]。 - 记忆错误:通过环境变量
CREWAI_STORAGE_DIR指定存储目录。
资源
- GitHub:https://github.com/crewAIInc/crewAI(25k+ stars)
- 文档:https://docs.crewai.com
- 工具:https://github.com/crewAIInc/crewAI-tools
- 示例:https://github.com/crewAIInc/crewAI-examples
- 版本:1.2.0+
- 许可证:MIT