crewai-multi-agent
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseCrewAI - Multi-Agent Orchestration Framework
CrewAI - 多Agent编排框架
Build teams of autonomous AI agents that collaborate to solve complex tasks.
构建能够协作解决复杂任务的自主AI Agent团队。
When to use CrewAI
何时使用CrewAI
Use CrewAI when:
- Building multi-agent systems with specialized roles
- Need autonomous collaboration between agents
- Want role-based task delegation (researcher, writer, analyst)
- Require sequential or hierarchical process execution
- Building production workflows with memory and observability
- Need simpler setup than LangChain/LangGraph
Key features:
- Standalone: No LangChain dependencies, lean footprint
- Role-based: Agents have roles, goals, and backstories
- Dual paradigm: Crews (autonomous) + Flows (event-driven)
- 50+ tools: Web scraping, search, databases, AI services
- Memory: Short-term, long-term, and entity memory
- Production-ready: Tracing, enterprise features
Use alternatives instead:
- LangChain: General-purpose LLM apps, RAG pipelines
- LangGraph: Complex stateful workflows with cycles
- AutoGen: Microsoft ecosystem, multi-agent conversations
- LlamaIndex: Document Q&A, knowledge retrieval
使用CrewAI的场景:
- 构建具备特定角色的多Agent系统
- 需要Agent之间的自主协作
- 希望基于角色分配任务(研究员、撰稿人、分析师)
- 需要按顺序或分层执行流程
- 构建带记忆和可观测性的生产级工作流
- 相比LangChain/LangGraph需要更简单的设置
核心特性:
- 独立无依赖:无需LangChain,轻量小巧
- 基于角色:Agent拥有角色、目标和背景故事
- 双范式:Crews(自主式)+ Flows(事件驱动式)
- 50+工具:网页爬取、搜索、数据库、AI服务等
- 记忆功能:短期、长期和实体记忆
- 生产就绪:追踪功能、企业级特性
可选择竞品的场景:
- LangChain:通用LLM应用、RAG流水线
- LangGraph:复杂有状态工作流
- AutoGen:微软生态、多Agent对话
- LlamaIndex:文档问答、知识检索
Quick start
快速开始
Installation
安装
bash
undefinedbash
undefinedCore framework
Core framework
pip install crewai
pip install crewai
With 50+ built-in tools
With 50+ built-in tools
pip install 'crewai[tools]'
undefinedpip install 'crewai[tools]'
undefinedCreate project with CLI
使用CLI创建项目
bash
undefinedbash
undefinedCreate new crew project
Create new crew project
crewai create crew my_project
cd my_project
crewai create crew my_project
cd my_project
Install dependencies
Install dependencies
crewai install
crewai install
Run the crew
Run the crew
crewai run
undefinedcrewai run
undefinedSimple crew (code-only)
简单Crew示例(纯代码)
python
from crewai import Agent, Task, Crew, Processpython
from crewai import Agent, Task, Crew, Process1. Define agents
1. Define agents
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
)
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. Define tasks
2. Define tasks
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] # Uses research output
)
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] # Uses research output
)
3. Create and run crew
3. Create and run crew
crew = Crew(
agents=[researcher, writer],
tasks=[research_task, write_task],
process=Process.sequential, # Tasks run in order
verbose=True
)
crew = Crew(
agents=[researcher, writer],
tasks=[research_task, write_task],
process=Process.sequential, # Tasks run in order
verbose=True
)
4. Execute
4. Execute
result = crew.kickoff(inputs={"topic": "AI Agents"})
print(result.raw)
undefinedresult = crew.kickoff(inputs={"topic": "AI Agents"})
print(result.raw)
undefinedCore concepts
核心概念
Agents - Autonomous workers
Agents - 自主工作单元
python
from crewai import Agent
agent = Agent(
role="Data Scientist", # Job title/role
goal="Analyze data to find insights", # What they aim to achieve
backstory="PhD in statistics...", # Background context
llm="gpt-4o", # LLM to use
tools=[], # Tools available
memory=True, # Enable memory
verbose=True, # Show reasoning
allow_delegation=True, # Can delegate to others
max_iter=15, # Max reasoning iterations
max_rpm=10 # Rate limit
)python
from crewai import Agent
agent = Agent(
role="Data Scientist", # Job title/role
goal="Analyze data to find insights", # What they aim to achieve
backstory="PhD in statistics...", # Background context
llm="gpt-4o", # LLM to use
tools=[], # Tools available
memory=True, # Enable memory
verbose=True, # Show reasoning
allow_delegation=True, # Can delegate to others
max_iter=15, # Max reasoning iterations
max_rpm=10 # Rate limit
)Tasks - Units of work
Tasks - 工作单元
python
from crewai import Task
task = Task(
description="Analyze the sales data for Q4 2024. {context}",
expected_output="A summary report with key metrics and trends.",
agent=analyst, # Assigned agent
context=[previous_task], # Input from other tasks
output_file="report.md", # Save to file
async_execution=False, # Run synchronously
human_input=False # No human approval needed
)python
from crewai import Task
task = Task(
description="Analyze the sales data for Q4 2024. {context}",
expected_output="A summary report with key metrics and trends.",
agent=analyst, # Assigned agent
context=[previous_task], # Input from other tasks
output_file="report.md", # Save to file
async_execution=False, # Run synchronously
human_input=False # No human approval needed
)Crews - Teams of agents
Crews - Agent团队
python
from crewai import Crew, Process
crew = Crew(
agents=[researcher, writer, editor], # Team members
tasks=[research, write, edit], # Tasks to complete
process=Process.sequential, # Or Process.hierarchical
verbose=True,
memory=True, # Enable crew memory
cache=True, # Cache tool results
max_rpm=10, # Rate limit
share_crew=False # Opt-in telemetry
)python
from crewai import Crew, Process
crew = Crew(
agents=[researcher, writer, editor], # Team members
tasks=[research, write, edit], # Tasks to complete
process=Process.sequential, # Or Process.hierarchical
verbose=True,
memory=True, # Enable crew memory
cache=True, # Cache tool results
max_rpm=10, # Rate limit
share_crew=False # Opt-in telemetry
)Execute with inputs
Execute with inputs
result = crew.kickoff(inputs={"topic": "AI trends"})
result = crew.kickoff(inputs={"topic": "AI trends"})
Access results
Access results
print(result.raw) # Final output
print(result.tasks_output) # All task outputs
print(result.token_usage) # Token consumption
undefinedprint(result.raw) # Final output
print(result.tasks_output) # All task outputs
print(result.token_usage) # Token consumption
undefinedProcess types
流程类型
Sequential (default)
顺序执行(默认)
Tasks execute in order, each agent completing their task before the next:
python
crew = Crew(
agents=[researcher, writer],
tasks=[research_task, write_task],
process=Process.sequential # Task 1 → Task 2 → Task 3
)任务按顺序执行,每个Agent完成任务后下一个才开始:
python
crew = Crew(
agents=[researcher, writer],
tasks=[research_task, write_task],
process=Process.sequential # Task 1 → Task 2 → Task 3
)Hierarchical
分层执行
Auto-creates a manager agent that delegates and coordinates:
python
crew = Crew(
agents=[researcher, writer, analyst],
tasks=[research_task, write_task, analyze_task],
process=Process.hierarchical, # Manager delegates tasks
manager_llm="gpt-4o" # LLM for manager
)自动创建一个Manager Agent来分配和协调任务:
python
crew = Crew(
agents=[researcher, writer, analyst],
tasks=[research_task, write_task, analyze_task],
process=Process.hierarchical, # Manager delegates tasks
manager_llm="gpt-4o" # LLM for manager
)Using tools
使用工具
Built-in tools (50+)
内置工具(50+种)
bash
pip install 'crewai[tools]'python
from crewai_tools import (
SerperDevTool, # Web search
ScrapeWebsiteTool, # Web scraping
FileReadTool, # Read files
PDFSearchTool, # Search PDFs
WebsiteSearchTool, # Search websites
CodeDocsSearchTool, # Search code docs
YoutubeVideoSearchTool, # Search YouTube
)bash
pip install 'crewai[tools]'python
from crewai_tools import (
SerperDevTool, # Web search
ScrapeWebsiteTool, # Web scraping
FileReadTool, # Read files
PDFSearchTool, # Search PDFs
WebsiteSearchTool, # Search websites
CodeDocsSearchTool, # Search code docs
YoutubeVideoSearchTool, # Search YouTube
)Assign tools to agent
Assign tools to agent
researcher = Agent(
role="Researcher",
goal="Find accurate information",
backstory="Expert at finding data online.",
tools=[SerperDevTool(), ScrapeWebsiteTool()]
)
undefinedresearcher = Agent(
role="Researcher",
goal="Find accurate information",
backstory="Expert at finding data online.",
tools=[SerperDevTool(), ScrapeWebsiteTool()]
)
undefinedCustom tools
自定义工具
python
from crewai.tools import BaseTool
from pydantic import Field
class CalculatorTool(BaseTool):
name: str = "Calculator"
description: str = "Performs mathematical calculations. Input: expression"
def _run(self, expression: str) -> str:
try:
result = eval(expression)
return f"Result: {result}"
except Exception as e:
return f"Error: {str(e)}"python
from crewai.tools import BaseTool
from pydantic import Field
class CalculatorTool(BaseTool):
name: str = "Calculator"
description: str = "Performs mathematical calculations. Input: expression"
def _run(self, expression: str) -> str:
try:
result = eval(expression)
return f"Result: {result}"
except Exception as e:
return f"Error: {str(e)}"Use custom tool
Use custom tool
agent = Agent(
role="Analyst",
goal="Perform calculations",
tools=[CalculatorTool()]
)
undefinedagent = Agent(
role="Analyst",
goal="Perform calculations",
tools=[CalculatorTool()]
)
undefinedYAML configuration (recommended)
YAML配置(推荐)
Project structure
项目结构
my_project/
├── src/my_project/
│ ├── config/
│ │ ├── agents.yaml # Agent definitions
│ │ └── tasks.yaml # Task definitions
│ ├── crew.py # Crew assembly
│ └── main.py # Entry point
└── pyproject.tomlmy_project/
├── src/my_project/
│ ├── config/
│ │ ├── agents.yaml # Agent definitions
│ │ └── tasks.yaml # Task definitions
│ ├── crew.py # Crew assembly
│ └── main.py # Entry point
└── pyproject.tomlagents.yaml
agents.yaml
yaml
researcher:
role: "{topic} Senior Data Researcher"
goal: "Uncover cutting-edge developments in {topic}"
backstory: >
You're a seasoned researcher with a knack for uncovering
the latest developments in {topic}. Known for your ability
to find relevant information and present it clearly.
reporting_analyst:
role: "Reporting Analyst"
goal: "Create detailed reports based on research data"
backstory: >
You're a meticulous analyst who transforms raw data into
actionable insights through well-structured reports.yaml
researcher:
role: "{topic} Senior Data Researcher"
goal: "Uncover cutting-edge developments in {topic}"
backstory: >
You're a seasoned researcher with a knack for uncovering
the latest developments in {topic}. Known for your ability
to find relevant information and present it clearly.
reporting_analyst:
role: "Reporting Analyst"
goal: "Create detailed reports based on research data"
backstory: >
You're a meticulous analyst who transforms raw data into
actionable insights through well-structured reports.tasks.yaml
tasks.yaml
yaml
research_task:
description: >
Conduct thorough research about {topic}.
Find the most relevant information for {year}.
expected_output: >
A list with 10 bullet points of the most relevant
information about {topic}.
agent: researcher
reporting_task:
description: >
Review the research and create a comprehensive report.
Focus on key findings and recommendations.
expected_output: >
A detailed report in markdown format with executive
summary, findings, and recommendations.
agent: reporting_analyst
output_file: report.mdyaml
research_task:
description: >
Conduct thorough research about {topic}.
Find the most relevant information for {year}.
expected_output: >
A list with 10 bullet points of the most relevant
information about {topic}.
agent: researcher
reporting_task:
description: >
Review the research and create a comprehensive report.
Focus on key findings and recommendations.
expected_output: >
A detailed report in markdown format with executive
summary, findings, and recommendations.
agent: reporting_analyst
output_file: report.mdcrew.py
crew.py
python
from crewai import Agent, Crew, Process, Task
from crewai.project import CrewBase, agent, crew, task
from crewai_tools import SerperDevTool
@CrewBase
class MyProjectCrew:
"""My Project crew"""
@agent
def researcher(self) -> Agent:
return Agent(
config=self.agents_config['researcher'],
tools=[SerperDevTool()],
verbose=True
)
@agent
def reporting_analyst(self) -> Agent:
return Agent(
config=self.agents_config['reporting_analyst'],
verbose=True
)
@task
def research_task(self) -> Task:
return Task(config=self.tasks_config['research_task'])
@task
def reporting_task(self) -> Task:
return Task(
config=self.tasks_config['reporting_task'],
output_file='report.md'
)
@crew
def crew(self) -> Crew:
return Crew(
agents=self.agents,
tasks=self.tasks,
process=Process.sequential,
verbose=True
)python
from crewai import Agent, Crew, Process, Task
from crewai.project import CrewBase, agent, crew, task
from crewai_tools import SerperDevTool
@CrewBase
class MyProjectCrew:
"""My Project crew"""
@agent
def researcher(self) -> Agent:
return Agent(
config=self.agents_config['researcher'],
tools=[SerperDevTool()],
verbose=True
)
@agent
def reporting_analyst(self) -> Agent:
return Agent(
config=self.agents_config['reporting_analyst'],
verbose=True
)
@task
def research_task(self) -> Task:
return Task(config=self.tasks_config['research_task'])
@task
def reporting_task(self) -> Task:
return Task(
config=self.tasks_config['reporting_task'],
output_file='report.md'
)
@crew
def crew(self) -> Crew:
return Crew(
agents=self.agents,
tasks=self.tasks,
process=Process.sequential,
verbose=True
)main.py
main.py
python
from my_project.crew import MyProjectCrew
def run():
inputs = {
'topic': 'AI Agents',
'year': 2025
}
MyProjectCrew().crew().kickoff(inputs=inputs)
if __name__ == "__main__":
run()python
from my_project.crew import MyProjectCrew
def run():
inputs = {
'topic': 'AI Agents',
'year': 2025
}
MyProjectCrew().crew().kickoff(inputs=inputs)
if __name__ == "__main__":
run()Flows - Event-driven orchestration
Flows - 事件驱动编排
For complex workflows with conditional logic, use Flows:
python
from crewai.flow.flow import Flow, listen, start, router
from pydantic import BaseModel
class MyState(BaseModel):
confidence: float = 0.0
class MyFlow(Flow[MyState]):
@start()
def gather_data(self):
return {"data": "collected"}
@listen(gather_data)
def analyze(self, data):
self.state.confidence = 0.85
return analysis_crew.kickoff(inputs=data)
@router(analyze)
def decide(self):
return "high" if self.state.confidence > 0.8 else "low"
@listen("high")
def generate_report(self):
return report_crew.kickoff()对于带条件逻辑的复杂工作流,使用Flows:
python
from crewai.flow.flow import Flow, listen, start, router
from pydantic import BaseModel
class MyState(BaseModel):
confidence: float = 0.0
class MyFlow(Flow[MyState]):
@start()
def gather_data(self):
return {"data": "collected"}
@listen(gather_data)
def analyze(self, data):
self.state.confidence = 0.85
return analysis_crew.kickoff(inputs=data)
@router(analyze)
def decide(self):
return "high" if self.state.confidence > 0.8 else "low"
@listen("high")
def generate_report(self):
return report_crew.kickoff()Run flow
Run flow
flow = MyFlow()
result = flow.kickoff()
See [Flows Guide](references/flows.md) for complete documentation.flow = MyFlow()
result = flow.kickoff()
查看[Flows指南](references/flows.md)获取完整文档。Memory system
记忆系统
python
undefinedpython
undefinedEnable all memory types
Enable all memory types
crew = Crew(
agents=[researcher],
tasks=[research_task],
memory=True, # Enable memory
embedder={ # Custom embeddings
"provider": "openai",
"config": {"model": "text-embedding-3-small"}
}
)
**Memory types:** Short-term (ChromaDB), Long-term (SQLite), Entity (ChromaDB)crew = Crew(
agents=[researcher],
tasks=[research_task],
memory=True, # Enable memory
embedder={ # Custom embeddings
"provider": "openai",
"config": {"model": "text-embedding-3-small"}
}
)
**记忆类型:** 短期记忆(ChromaDB)、长期记忆(SQLite)、实体记忆(ChromaDB)LLM providers
LLM提供商
python
from crewai import LLM
llm = LLM(model="gpt-4o") # OpenAI (default)
llm = LLM(model="claude-sonnet-4-5-20250929") # Anthropic
llm = LLM(model="ollama/llama3.1", base_url="http://localhost:11434") # Local
llm = LLM(model="azure/gpt-4o", base_url="https://...") # Azure
agent = Agent(role="Analyst", goal="Analyze data", llm=llm)python
from crewai import LLM
llm = LLM(model="gpt-4o") # OpenAI (default)
llm = LLM(model="claude-sonnet-4-5-20250929") # Anthropic
llm = LLM(model="ollama/llama3.1", base_url="http://localhost:11434") # Local
llm = LLM(model="azure/gpt-4o", base_url="https://...") # Azure
agent = Agent(role="Analyst", goal="Analyze data", llm=llm)CrewAI vs alternatives
CrewAI vs 竞品
| Feature | CrewAI | LangChain | LangGraph |
|---|---|---|---|
| Best for | Multi-agent teams | General LLM apps | Stateful workflows |
| Learning curve | Low | Medium | Higher |
| Agent paradigm | Role-based | Tool-based | Graph-based |
| Memory | Built-in | Plugin-based | Custom |
| 特性 | CrewAI | LangChain | LangGraph |
|---|---|---|---|
| 最佳适用场景 | 多Agent团队 | 通用LLM应用 | 有状态工作流 |
| 学习曲线 | 低 | 中等 | 较高 |
| Agent范式 | 基于角色 | 基于工具 | 基于图 |
| 记忆功能 | 内置 | 插件式 | 自定义 |
Best practices
最佳实践
- Clear roles - Each agent should have a distinct specialty
- YAML config - Better organization for larger projects
- Enable memory - Improves context across tasks
- Set max_iter - Prevent infinite loops (default 15)
- Limit tools - 3-5 tools per agent max
- Rate limiting - Set max_rpm to avoid API limits
- 清晰的角色定义 - 每个Agent应具备明确的专业领域
- 使用YAML配置 - 大型项目的组织性更佳
- 启用记忆功能 - 提升任务间的上下文连贯性
- 设置max_iter - 避免无限循环(默认值15)
- 限制工具数量 - 每个Agent最多3-5种工具
- 速率限制 - 设置max_rpm避免API调用超限
Common issues
常见问题
Agent stuck in loop:
python
agent = Agent(
role="...",
max_iter=10, # Limit iterations
max_rpm=5 # Rate limit
)Task not using context:
python
task2 = Task(
description="...",
context=[task1], # Explicitly pass context
agent=writer
)Memory errors:
python
undefinedAgent陷入循环:
python
agent = Agent(
role="...",
max_iter=10, # 限制迭代次数
max_rpm=5 # 速率限制
)任务未使用上下文:
python
task2 = Task(
description="...",
context=[task1], # 显式传递上下文
agent=writer
)记忆相关错误:
python
undefinedUse environment variable for storage
使用环境变量指定存储目录
import os
os.environ["CREWAI_STORAGE_DIR"] = "./my_storage"
undefinedimport os
os.environ["CREWAI_STORAGE_DIR"] = "./my_storage"
undefinedReferences
参考资料
- Flows Guide - Event-driven workflows, state management
- Tools Guide - Built-in tools, custom tools, MCP
- Troubleshooting - Common issues, debugging
- Flows指南 - 事件驱动工作流、状态管理
- 工具指南 - 内置工具、自定义工具、MCP
- 故障排查 - 常见问题、调试方法
Resources
资源
- GitHub: https://github.com/crewAIInc/crewAI (25k+ stars)
- Docs: https://docs.crewai.com
- Tools: https://github.com/crewAIInc/crewAI-tools
- Examples: https://github.com/crewAIInc/crewAI-examples
- Version: 1.2.0+
- License: MIT
- GitHub:https://github.com/crewAIInc/crewAI(25k+星标)
- 文档:https://docs.crewai.com
- 工具库:https://github.com/crewAIInc/crewAI-tools
- 示例:https://github.com/crewAIInc/crewAI-examples
- 版本:1.2.0+
- 许可证:MIT