释放协作式人工智能的力量

想象一下,拥有一支由专业 AI 代理组成的团队,他们无缝协作解决复杂问题,每个代理贡献其独特技能以实现共同目标。这就是 CrewAI 的力量——一个使你能够创建协作式 AI 系统、完成单个 AI 无法单独完成的任务的框架。

在本指南中,我们将逐步创建一个研究 Crew,它将帮助我们研究和分析一个主题,然后生成一份全面的报告。这个实际示例展示了 AI 代理如何协作完成复杂任务,但这只是 CrewAI 可能实现的开端。

你将构建和学习什么

通过本指南的学习,你将:

  1. 创建一支具有独特角色和职责的专业 AI 研究团队
  2. 协调多个 AI 代理之间的协作
  3. 自动化一个涉及信息收集、分析和报告生成的复杂工作流程
  4. 建立可应用于更宏大项目的基础技能

虽然我们在本指南中构建的是一个简单的研究 Crew,但相同的模式和技术可应用于创建更复杂的团队,以完成诸如以下任务:

  • 多阶段内容创作,由专业作家、编辑和事实核查员协作完成
  • 分级支持代理组成的复杂客户服务系统
  • 收集数据、创建可视化并生成洞见的自主业务分析师
  • 进行构思、设计和规划实施的产品开发团队

让我们开始构建你的第一个 Crew 吧!

先决条件

在开始之前,请确保你已具备以下条件:

  1. 按照安装指南安装了 CrewAI
  2. 按照LLM 设置指南在你的环境中设置了 LLM API 密钥
  3. 对 Python 有基本的了解

步骤 1:创建一个新的 CrewAI 项目

首先,让我们使用 CLI 创建一个新的 CrewAI 项目。此命令将设置一个完整的项目结构,包含所有必要文件,让你能够专注于定义代理及其任务,而不是设置样板代码。

crewai create crew research_crew
cd research_crew

这将生成一个包含你的 Crew 所需基本结构的项目。CLI 会自动创建:

  • 包含必要文件的项目目录
  • 代理和任务的配置文件
  • 基本的 Crew 实现
  • 运行 Crew 的主脚本

CrewAI 框架概览

步骤 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:配置你的代理

现在进入有趣的部分——定义你的 AI 代理!在 CrewAI 中,代理是具有特定角色、目标和背景故事的专业实体,这些塑造了它们的行为。可以将它们视为戏剧中的角色,每个角色都有自己的个性和目的。

对于我们的研究 Crew,我们将创建两个代理:

  1. 一名擅长查找和组织信息的研究员
  2. 一名能够解读研究结果并创建有深度报告的分析师

让我们修改 agents.yaml 文件来定义这些专业代理。请确保将 llm 设置为你使用的提供商。

# src/research_crew/config/agents.yaml
researcher:
  role: >
    Senior Research Specialist for {topic}
  goal: >
    Find comprehensive and accurate information about {topic}
    with a focus on recent developments and key insights
  backstory: >
    You are an experienced research specialist with a talent for
    finding relevant information from various sources. You excel at
    organizing information in a clear and structured manner, making
    complex 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-structured
    report that presents insights in a clear and engaging way
  backstory: >
    You are a skilled analyst with a background in data interpretation
    and technical writing. You have a talent for identifying patterns
    and extracting meaningful insights from research data, then
    communicating those insights effectively through well-crafted reports.
  llm: provider/model-id  # e.g. openai/gpt-4o, google/gemini-2.0-flash, anthropic/claude...

注意每个代理都有独特的角色、目标和背景故事。这些元素不仅仅是描述性的——它们积极塑造了代理执行任务的方式。通过精心设计这些要素,你可以创建具有专业技能和互补视角的代理。

步骤 4:定义你的任务

定义好代理后,我们现在需要给它们分配具体的任务。CrewAI 中的任务代表代理将要执行的具体工作,包含详细的指示和期望的输出。

