lang: zh slug: crewai title: ‘CrewAI:建立拥有 51K+ 明星的多智能体人工智能团队’ description: ‘CrewAI (crewAIInc/crewAI) 是一个用于编排角色扮演、自主 AI 代理的 Python 框架。 兼容 OpenAI、Anthropic、Ollama、LangChain 和 LlamaIndex。 涵盖安装、代理角色、任务工作流程、生产部署和基准测试。’ tags: [“ai-agent”, “automation”, “guide”, “open-source”, “reference”, “tutorial”] date: 2026-05-19 00:00:00+08:00 lastmod: 2026-05-19 00:00:00+08:00 tech_stack: [] application_domain: Llm Frameworks source_version: ’' licensing_model: Open Source license_type: MIT file_size: ’' file_md5: ’' download_url: ’' backup_url: ’' github_repo: ‘https://github.com/crewAIInc/crewAI' last_maintained: ‘2026-05-19’ draft: false categories: [’llm-frameworks’] aliases:- /帖子/crewai/
- /resources/llm-frameworks/crewai-multi-agent-orchestration/
- /posts/crewai-多代理-编排/ 常见问题解答:
- q: ‘CrewAI 需要什么 Python 版本?’ a: ‘CrewAI 需要 Python 3.10、3.11、3.12 或 3.13。 它不支持 Python 3.9 或更早版本。
- 问:“CrewAI Crews 和 Flows 之间有什么区别?” a:“工作人员是由代理组成的团队,通过顺序、分层或并行流程协作完成任务。 流程是事件驱动的工作流程,通过 Pydantic 模型使用条件逻辑和状态管理链接多个工作人员。 使用 Crews 进行单工作流协作,使用 Flows 进行多阶段管道。
- 问:“CrewAI 可以使用非 OpenAI 模型,如 Claude 或本地法学硕士吗?” ‘是的。 CrewAI 使用 LiteLLM 进行与提供商无关的路由,并通过 Ollama 支持 Anthropic Claude、Google Gemini、Azure OpenAI、DeepSeek、Mistral 和本地模型。 使用格式提供程序/模型名称在代理配置中设置模型,例如 anthropic/claude-sonnet-4 或 ollama/llama3.1。
- 问:“在生产中运行 CrewAI 团队需要多少钱?” a:“对于使用 GPT-4o 的 3 名工作人员每天运行 100 次,预计 LLM API 成本每月大约为 100 至 300 美元。 使用 GPT-4o-mini 等更便宜的型号来执行更简单的任务可以将成本降低 40% 至 60%。 CrewAI 本身是在 MIT 许可下免费且开源的。
- q:“我什么时候应该选择 LangGraph 而不是 CrewAI?”
a:“为具有分支的复杂循环状态机、需要完整状态持久性和审计跟踪的超大批量生产、令牌敏感预算(CrewAI 使用大约 1.5 到 2 倍的令牌)或深度可观察性选择 LangGraph。 CrewAI 更适合快速原型设计和基于角色的工作流程,可在大约 15 分钟内实现工作运行。 featureImage: /images/articles/crewai建立拥有-51k-明星的多智能体人工智能团队.png ——– Agent Task Crew Flow Tool Process 2.根据流程类型将任务分派给Agent
- 代理执行任务,可选择使用工具
- 任务输出作为上下文反馈到后续任务中
- 返回最终结果以及令牌使用指标上图显示了 CrewAI 的双模型架构:Crews 在单个工作流程中处理代理协作,而 Flows 提供事件驱动的主干,用于通过状态管理和条件路由链接多个工作人员。## 安装和设置### 先决条件CrewAI 需要 Python 3.10–3.13 以及至少一个 LLM 提供商提供的 API 密钥。```` bas h
python –version # 必须是 3.10、3.11、3.12 或 3.13
安装uv(推荐包管理器) #
卷曲-LsSf https://astral.sh/uv/install.sh | 嘘
### 安装 CrewAI
bas
h
安装CrewAI核心框架 #
uv pip 安装crewai# 或者使用可选的工具包 uv pip install ‘crewai[工具]’# 验证安装 克鲁瓦伊版 ````###``` bas h
安装CrewAI核心框架 #
uv pip 安装crewai
或者使用可选的工具包 #
uv pip install ‘crewai[工具]’
验证安装 #
克鲁瓦伊版
ncie
s
船员安装
````生成的项目结构:````
研究人员/
├── .gitignore
├── pyproject.toml
├── 自述文件.md
├── .env
└── 源文件/
└── 研究人员/
├── __init__.```
bas
h
# 搭建一个新的 CrewAI 项目
rewai创建船员research_crew
# 导航到项目
CD研究人员
# 安装项目依赖
船员安装
``` └── custom_tool.py
````### 配置环境变量````
bas
h
# .env — 将此文件添加到 .gitignore!
OPENAI_API_KEY=sk-your-openai-key-here
SERPER_API_KEY=您的serper-api-key
````对于```
研究人员/
├── .gitignore
├── pyproject.toml
├── 自述文件.md
├── .env
└── 源文件/
└── 研究人员/
├── __init__.py
├── main.py
├── 船员.py
├── 配置/
│ ├── Agents.yaml
│ └── 任务.yaml
└── 工具/
├── __init__.py
└── 自定义工具.py
``首席分析师
目标:>
对{topic}进行深入研究并收集
全面、准确且最新的信息。
背景故事:>
您是一位经验丰富的研究分析师,拥有 15 年的研究分析师经验
技术分析经验。 你发现晦涩难懂但是
关键数据点并综合复杂信息。
法学硕士:openai/gpt-4o
最大迭代次数:15```
bas
h
# .env — 将此文件添加到 .gitignore!
OPENAI_API_KEY=sk-your-openai-key-here
SERPER_API_KEY=您的serper-api-key
``一个
结构良好、引人入胜的文章。
背景故事:>
您是一位屡获殊荣的技术作家,擅长
无需牺牲 bash 即可访问复杂的主题
# 拉取本地模型
llama 拉 llama3.1
# 在代理配置中,使用:ollama/llama3.1
``高级内容编辑器
目标:>
审查并完善有关{topic}的文章以确保
事实准确性、语法和可读性。
背景故事:>
你是一位细心的编辑,有着 sh```
yam
l
# src/research_crew/config/agents.yaml
研究员:
角色:>
高级研究分析师
目标:>
对{topic}进行深入研究并收集
全面、准确且最新的信息。
背景故事:>
您是一位经验丰富的研究分析师,拥有 15 年的研究分析师经验
技术分析经验。 你发现晦涩难懂但是
关键数据点并综合复杂信息。
法学硕士:openai/gpt-4o
最大迭代数:15
详细:真实
作者:
角色:>
技术内容撰稿人
目标:>
将{topic}的研究成果转化为
结构良好、引人入胜的文章。
背景故事:>
您是一位屡获殊荣的技术作家,擅长
在不牺牲准确性的情况下使复杂的主题易于理解。
法学硕士:openai/gpt-4o
最大迭代次数:10
详细:真实
编辑:
角色:>
高级内容编辑
目标:>
审查并完善有关{topic}的文章以确保
事实准确性、语法和可读性。
背景故事:>
您是一位一丝不苟的编辑,对事实有着敏锐的洞察力
错误和逻辑不一致。
法学硕士:openai/gpt-4o-mini
最大迭代数:8
详细:真实
``找到主要发现的摘要。
代理人:研究员写作任务:
描述:>
使用提供的研究简介,写一份全面的
关于{topic}的技术文章。 目标1500字。
使用清晰的标题、示例和引人入胜的散文。
预期输出:>
一篇 Markdown 格式的文章,包含简介、正文
部分和结论。 最少 1500 字。
代理人:作家
上下文:[研究任务]编辑任务:
描述:>
编辑文章的清晰度、语法、事实准确性,
和可读性。 确保所有主张均得到
研究简介。
预期输出:>
完善的最终文章准备发表。
包括总结所做更改的编辑注释。
代理人:编辑
上下文:[写作任务]
输出文件:输出/final_article.md
````### 船员定义在 `src/research_crew/crew.py` 中连接代理和任务:````蟒蛇
# src/research_crew/crew.py
从crewai导入代理、人员、流程、任务
从crewai.project导入CrewBase、代理、船员、任务@CrewBase
班级研究人员:
“”“生产高质量文章的研究人员。”””Agents_config =“配置/agents.yaml”
任务配置=“配置/任务.yaml”@代理
def 研究员(自我)-> 代理:
返回代理(
config=self.agents_config["研究员"],
工具=[],
允许委托=假,
)@代理
def writer(self) -> 代理:
返回代理(
config=self.agents_config["作者"],
工具=[],
允许委托=假,
)@代理
def 编辑器(自己)-> 代理:
返回代理(
config=self.agents_config["编辑器"],
工具=[],
允许委托=假,
)@任务
def Research_task(self) -> 任务:```
yam
l
# src/research_crew/config/tasks.yaml
研究任务:
描述:>
研究主题:{topic}。 收集至少 10 个关键数据点
来自多个权威来源。 包括统计数据,
专家意见和最新进展。
预期输出:>
包含 10 多个数据点的结构化研究简介,来源
引文以及主要发现的摘要。
代理人:研究员
写作任务:
描述:>
使用提供的研究简介,写一份全面的
关于{topic}的技术文章。 目标1500字。
使用清晰的标题、示例和引人入胜的散文。
预期输出:>
一篇 Markdown 格式的文章,包含简介、正文
部分和结论。 最少 1500 字。
代理人:作家
上下文:[研究任务]
编辑任务:
描述:>
编辑文章的清晰度、语法、事实准确性,
和可读性。 确保所有主张均得到
研究简介。
预期输出:>
完善的最终文章准备发表。
包括总结所做更改的编辑注释。
代理人:编辑
上下文:[写作任务]
输出文件:输出/final_article.md
``输出:````js
o
n
[2026-05-20 10:23:15] 工作代理:高级研究分析师
[2026-05-20 10:23:15] 起始任务:研究主题:2026年人工智能编码助手...
...
[2026-05-20 10:24:02] 工作代理:技术内容作家
[2026-05-20 10:24:02] 启动任务:使用提供的研究简介......
...
[2026-05-20 10:25:18] 工作代理:高级内容编辑
...
==========最终输出==========
[完整编辑的文章出现在这里]
令牌使用情况:UsageMetrics(total_tokens = 18432,prompt_tokens = 14201,...)
````## 高级用法:流程、工具和生产模式### 使用 CrewAI 流程进行复杂编排流提供事件驱动的编排和状态管理:````蟒蛇
# src/research_crew/flow.py
fromcrewai.flow.flow import Flow,听,开始
从 pydantic 导入 BaseModel
从 Research_crew.crew 导入 ResearchCrew类 ArticleState(BaseModel):
主题:str =“”
字数:int = 0
最终文章:str =“”类 ArticleFlow(流[ArticleState]):@开始()
def get_topic(自身):
self.state.topic =“2026 年的多智能体人工智能框架”
print(f"主题的起始流程:{self.state.topic}")@听(获取主题)
def run_research_crew(自我):
````蟒蛇
# src/research_crew/crew.py
从crewai导入代理、人员、流程、任务
从crewai.project导入CrewBase、代理、船员、任务
@CrewBase
班级研究人员:
“”“生产高质量文章的研究人员。”””
Agents_config =“配置/agents.yaml”
任务配置=“配置/任务.yaml”
@代理
def 研究员(自我)-> 代理:
返回代理(
config=self.agents_config["研究员"],
工具=[],
允许委托=假,
)
@代理
def writer(self) -> 代理:
返回代理(
config=self.agents_config["作者"],
工具=[],
允许委托=假,
)
@代理
def 编辑器(自己)-> 代理:
返回代理(
config=self.agents_config["编辑器"],
工具=[],
允许委托=假,
)
@任务
def Research_task(self) -> 任务:
返回任务(配置= self.tasks_config [“research_task”])
@任务
defwriting_task(self) -> 任务:
返回任务(配置= self.tasks_config [“writing_task”])
@任务
def editor_task(self) -> 任务:
返回任务(
config=self.tasks_config["editing_task"],
输出文件=“输出/final_article.md”,
)
@船员
def 船员(自身)-> 船员:
返回船员(
代理= self.代理,
任务=自我.任务,
过程=过程.顺序,
详细=真,
)
````蟒蛇
@船员
def 船员(自身)-> 船员:
返回船员(
代理= self.代理,
任务=自我.任务,
流程=流程.分层,
manager_llm="openai/gpt-4o",
详细=真,
)
````### 使用 FastAPI 进行生产部署````蟒蛇
# api_server.py — 生产部署
从 fastapi 导入 FastAPI、BackgroundTasks
从 pydantic 导入 BaseModel
从 Research_crew.crew 导入 ResearchCrew
导入uuidapp = FastAPI(title="CrewAI 研究 API")
工作:字典={}类 CrewRequest(BaseModel):
主题:str@app.post(“/研究”)
async def start_research(请求:CrewRequest,背景:BackgroundTasks):
job_id = str(uuid.uuid4())
jobs[job_id] = {"status": "queued", "topic": request.topic}
背景.add_task(
lambda: run_crew(job_id, request.topic)
)
返回 {"job_id": job_id, "status": "queued"}@app.get("/status/{job_id}")
异步 def get_status(job_id: str):
return jobs.get(job_id, {"error": "作业未找到"})def run_crew(job_id: str, 主题: str):
职位[job_id][“状态”] =“正在运行”
结果 = ResearchCrew().crew().kickoff(inputs={"topic": topic})
职位[job_id][“状态”] =“已完成”
职位[job_id][“结果”] = result.raw# 运行:uvicorn api_server:app --host 0.0.0.0 --port 8000
````## 基准/实际用例### 性能基准:
“”“管理研究小组。”“”
输入 = {
"topic": "2026 年的人工智能编码助手"
}
结果= ResearchCrew().crew().kickoff(输入=输入)
print("\n\n==========最终输出==========\n")
打印(结果.raw)
print(f"\n令牌使用情况: {result.token_usage}")
如果 __name__ == "__main__":
运行()
`` 通往 hello-world 的线路 | 〜20 | 〜40 | 〜50 | 〜25 |
| 内置检查点| 部分| 没有 | 是(Postgres/Redis)| 没有 |
| 异步支持 | 是的 | 是的 | 是的 | 是的 |
| 本地法学硕士支持(Ollama)| 是的 | 是的 | 是的 | 是的 |### 现实世界用例**自动化研究报告:** 一家金融科技初创公司使用 CrewAI 生成每日市场分析报告。 研究代理抓取财务数据,分析代理识别趋势,作家代理生成“bash”
# 通过 CLI 执行
克鲁瓦伊润
# 或者直接用Python运行
python -m Research_crew.main
``` 博客文章团队:研究→写作→编辑→SEO 优化。 产量从 3 篇文章增加到 12 篇文章```js
o
n
[2026-05-20 10:23:15] 工作代理:高级研究分析师
[2026-05-20 10:23:15] 起始任务:研究主题:2026年人工智能编码助手...
...
[2026-05-20 10:24:02] 工作代理:技术内容作家
[2026-05-20 10:24:02] 启动任务:使用提供的研究简介......
...
[2026-05-20 10:25:18] 工作代理:高级内容编辑
...
==========最终输出==========
[完整编辑的文章出现在这里]
令牌使用情况:UsageMetrics(total_tokens = 18432,prompt_tokens = 14201,...)
```### Ollama(本地法学硕士)````
yam
l
研究员:
角色:研究分析师
法学硕士:ollama/llama3.1
# 需要:llama pull llama3.1
````### 浪链工具````蟒蛇
# 在 CrewAI 中使用 LangChain 工具
从 langchain_community.tools 导入 WikipediaQueryRun
从 langchain_community.utilities 导入 WikipediaAPIWrapper
来自crewai进口代理wiki_tool = WikipediaQueryRun(api_wrapper=WikipediaAPIWrapper())代理人 = 代理人(
角色=“研究员”,
目标=“彻底研究课题”,
tools=[wiki_tool], # LangChain工具直接运行
详细=真,
)
````### LlamaIndex(RAG 集成)````蟒蛇
from llama_index.core import VectorStoreIndex, SimpleDirectoryReade```
pytho
n
# src/research_crew/flow.py
fromcrewai.flow.flow import Flow,听,开始
从 pydantic 导入 BaseModel
从 Research_crew.crew 导入 ResearchCrew
类 ArticleState(BaseModel):
主题:str =“”
字数:int = 0
最终文章:str =“”
类 ArticleFlow(流[ArticleState]):
@开始()
def get_topic(自身):
self.state.topic =“2026 年的多智能体人工智能框架”
print(f"主题的起始流程:{self.state.topic}")
@听(获取主题)
def run_research_crew(自我):
结果 = ResearchCrew().crew().kickoff(
输入={“主题”:self.state.topic}
)
self.state.final_article = 结果.raw
self.state.word_count = len(result.raw.split())
@听(run_research_crew)
def validate_output(自身):
如果 self.state.word_count < 1000:
print("警告:文章太短,触发修改")
其他:
print(f"文章已验证:{self.state.word_count} 个字")
将 open("output/article.md", "w") 作为 f:
f.write(self.state.final_article)
如果 __name__ == "__main__":
文章流().kickoff()
```(5–6x) | 最佳 (1x) | 好 (1.2x) |
| 生产检查点 | 部分+CrewAI+ | 没有内置| 是(Postgres/Redis)| 没有 |
| 可观察性| CrewAI+(成长中)| 基本OTEL | 朗史密斯(深)| 最小 |
| 学习曲线| 低| 中等| 陡峭 | 低|
| 维护者势头| 活跃| 保养模式| 活跃| 活跃|
| 最适合 | 快速原型设计、基于角色的工作流程 | 研究、代码编写代理| 有状态的生产工作流程 | 简单的代理任务 |## 局限性/诚实评估**CrewAI 不适合做什么:**1. **复杂状态机:** 如果您的工作流程需要具有分支和时间旅行调试的循环图,那么 LangGraph 的显式图模型更适合。2. **超高量产:** 与 LangGraph 的全状态持久性相比,CrewAI 的检查点是部分的。 对于需要审计跟踪的数千次日常运行,LangGraph 经过了更多的考验。3. **对代币敏感的预算:** CrewAI 的代理默认情况下是冗长的。 在同等任务上,预计消耗的代币是 LangGraph 的 1.5-2 倍。 对于中等生产工作负载,预算为 100-500 美元/月。4. **实时延迟要求:**多代理编排添加```
pytho
n
# src/research_crew/tools/custom_tool.py
从crewai.tools导入工具
导入请求
@tool("网页搜索")
def web_search(查询: str) -> str:
"""在网络上搜索有关给定查询的信息。"""
# 与搜索 API 集成
响应 = requests.get(
“https://serpapi.com/search”,
params={"q": 查询, "api_key": "${SERPER_API_KEY}"}
)
返回response.json()["organic_results"][0]["snippet"]
pyenv
用于管理系统上的多个 Python 版本。**问:如何安装具有本地 LLM 支持的 CrewAI?** A:通过pip installcrewai`正常安装CrewAI,然后单独安装Ollama。 在您的代理配置中,设置“llm: ollama/llama3.1”(或您的首选型号)。 本地推理不需要 API 密钥。问:CrewAI 可以与非 OpenAI 模型一起使用吗?
答:是的。 CrewAI 支持任何 LiteLLM 兼容模型,包括 Anthropic Claude、Google Gemini、Azur```
pytho
n
在crew.py中,导入并附加 #
从 Research_crew.tools.custom_tool 导入 web_search
@代理
def 研究员(自我)-> 代理:
返回代理(
config=self.agents_config[“研究员”],
tools=[web_search], # 附加自定义工具
允许委托=假,
)
“流程是事件驱动的工作流程,通过条件逻辑、通过 Pydantic 模型进行状态管理和分支来链接多个工作人员。 使用 Crews 进行单工作流协作,使用 Flows 进行多阶段管道。问:在生产环境中运行 CrewAI 团队需要多少成本?
答:对于 3 名特工人员,GPT-4o 运行 100 次/ pytho n @船员 def 船员(自身)-> 船员: 返回船员( agents=self.agents, 任务=自我.任务, 流程=流程.分层, manager_llm="openai/gpt-4o", 详细=真, ) ``我调试的 CrewAI 代理结果很差?** 答:在代理上设置“verbose: true”以查看他们的思维过程。 使用 max_iter 来限制推理循环。 添加结构化输出模式以强制格式。 每次运行后查看令牌使用指标。 For
pytho
n
api_server.py — 生产部署 #
从 fastapi 导入 FastAPI、BackgroundTasks 从 pydantic 导入 BaseModel 从 Research_crew.crew 导入 ResearchCrew 导入uuid
app = FastAPI(title=“CrewAI 研究 API”) 工作:字典={}
类 CrewRequest(BaseModel): 主题:str
@app.post(“/研究”) async def start_research(请求:CrewRequest,背景:BackgroundTasks): job_id = str(uuid.uuid4()) jobs[job_id] = {“status”: “queued”, “topic”: request.topic} 背景.add_task( lambda: run_crew(job_id, request.topic) ) 返回 {“job_id”: job_id, “status”: “queued”}
@app.get("/status/{job_id}") 异步 def get_status(job_id: str): return jobs.get(job_id, {“error”: “作业未找到”})
def run_crew(job_id: str, 主题: str): 职位[job_id][“状态”] =“正在运行” 结果 = ResearchCrew().crew().kickoff(inputs={“topic”: topic}) 职位[job_id][“状态”] =“已完成” 职位[job_id][“结果”] = result.raw
运行:uvicorn api_server:app –host 0.0.0.0 –port 8000 #
agents.yaml 中的 ```
tinc
t
角色
4. 使用“crewai run”来运行你的团队
5. 加入 CrewAI 社区以获得支持和高级模式加入 Telegram 讨论:加入 dibi8.com 社区,了解多智能体 AI 技巧和生产部署策略。
推荐的托管和基础设施在将上述任何工具部署到生产环境之前,您需要坚实的基础设施。 dibi8实际使用和推荐的两个选项:- {< aff “digitalocean” “footer-cta-legacy” “DigitalOcean” >}} — 200 美元免费赠金,为期 60 天,覆盖全球 14 个以上区域。 运行开源人工智能工具的独立开发者的默认选项。 #
- {< aff “htstack” “footer-cta-legacy” “HTStack” >}} — 从中国大陆低延迟访问的香港 VPS。 这与托管 dibi8.com 的 IDC 是同一个 IDC——在生产中经过了实际考验。附属链接 - 它们不会花费您额外的费用,并且有助于保持 dibi8.com 的运行。## 资料来源和进一步阅读- CrewAI GitHub 存储库
- CrewAI 官方文档
- CrewAI 快速入门指南
- CrewAI Flows 文档
- CrewAI 工具参考
- LangGraph vs CrewAI vs AutoGen 比较 2026
- CrewAI 多代理教程 2026
- CrewAI + IBM watsonx 教程披露:本文包含附属链接。 如果您点击链接并进行购买,我们可能会收到佣金,您无需支付额外费用。 这有助于支持我们的独立技术研究、测试和免费教育内容的创建。 所有建议均基于我们自己对工具的评估。
参考文献和来源- CrewAI #
yam
l
# Agents.yaml — 每个代理的模型选择
研究员:
角色:研究分析师
法学硕士:人类/claude-sonnet-4-20250514
# 或:openai/gpt-4o
# 或:gemini/gemini-2.0-flash
yam l 研究员: 角色:研究分析师 法学硕士:ollama/llama3.1
需要:llama pull llama3.1 #
# 在 CrewAI 中使用 LangChain 工具
从 langchain_community.tools 导入 WikipediaQueryRun
从 langchain_community.utilities 导入 WikipediaAPIWrapper
来自crewai进口代理
wiki_tool = WikipediaQueryRun(api_wrapper=WikipediaAPIWrapper())
代理人 = 代理人(
角色=“研究员”,
目标=“彻底研究课题”,
tools=[wiki_tool], # LangChain工具直接运行
详细=真,
)
``````蟒蛇
从 llama_index.core 导入 VectorStoreIndex、SimpleDirectoryReader
从crewai.tools导入工具
# 建立RAG索引
@tool("文档搜索")
def document_search(查询: str) -> str:
"""搜索内部文档以获取相关信息。"""
文档 = SimpleDirectoryReader("./docs").load_data()
索引 = VectorStoreIndex.from_documents(文档)
query_engine = index.as_query_engine()
返回 str(query_engine.query(query))
dockerfil e
Dockerfile #
来自 python:3.12-slim
工作目录/应用程序 复制 pyproject.toml 。 复制 src/ ./src/
运行 pip installrewaicrewai-tools 运行crewai安装
曝光 8000
CMD [“crewai”,“运行”]
yam
l
# docker-compose.yml
版本:“3.8”
服务:
克鲁瓦伊:
构建: .
环境文件:.env
卷:
- ./输出:/应用程序/输出
端口:
- “8000:8000”
````
💬 留言讨论