构建你的第一个 Crew
通过分步教程,创建一个能够协作解决复杂问题的 AI 团队。
释放协作式 AI 的力量
想象一下,你拥有一支由专业化 AI Agent 组成的团队,它们能够无缝协作来解决复杂问题,每个 Agent 都贡献自己独特的技能,以实现共同目标。这正是 CrewAI 的强大之处 —— 它是一个能够让你创建协作式 AI 系统的框架,使其完成远超单个 AI 独立完成能力的任务。
在本指南中,我们将一步步创建一个 research crew,帮助我们研究和分析某个主题,并最终生成一份全面报告。这个实践示例展示了 AI Agent 如何通过协作完成复杂任务,但这也只是 CrewAI 潜力的开始。
你将构建并学到什么
在本指南结束时,你将:
- 创建一支专业化 AI 研究团队,让每个成员拥有不同的角色与职责
- 编排多个 AI Agent 之间的协作
- 自动化一个复杂工作流,包括信息收集、分析和报告生成
- 掌握基础技能,并将其应用到更宏大的项目中
虽然本指南中构建的是一个简单的研究 crew,但相同的模式和技术同样可以用于创建更加复杂的团队,例如:
- 由专业写作者、编辑和事实核查员组成的多阶段内容创作团队
- 具有分层支持 Agent 的复杂客服系统
- 能够收集数据、生成可视化并输出洞察的自治商业分析团队
- 负责构思、设计和实施规划的产品开发团队
现在就开始构建你的第一个 crew 吧!
前置要求
在开始之前,请确保你已经:
第 1 步:创建一个新的 CrewAI 项目
首先,使用 CLI 创建一个新的 CrewAI 项目。该命令会为你生成完整的项目结构和所有必要文件,让你能够把精力集中在定义 Agent 和任务上,而不是编写样板代码。
crewai create crew research_crewcd research_crew
这将生成一个包含基础结构的项目,以便你构建自己的 crew。CLI 会自动创建:
- 项目目录及必要文件
- Agent 和任务的配置文件
- 基础的 crew 实现
- 用于运行 crew 的主脚本
第 2 步:了解项目结构
让我们先花一点时间了解一下 CLI 创建出的项目结构。CrewAI 遵循 Python 项目的最佳实践,这使得随着你的 crew 变得越来越复杂,你的代码仍然易于维护和扩展。
research_crew/├── .gitignore├── pyproject.toml├── README.md├── .env└── src/└── research_crew/├── __init__.py├── main.py├── crew.py├── tools/│ ├── custom_tool.py│ └── __init__.py└── config/├── agents.yaml└── tasks.yaml
这个结构遵循了 Python 项目的最佳实践,也让你的代码组织更清晰。将配置文件(YAML)与实现代码(Python)分离,可以让你在不修改底层代码的情况下轻松调整 crew 的行为。
第 3 步:配置你的 Agent
现在到了有趣的部分 —— 定义你的 AI Agent!在 CrewAI 中,Agent 是具有特定角色、目标和背景故事的专业化实体,这些要素会共同塑造它们的行为。你可以把它们看作一部戏中的角色,每个角色都有自己的个性与使命。
对于我们的 research crew,我们将创建两个 Agent:
- 一个擅长查找和整理信息的 researcher
- 一个能够解读研究结果并撰写有洞察力报告的 analyst
让我们修改 agents.yaml 文件来定义这些专业化 Agent。请务必将 llm 设置为你正在使用的提供方。
# src/research_crew/config/agents.yamlresearcher:role: >Senior Research Specialist for {topic}goal: >Find comprehensive and accurate information about {topic}with a focus on recent developments and key insightsbackstory: >You are an experienced research specialist with a talent forfinding relevant information from various sources. You excel atorganizing information in a clear and structured manner, makingcomplex topics accessible to others.llm: provider/model-id # e.g. openai/gpt-4o, google/gemini-2.0-flash, anthropic/claude...analyst:role: >Data Analyst and Report Writer for {topic}goal: >Analyze research findings and create a comprehensive, well-structuredreport that presents insights in a clear and engaging waybackstory: >You are a skilled analyst with a background in data interpretationand technical writing. You have a talent for identifying patternsand extracting meaningful insights from research data, thencommunicating those insights effectively through well-crafted reports.llm: provider/model-id # e.g. openai/gpt-4o, google/gemini-2.0-flash, anthropic/claude...
请注意,每个 Agent 都有各自独特的角色、目标和背景故事。这些元素不仅仅是描述性的 —— 它们会真实地影响 Agent 处理任务的方式。只要精心设计这些内容,你就能创建出具有专业技能和独特视角、彼此互补的 Agent。
第 4 步:定义你的任务
定义好 Agent 之后,我们还需要为它们分配具体任务。CrewAI 中的任务表示 Agent 实际要执行的工作,包含详细说明和预期输出。
对于我们的 research crew,我们将定义两个主要任务:
- 一个用于收集全面信息的 research task
- 一个用于撰写有洞察力报告的 analysis task
让我们修改 tasks.yaml 文件:
# src/research_crew/config/tasks.yamlresearch_task:description: >Conduct thorough research on {topic}. Focus on:1. Key concepts and definitions2. Historical development and recent trends3. Major challenges and opportunities4. Notable applications or case studies5. Future outlook and potential developmentsMake sure to organize your findings in a structured format with clear sections.expected_output: >A comprehensive research document with well-organized sections coveringall the requested aspects of {topic}. Include specific facts, figures,and examples where relevant.agent: researcheranalysis_task:description: >Analyze the research findings and create a comprehensive report on {topic}.Your report should:1. Begin with an executive summary2. Include all key information from the research3. Provide insightful analysis of trends and patterns4. Offer recommendations or future considerations5. Be formatted in a professional, easy-to-read style with clear headingsexpected_output: >A polished, professional report on {topic} that presents the researchfindings with added analysis and insights. The report should be well-structuredwith an executive summary, main sections, and conclusion.agent: analystcontext:- research_taskoutput_file: output/report.md
请注意 analysis task 中的 context 字段 —— 这是一个非常强大的功能,它允许 analyst 访问 research task 的输出结果。这样就形成了一个工作流,让信息能够像人类团队协作那样,自然地在 Agent 之间流转。
第 5 步:配置你的 Crew
现在,是时候把所有内容整合起来,配置我们的 crew 了。crew 是一个容器,用于编排 Agent 如何协作完成任务。
让我们修改 crew.py 文件:
# src/research_crew/crew.pyfrom crewai import Agent, Crew, Process, Taskfrom crewai.project import CrewBase, agent, crew, taskfrom crewai_tools import SerperDevToolfrom crewai.agents.agent_builder.base_agent import BaseAgentfrom typing import List@CrewBaseclass ResearchCrew():"""Research crew for comprehensive topic analysis and reporting"""agents: List[BaseAgent]tasks: List[Task]@agentdef researcher(self) -> Agent:return Agent(config=self.agents_config['researcher'], # type: ignore[index]verbose=True,tools=[SerperDevTool()])@agentdef analyst(self) -> Agent:return Agent(config=self.agents_config['analyst'], # type: ignore[index]verbose=True)@taskdef research_task(self) -> Task:return Task(config=self.tasks_config['research_task'] # type: ignore[index])@taskdef analysis_task(self) -> Task:return Task(config=self.tasks_config['analysis_task'], # type: ignore[index]output_file='output/report.md')@crewdef crew(self) -> Crew:"""Creates the research crew"""return Crew(agents=self.agents,tasks=self.tasks,process=Process.sequential,verbose=True,)
在这段代码中,我们做了以下事情:
- 创建 researcher Agent,并为其配置 SerperDevTool 用于网页搜索
- 创建 analyst Agent
- 设置 research 和 analysis 两个任务
- 将 crew 配置为按顺序执行任务(也就是 analyst 会等待 researcher 完成后再开始)
这正是魔法发生的地方 —— 只需几行代码,我们就定义了一个协作式 AI 系统,让多个专业化 Agent 以协调的流程共同工作。
第 6 步:设置主脚本
接下来,我们要设置运行 crew 的主脚本。在这里,我们会提供 crew 要研究的具体主题。
#!/usr/bin/env python# src/research_crew/main.pyimport osfrom research_crew.crew import ResearchCrew# Create output directory if it doesn't existos.makedirs('output', exist_ok=True)def run():"""Run the research crew."""inputs = {'topic': 'Artificial Intelligence in Healthcare'}# Create and run the crewresult = ResearchCrew().crew().kickoff(inputs=inputs)# Print the resultprint("\n\n=== FINAL REPORT ===\n\n")print(result.raw)print("\n\nReport has been saved to output/report.md")if __name__ == "__main__":run()
这个脚本会准备运行环境、指定研究主题,并启动 crew 的执行。CrewAI 的强大之处,在于这段代码看起来非常简单 —— 多个 AI Agent 的复杂协作管理,都由框架本身处理好了。
第 7 步:设置环境变量
在项目根目录中创建一个 .env 文件,并填入你的 API Key:
SERPER_API_KEY=your_serper_api_key# Add your provider's API key here too.
关于如何配置你所使用的提供方,请参考 LLM 配置指南。你可以在 Serper.dev 获取 Serper API Key。
第 8 步:安装依赖
使用 CrewAI CLI 安装所需依赖:
crewai install
该命令会:
- 读取项目配置中的依赖项
- 在需要时创建虚拟环境
- 安装所有必需的软件包
第 9 步:运行你的 Crew
现在到了激动人心的时刻 —— 是时候运行你的 crew,亲眼看看 AI 协作是如何工作的了!
crewai run
运行这个命令后,你将看到 crew 开始运作。researcher 会收集指定主题的信息,随后 analyst 会基于这些研究结果撰写一份全面报告。你将实时看到这些 Agent 的思考过程、动作和输出,以及它们如何协同完成任务。
第 10 步:查看输出结果
当 crew 完成工作后,你可以在 output/report.md 文件中找到最终报告。报告将包括:
- 执行摘要
- 关于主题的详细信息
- 分析与洞察
- 建议或未来展望
请花一点时间体会一下你已经完成的事情 —— 你创建了一个由多个 AI Agent 协作完成复杂任务的系统,每个 Agent 都贡献了自己的专业能力,从而产出了超越单个 AI 独立完成水平的结果。
探索其他 CLI 命令
CrewAI 还提供了若干其他实用 CLI 命令,帮助你更方便地使用 crew:
# 查看所有可用命令crewai --help# 运行 crewcrewai run# 测试 crewcrewai test# 重置 crew 记忆crewai reset-memories# 从指定任务重放crewai replay -t <task_id>
想象的边界:超越你的第一个 Crew
你在本指南中构建的,只是一个开始。你所学到的技能和模式,可以应用到越来越复杂的 AI 系统中。下面是一些扩展这个基础 research crew 的方式:
扩展你的 Crew
你可以为 crew 添加更多专业化 Agent:
- 一个用于验证研究结果的 fact-checker
- 一个用于创建图表和可视化的 data visualizer
- 一个在特定领域拥有深度知识的 domain expert
- 一个用于发现分析弱点的 critic
增加工具与能力
你可以为 Agent 增强更多工具能力:
- 用于实时研究的网页浏览工具
- 用于数据分析的 CSV / 数据库工具
- 用于数据处理的代码执行工具
- 连接外部服务的 API 工具
创建更复杂的工作流
你可以实现更复杂的流程:
- 由 manager Agent 委派任务给 worker Agent 的层级式流程
- 带有反馈循环以持续优化的迭代流程
- 多个 Agent 同时工作的并行流程
- 根据中间结果动态调整的流程
应用于不同领域
相同的模式也可用于构建不同类型的 crew:
- 内容创作:写作者、编辑、事实核查员和设计师协作
- 客户服务:分流 Agent、专业支持 Agent 和质检 Agent 协作
- 产品开发:研究员、设计师和规划人员协作
- 数据分析:数据采集人员、分析师和可视化专家协作
下一步
现在你已经构建了第一个 crew,接下来你可以:
- 尝试不同的 Agent 配置和个性设定
- 尝试更复杂的任务结构和工作流
- 实现自定义工具,为 Agent 增加新能力
- 将你的 crew 应用到不同主题或问题领域
- 探索 CrewAI Flows,以通过过程式编程构建更高级的工作流
恭喜!你已经成功构建了你的第一个 CrewAI crew,它能够研究并分析你提供的任意主题。这次基础实践已经让你具备了创建更复杂 AI 系统的能力,使其能够通过协作式智能来应对复杂的多阶段问题。
