使用 CrewAI 构建多智能体协作 AI 系统 – 完整指南

# 使用 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、构建层级式的组织结构、部署到生产环境。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