前言
在我们已经探索了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团队:
- 研究员 (Researcher): 负责上网搜索信息。
- 分析师 (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界面。
...