前言

在我们已经探索了AutoGen的灵活对话和MetaGPT的结构化SOP之后,今天我们来认识一个新的多智能体框架:CrewAI。CrewAI的设计哲学介于两者之间,它强调通过角色扮演(Role-Playing)任务分配(Task Assignment)工具(Tools) 来实现智能体之间富有成效的协作。

CrewAI的核心理念是,你可以定义一组具有特定专长(角色)和工具的AI智能体,然后将一个复杂的目标分解成一系列任务,让这个“AI团队”(Crew)去自主完成。它的过程控制比AutoGen更强,但又比MetaGPT的固化SOP更灵活。

本文将带你入门CrewAI,通过一个实际的例子,看看如何组建一个AI研究团队来自动完成市场分析报告。

环境准备

1. 安装CrewAI

通过pip可以轻松安装CrewAI及其依赖:

pip install crewai crewai_tools

crewai_tools包提供了一些方便的预置工具,例如网页搜索。

2. 配置LLM Provider

与其它框架类似,CrewAI需要一个LLM。我们仍然以OpenAI为例。你只需要在运行脚本前设置好环境变量即可:

export OPENAI_API_KEY="sk-..."
# 如果需要使用代理
# export OPENAI_API_BASE="https://your-proxy-url/v1"

核心概念

  • Agents: 智能体是执行任务的核心。定义一个Agent时,你需要指定三个关键部分:
    • role: 角色名称,如“高级市场分析师”。
    • goal: 这个角色的核心目标,如“分析特定AI工具的市场趋势”。
    • backstory: 角色的背景故事,这有助于LLM更好地进行角色扮演,产出更符合身份的回答。
    • tools (可选): 该角色可以使用的工具,如搜索引擎。
  • Tasks: 任务是分配给Agent的具体工作单元。每个任务都有一个 description,清晰地描述了要做什么,以及一个 expected_output,告诉Agent完成任务后应该交付什么。
  • Tools: 工具是Agent与外部世界交互的桥梁。CrewAI可以轻松集成任何工具(例如LangChain Tools),最常用的是搜索工具,让Agent能够获取最新信息。
  • Crew: “船员”或“团队”,由一组Agents和一系列Tasks组成。你定义好Agents和Tasks后,将它们组合成一个Crew,然后 kickoff()启动任务,Crew会自主地协调Agents按顺序或并行地完成所有任务。

实战:组建AI市场分析团队

假设我们的目标是:“分析MetaGPT和AutoGen这两个AI智能体框架的最新发展和社区反馈,并生成一份对比报告。”

我们可以组建一个包含两个角色的AI团队:

  1. 研究员 (Researcher): 负责上网搜索信息。
  2. 分析师 (Analyst): 负责整合信息并撰写报告。

1. 导入并配置工具

首先,我们需要一个搜索工具。这里我们使用 SerperDevTool,它是一个简单易用的搜索API封装。你需要先获取一个API密钥。

import os
from crewai import Agent, Task, Crew, Process
from crewai_tools import SerperDevTool

# 为Serper API设置环境变量
os.environ["SERPER_API_KEY"] = "Your_Serper_API_Key"

# 初始化搜索工具
search_tool = SerperDevTool()

2. 定义Agents

现在我们来定义我们的AI团队成员。

# 定义“研究员”Agent
researcher = Agent(
  role='高级AI研究员',
  goal='发现和分析AutoGen和MetaGPT框架的最新技术进展、用例和社区讨论',
  backstory="""你是一位顶尖的AI研究员,在一家知名的科技智库工作。
  你擅长从网络上查找、筛选和整合关于新兴AI技术的深度信息。""",
  verbose=True, # 打印详细的执行过程
  allow_delegation=False, # 禁止该Agent将任务委托给其他Agent
  tools=[search_tool]
)

# 定义“分析师”Agent
analyst = Agent(
  role='首席技术分析师',
  goal='根据研究员收集到的信息,撰写一份关于AutoGen和MetaGPT的全面对比分析报告',
  backstory="""你是一位经验丰富的技术分析师,以能够将复杂的技术概念,
  以清晰、简洁、客观的方式呈现给技术和非技术背景的观众而闻名。""",
  verbose=True,
  allow_delegation=True # 允许在需要时进行任务委托
)

3. 创建Tasks

接下来,为每个Agent创建具体的任务。

# 创建研究任务
research_task = Task(
  description="""1. 搜索AutoGen和MetaGPT的官方文档、GitHub仓库和最近的博客文章,总结它们的核心功能和2024年的主要更新。
  2. 在Twitter、Reddit和技术论坛上搜索关于这两个框架的讨论,了解开发者的真实反馈和痛点。""",
  expected_output='一份详细的文档,包含两个框架的功能摘要、最新更新列表以及社区反馈的关键点总结。',
  agent=researcher
)

# 创建分析和报告撰写任务
analysis_task = Task(
  description="""使用研究员提供的文档,撰写一份详细的对比报告。报告应包括:
  - 引言:简要介绍两个框架。
  - 核心差异:从设计理念、灵活性、易用性等方面进行对比。
  - 社区反馈:总结各自的优缺点。
  - 结论:为不同的应用场景提供选择建议。""",
  expected_output='一份格式良好、结构清晰的Markdown格式对比分析报告。',
  agent=analyst
)

4. 组建并启动Crew

最后,将Agents和Tasks组合成一个Crew,然后启动它。

# 组建Crew
market_analysis_crew = Crew(
  agents=[researcher, analyst],
  tasks=[research_task, analysis_task],
  process=Process.sequential # 任务按顺序执行
)

# 启动任务
result = market_analysis_crew.kickoff()

print("######################")
print("## 最终报告:")
print(result)

当你运行这段代码,researcher会首先开始使用搜索工具收集信息,完成后,analyst会接手它的产出,并撰写最终的报告。整个过程全自动进行。

总结

CrewAI提供了一种强大而灵活的方式来组织多智能体协作。通过明确定义角色、目标和任务,我们可以构建出能够处理复杂工作流的自主AI团队。

  • AutoGen相比,CrewAI的流程控制更明确,通过任务依赖关系链引导协作,避免了漫无目的的对话。
  • MetaGPT相比,CrewAI更加灵活,你可以自定义任意角色和工作流,而不局限于内置的软件开发SOP。

这使得CrewAI非常适合需要创造性、研究性或动态工作流的任务,如内容创作、市场分析、复杂问题解决等。在下一篇文章中,我们将把目光从AI智能体框架移开,学习一个非常实用的Python库 Streamlit,看看如何用它快速构建数据应用的UI界面。