对于我们的研究 Crew,我们将定义两个主要任务:

  1. 一项用于收集全面信息的研究任务
  2. 一项用于创建有深度报告的分析任务

让我们修改 tasks.yaml 文件

# src/research_crew/config/tasks.yaml
research_task:
  description: >
    Conduct thorough research on {topic}. Focus on:
    1. Key concepts and definitions
    2. Historical development and recent trends
    3. Major challenges and opportunities
    4. Notable applications or case studies
    5. Future outlook and potential developments

    Make sure to organize your findings in a structured format with clear sections.
  expected_output: >
    A comprehensive research document with well-organized sections covering
    all the requested aspects of {topic}. Include specific facts, figures,
    and examples where relevant.
  agent: researcher

analysis_task:
  description: >
    Analyze the research findings and create a comprehensive report on {topic}.
    Your report should:
    1. Begin with an executive summary
    2. Include all key information from the research
    3. Provide insightful analysis of trends and patterns
    4. Offer recommendations or future considerations
    5. Be formatted in a professional, easy-to-read style with clear headings
  expected_output: >
    A polished, professional report on {topic} that presents the research
    findings with added analysis and insights. The report should be well-structured
    with an executive summary, main sections, and conclusion.
  agent: analyst
  context:
    - research_task
  output_file: output/report.md

注意分析任务中的 context 字段——这是一个强大的特性,允许分析师访问研究任务的输出。这创建了一个工作流程,信息在代理之间自然流动,就像在人类团队中一样。

步骤 5:配置你的 Crew

现在是将所有内容整合在一起的时候了,通过配置我们的 Crew。Crew 是协调代理如何协作完成任务的容器。

让我们修改 crew.py 文件

# src/research_crew/crew.py
from crewai import Agent, Crew, Process, Task
from crewai.project import CrewBase, agent, crew, task
from crewai_tools import SerperDevTool
from crewai.agents.agent_builder.base_agent import BaseAgent
from typing import List

@CrewBase
class ResearchCrew():
    """Research crew for comprehensive topic analysis and reporting"""

    agents: List[BaseAgent]
    tasks: List[Task]

    @agent
    def researcher(self) -> Agent:
        return Agent(
            config=self.agents_config['researcher'], # type: ignore[index]
            verbose=True,
            tools=[SerperDevTool()]
        )

    @agent
    def analyst(self) -> Agent:
        return Agent(
            config=self.agents_config['analyst'], # type: ignore[index]
            verbose=True
        )

    @task
    def research_task(self) -> Task:
        return Task(
            config=self.tasks_config['research_task'] # type: ignore[index]
        )

    @task
    def analysis_task(self) -> Task:
        return Task(
            config=self.tasks_config['analysis_task'], # type: ignore[index]
            output_file='output/report.md'
        )

    @crew
    def crew(self) -> Crew:
        """Creates the research crew"""
        return Crew(
            agents=self.agents,
            tasks=self.tasks,
            process=Process.sequential,
            verbose=True,
        )

在这段代码中,我们正在进行以下操作:

  1. 创建研究员代理并为其配备 SerperDevTool 以搜索网页
  2. 创建分析师代理
  3. 设置研究和分析任务
  4. 配置 Crew 按顺序运行任务(分析师将等待研究员完成)

神奇之处就在于此——只需几行代码,我们就定义了一个协作式 AI 系统,其中专业代理在协调的流程中协同工作。

步骤 6:设置你的主脚本

现在,让我们设置运行 Crew 的主脚本。在这里,我们提供希望 Crew 研究的具体主题。

#!/usr/bin/env python
# src/research_crew/main.py
import os
from research_crew.crew import ResearchCrew

# Create output directory if it doesn't exist
os.makedirs('output', exist_ok=True)

