# 使用 CrewAI 构建多智能体协作 AI 系统
## 背景介绍
单一智能体(Agent)处理复杂任务时常常力不从心。比如你要完成一篇技术博客,需要有人查资料、有人写内容、有人审稿件——这种情况在人类工作中很常见,现在也可以通过多智能体系统来实现。
CrewAI 是一个 Python 框架,专门用于构建多智能体协作系统。它允许你创建多个具有不同角色的智能体,让它们协同工作。与简单的 LLM 调用不同,CrewAI 提供了任务分解、角色扮演、协作机制等完整功能。
本文将详细介绍如何使用 CrewAI 构建多智能体系统。通过一个「技术博客文章生成器」的完整案例,展示从环境配置到代码运行的全过程。
## 问题描述
在开发中,我经常遇到这些问题:
1. 单一 LLM 难以处理多步骤任务。让 GPT-4 直接写一篇技术文章,它可能把握不好结构、语气和深度的平衡。
2. 缺少任务分解和协作机制。当需要多个人参与时,传统方式需要大量提示词来模拟协作,效率很低。
3. 缺乏灵活的执行控制。复杂任务可能需要串行执行、并行执行或条件分支,在简单的 API 调用中很难实现。
CrewAI 提供了任务(Task)、智能体(Agent)、工具(Tools)和流程(Process)等核心概念,让你能够像搭积木一样构建多智能体系统。
## 详细步骤
### 第一步:环境配置
安装 CrewAI 及其依赖。建议使用 Python 3.10 或更高版本。
“`bash
pip install crewai crewai-tools
“`
如果需要使用特定的 LLM 提供商,还需要安装对应的包。例如,使用 OpenAI:
“`bash
pip install openai
“`
或者使用 Ollama 连接本地模型:
“`bash
pip install langchain-ollama
“`
### 第二步:定义智能体
在 CrewAI 中,智能体是完成任务的主体。每个智能体有以下关键属性:
– role:角色名称
– goal:最终目标
– backstory:背景故事(帮助 LLM 理解角色)
– verbose:是否输出详细日志
– allow_delegation:是否允许委托任务
– tools:可使用的工具
### 第三步:定义任务
任务是智能体需要完成的具体工作。任务可以指定:
– description:任务描述
– expected_output:期望的输出格式
– agent:负责执行的智能体
– tools:任务专用的工具
### 第四步:创建流程并执行
CrewAI 支持两种流程模式:
– Sequential(串行):任务按顺序执行
– Hierarchical(层级):类似公司组织架构
## 完整代码示例
这是一个完整的技术博客文章生成器示例,包含三个智能体:研究员、写手和审稿人。
“`python
import os
from crewai import Agent, Task, Crew, Process
from langchain_openai import ChatOpenAI
from crewai_tools import SerperDevTool, WebsiteSearchTool
# 设置 API Key
os.environ[“OPENAI_API_KEY”] = “your-api-key-here”
# 初始化 LLM
llm = ChatOpenAI(
model=”gpt-4o”,
temperature=0.7
)
# 定义搜索工具
search_tool = SerperDevTool()
web_search_tool = WebsiteSearchTool()
# 创建研究员智能体
researcher = Agent(
role=”高级技术研究员”,
goal=”收集并整理关于指定技术主题的最新信息和行业动态”,
backstory=”””你是一位资深技术研究员,在科技行业有10年以上的工作经验。
你擅长追踪最新技术趋势,能够快速理解和分析复杂的技术概念。
你写过大量高质量的技术研究报告,深受开发者社区好评。”””,
verbose=True,
allow_delegation=False,
tools=[search_tool, web_search_tool],
llm=llm
)
# 创建写手智能体
writer = Agent(
role=”技术博客写手”,
goal=”根据研究员收集的资料,撰写引人入胜的技术博客文章”,
backstory=”””你是一位知名的技术博客作者,以深入浅出的写作风格著称。
你擅长将复杂的技术概念转化为通俗易懂的文章,同时保持内容的专业性。
你的文章在开发者社区有很高的阅读量和好评。”””,
verbose=True,
allow_delegation=False,
llm=llm
)
# 创建审稿人智能体
reviewer = Agent(
role=”技术编辑审稿人”,
goal=”审核文章质量,确保内容准确、结构清晰、语言流畅”,
backstory=”””你是一位严谨的技术编辑,在科技媒体工作多年。
你对技术文章的准确性有很高的要求,擅长发现文章中的逻辑漏洞
和表达问题。你的审稿意见中肯实用,帮助作者提升文章质量。”””,
verbose=True,
allow_delegation=False,
llm=llm
)
# 创建任务
research_task = Task(
description=”””研究以下主题的技术细节和应用场景:
主题:LLM(大语言模型)在代码生成中的应用
请收集:
1. 最新的研究和论文
2. 主流工具和框架
3. 实际应用案例
4. 未来的发展趋势”””,
expected_output=”一份详细的技术研究摘要,包含至少5个关键点和3个实际案例”,
agent=researcher
)
writing_task = Task(
description=”””根据研究员提供的资料,撰写一篇技术博客文章。
要求:
1. 标题吸引人
2. 内容深入浅出
3. 包含代码示例
4. 字数在1500字以上
5. 结构清晰,有引言、主体和结论”””,
expected_output=”一篇完整的Markdown格式技术博客文章”,
agent=writer
)
review_task = Task(
description=”””审核写手完成的文章,检查以下方面:
1. 内容准确性
2. 逻辑连贯性
3. 语言流畅度
4. 代码正确性
5. SEO优化
如果发现问题,提出具体的修改建议。”””,
expected_output=”一份详细的审稿报告,包含评分和修改建议”,
agent=reviewer
)
# 创建 Crew
crew = Crew(
agents=[researcher, writer, reviewer],
tasks=[research_task, writing_task, review_task],
process=Process.sequential, # 串行执行
verbose=True
)
# 执行
result = crew.kickoff()
print(“=” * 50)
print(“最终结果:”)
print(result)
“`
### 使用 Ollama 本地模型
如果你想使用本地模型运行,可以这样配置:
“`python
from langchain_ollama import ChatOllama
# 使用 Ollama 的本地模型
llm = ChatOllama(
model=”qwen2.5:14b”,
temperature=0.7
)
# 其他代码保持不变
“`
### 自定义工具示例
除了使用内置工具,你还可以创建自定义工具:
“`python
from crewai.tools import BaseTool
from pydantic import Field
class CustomSearchTool(BaseTool):
name: str = Field(description=”工具名称”)
description: str = Field(description=”工具描述”)
def _run(self, query: str) -> str:
# 实现搜索逻辑
return f”搜索结果: {query}”
# 使用自定义工具
custom_tool = CustomSearchTool(
name=”custom_search”,
description=”自定义搜索引擎”
)
agent = Agent(
role=”角色名”,
goal=”目标”,
tools=[custom_tool],
llm=llm
)
“`
## 运行结果
运行上述代码后,你会看到以下输出:
“`
# Researcher 阶段
> 正在执行任务:研究 LLM 在代码生成中的应用
> 正在使用工具:SerperDevTool
> 搜索结果:[收集到最新的 Codex、Copilot 相关研究]
# Writer 阶段
> 正在执行任务:撰写技术博客文章
> 正在分析研究员提供的资料
> 文章结构已确定:引言、核心技术、代码示例、案例分析、总结
> 正在撰写正文…
# Reviewer 阶段
> 正在执行任务:审核文章
> 正在检查内容准确性:通过
> 正在检查语言流畅度:发现几处可改进的地方
> 审稿完成,建议如下…
# 最终输出
最终生成的文章包含约 2000 字,内容涵盖 LLM 代码生成的基本原理、
主流工具对比、详细的代码示例以及未来展望。文章结构清晰,
语言流畅,得到了审稿人的积极评价。
“`
## 总结
CrewAI 框架的核心概念和使用方法并不复杂,但它确实能解决实际问题。
主要优势有几点:
– 它简化了多智能体系统的开发流程。通过 Agent、Task、Crew 这些抽象概念,开发者可以快速搭建 AI 协作系统。
– 它提供了任务编排能力。串行和层级两种流程模式可以满足不同的场景需求。任务之间可以传递信息,形成完整的工作流。
– 它内置了工具系统。开发者可以集成各种搜索、API 和自定义工具。
– 它支持多种 LLM 后端。OpenAI、Anthropic 还是本地的 Ollama 都可以接入。
实际应用中,CrewAI 适合这些场景:复杂的内容创作、多步骤的数据分析、需要不同专业知识协作的项目管理、需要多人审核的工作流程。
多智能体协作确实将成为构建更强大 AI 应用的主流方式。CrewAI 为开发者提供了一个起点。建议读者动手实践,探索 CrewAI 的更多可能性。
如果要进一步深入,可以尝试:添加更多专业角色的智能体、集成向量数据库实现 RAG、构建层级式的组织结构、部署到生产环境。