在人工智能快速发展的今天,单一 AI 模型已经无法满足复杂任务的需求。多智能体系统作为下一代 AI 应用的重要方向,正在改变我们解决问题的方式。CrewAI 作为一个创新的开源多智能体编排框架,为开发者提供了构建强大协作 AI 系统的工具。本文将深入介绍 CrewAI 的核心概念、架构设计和基础使用方法
一、什么是 Crew AI?
Crew AI是由 João Moura 开发的开源多智能体编排框架,它的主要目的是通过协调多个 AI 智能体的协作来完成复杂任务。CrewAI 模拟了现实世界中的工作团队,让不同角色的智能体能够自主地相互委派任务和交流,从而实现比单一语言模型更强大的性能表现
二、CrewAI 的核心优势
智能协作:代理之间可以自主协作、委派任务和共享信息
内容创作:支持研究 + 撰写 + 编辑的完整协作流程
灵活扩展:可以轻松集成各种工具和服务
企业级支持:提供企业版功能,满足生产环境需求
三、Crew AI 核心组件详解
CrewAI 框架由四个核心组件构成,这些组件协同工作,构建了一个完整的多智能体协作系统
1、Agent(代理)
Agent 是 CrewAI 系统中的基本执行单元,每个智能体都有特定的角色、目标和背景故事,可以执行定制的任务并使用各种功能工具
Agent 的关键属性:
① 角色(Role):定义智能体的专业领域和职责
② 目标(Goal):明确智能体需要完成的具体任务
③ 背景故事(Backstory):为智能体提供上下文和专业背景
④ 工具(Tools):智能体可以使用的功能工具集合
⑤ 语言模型(LLM):驱动智能体思考和决策的大语言模型
创建 Agent 示例:
from crewai import Agent
from langchain.chat_models import ChatOpenAI
# 创建语言模型实例
llm = ChatOpenAI(model="gpt-3.5-turbo")
# 定义研究代理
research_agent = Agent(
role="高级研究员",
goal="深入研究指定主题并提供全面的分析报告",
backstory="你是一位经验丰富的研究员,擅长从多个角度分析复杂问题,能够快速识别关键信息和趋势。",
tools=[search_tool, analysis_tool],
llm=llm,
verbose=True
)
2、Task(任务)
Task 是为了解决特定问题或完成特定目标而设计的工作单元。每个任务都有明确的描述、预期输出和执行代理
Task 的关键属性:
① 描述(Description):详细说明任务内容和要求
② 预期输出(Expected Output):明确任务完成后的交付物
③ 执行代理(Agent):负责执行该任务的智能体
④ 优先级(Priority):任务的重要程度和执行顺序
⑤ 依赖关系(Dependencies):与其他任务的关联关系
创建 Task 示例:
from crewai import Task
# 定义研究任务
research_task = Task(
description="研究2024年人工智能发展趋势,重点关注多智能体系统和大语言模型的最新进展",
expected_output="一份详细的研究报告,包含主要趋势、关键技术和应用案例",
agent=research_agent,
priority=1
)
3、Crew(团队)
Crew 是 Agent 和 Task 的组织结构,负责协调整个工作流程。团队定义了智能体之间的协作关系和任务执行顺序
Crew 的关键属性:
① 代理列表(Agents):团队中的智能体集合
② 任务列表(Tasks):团队需要完成的任务集合
③ 执行流程(Process):任务执行的顺序和方式
④ 状态管理(State Management):跟踪和管理任务执行状态
⑤ 错误处理(Error Handling):处理执行过程中的异常情况
创建 Crew 示例:
from crewai import Crew, Process
# 创建团队
ai_research_team = Crew(
agents=[research_agent, writing_agent, editing_agent],
tasks=[research_task, writing_task, editing_task],
process=Process.sequential, # 顺序执行任务
verbose=True
)
4、Flow(流程)
Flow 提供更精细的工作流控制,支持条件逻辑、循环和状态管理。流程允许开发者创建复杂的业务逻辑和工作流自动化
Flow 的核心特性:
① 状态管理:在任务之间共享和管理数据
② 条件逻辑:根据不同条件执行不同的任务路径
③ 循环机制:支持重复执行任务直到满足条件
④ 事件驱动:基于事件触发任务执行
⑤ 并行执行:支持多个任务同时执行
Flow 的装饰器:
① @start():标记流程的起始方法
② @router():定义条件路由逻辑
③ @task():标记具体的任务方法
四、安装与环境配置
系统要求:
- Python 3.8 或更高版本
- 支持的操作系统:Windows、macOS、Linux
- 网络连接(用于访问 LLM API)
安装步骤
使用 pip 安装:
pip install crewai
安装开发版本:
pip install git+https://github.com/joaomdmoura/crewai.git
基础配置
import os
from crewai import CrewAI
# 设置API密钥
os.environ["OPENAI_API_KEY"] = "your-api-key"
# 初始化CrewAI
crewai = CrewAI()
五、工作流程详解:
CrewAI 的工作流程定义了智能体如何协作完成任务。框架提供了两种主要的执行流程:
1、顺序执行(Sequential)
任务按照定义的顺序依次执行,每个任务必须等待前一个任务完成后才能开始
from crewai import Process
# 创建顺序执行的团队
sequential_team = Crew(
agents=[agent1, agent2, agent3],
tasks=[task1, task2, task3],
process=Process.sequential
)
2、分层执行(Hierarchical)
任务按照层次结构执行,高层任务可以委派子任务给其他智能体
# 创建分层执行的团队
hierarchical_team = Crew(
agents=[manager_agent, worker_agent1, worker_agent2],
tasks=[main_task, subtask1, subtask2],
process=Process.hierarchical
)
基本使用示例:
让我们通过一个简单的示例来展示 CrewAI 的基本使用方法:
内容创作团队示例
from crewai import Agent, Task, Crew, Process
from langchain.chat_models import ChatOpenAI
from crewai.tools import SerperDevTool
# 初始化工具
search_tool = SerperDevTool()
# 初始化语言模型
llm = ChatOpenAI(model="gpt-3.5-turbo")
# 1. 创建智能体
researcher = Agent(
role="技术研究员",
goal="深入研究指定的技术主题",
backstory="你是一位技术专家,擅长快速理解复杂的技术概念并提供清晰的解释。",
tools=[search_tool],
llm=llm,
verbose=True
)
writer = Agent(
role="技术作家",
goal="将复杂的技术信息转化为通俗易懂的文章",
backstory="你是一位经验丰富的技术作家,擅长用简单的语言解释复杂的技术概念。",
llm=llm,
verbose=True
)
editor = Agent(
role="内容编辑",
goal="确保文章质量和可读性",
backstory="你是一位专业的内容编辑,擅长改进文章结构和语言表达。",
llm=llm,
verbose=True
)
# 2. 创建任务
research_task = Task(
description="研究CrewAI框架的核心功能和使用方法",
expected_output="一份详细的技术研究报告,包含CrewAI的核心概念、架构和应用场景",
agent=researcher
)
writing_task = Task(
description="根据研究报告撰写一篇技术介绍文章",
expected_output="一篇结构清晰、语言通俗易懂的技术文章",
agent=writer
)
editing_task = Task(
description="编辑和优化技术文章",
expected_output="最终的技术文章,确保内容准确、结构合理、语言流畅",
agent=editor
)
# 3. 创建团队
content_team = Crew(
agents=[researcher, writer, editor],
tasks=[research_task, writing_task, editing_task],
process=Process.sequential,
verbose=True
)
# 4. 执行任务
result = content_team.kickoff()
print(result)

被折叠的 条评论
为什么被折叠?