def run():
    """
    Run the research crew.
    """
    inputs = {
        'topic': 'Artificial Intelligence in Healthcare'
    }

    # Create and run the crew
    result = ResearchCrew().crew().kickoff(inputs=inputs)

    # Print the result
    print("\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 代理的所有复杂性都由框架处理。

步骤 7:设置你的环境变量

在你的项目根目录中创建一个 .env 文件,包含你的 API 密钥

SERPER_API_KEY=your_serper_api_key
# Add your provider's API key here too.

有关配置你选择的提供商的详细信息,请参阅LLM 设置指南。你可以从Serper.dev获取 Serper API 密钥。

步骤 8:安装依赖

使用 CrewAI CLI 安装所需的依赖

crewai install

此命令将:

  1. 从你的项目配置中读取依赖
  2. 如果需要,创建虚拟环境
  3. 安装所有必需的包

步骤 9:运行你的 Crew

现在到了激动人心的时刻——是时候运行你的 Crew,看看 AI 协作实际运作了!

crewai run

当你运行此命令时,你会看到你的 Crew 活跃起来。研究员将收集关于指定主题的信息,然后分析师将根据该研究创建一份全面的报告。当它们一起完成任务时,你将实时看到代理的思考过程、行动和输出。

步骤 10:查看输出

Crew 完成工作后,你将在 output/report.md 文件中找到最终报告。报告将包括:

  1. 执行摘要
  2. 关于主题的详细信息
  3. 分析和洞见
  4. 建议或未来考量

花点时间欣赏你所取得的成就——你创建了一个系统,其中多个 AI 代理协作完成一项复杂任务,每个代理贡献其专业技能,产生的结果远超任何单个代理所能单独实现。

探索其他 CLI 命令

CrewAI 提供了其他一些用于处理 Crew 的实用 CLI 命令

# View all available commands
crewai --help

# Run the crew
crewai run

# Test the crew
crewai test

# Reset crew memories
crewai reset-memories

# Replay from a specific task
crewai replay -t <task_id>

可能性的艺术:超越你的第一个 Crew

你在本指南中构建的只是个开始。你所学的技能和模式可以应用于创建日益复杂的 AI 系统。以下是一些扩展此基本研究 Crew 的方法:

扩展你的 Crew

你可以向你的 Crew 添加更多专业代理:

  • 一名用于验证研究结果的事实核查员
  • 一名用于创建图表的数据可视化师
  • 一名在特定领域拥有专业知识的领域专家
  • 一名用于找出分析中弱点的评论员

添加工具和功能

你可以使用额外的工具来增强你的代理:

  • 用于实时研究的网页浏览工具
  • 用于数据分析的 CSV/数据库工具
  • 用于数据处理的代码执行工具
  • 连接外部服务的 API

创建更复杂的工作流程

你可以实现更复杂的流程:

  • 分层流程,其中管理器代理将任务委托给工作代理
  • 带有反馈循环的迭代流程,用于改进
  • 并行流程,多个代理同时工作
  • 根据中间结果动态调整的流程

应用于不同领域

同样的模式可以应用于创建用于以下领域的 Crew:

  • 内容创作:作家、编辑、事实核查员和设计师协同工作
  • 客户服务:分诊代理、专家和质量控制人员协同工作
  • 产品开发:研究员、设计师和规划师协作
  • 数据分析:数据收集者、分析师和可视化专家

下一步

既然你已经构建了你的第一个 Crew,你可以尝试:

  1. 尝试不同的代理配置和个性
  2. 尝试更复杂的任务结构和工作流程
  3. 实现自定义工具,赋予你的代理新功能
  4. 将你的 Crew 应用于不同的主题或问题领域
  5. 探索CrewAI 流程,以实现更高级的、带有过程式编程的工作流程

恭喜!你已成功构建了你的第一个 CrewAI Crew,它能够研究和分析你提供的任何主题。这一基础经验为你提供了技能,使你能够创建日益复杂的 AI 系统,通过协作智能解决复杂的多阶段问题。