1. CrewAI智能体框架概述
CrewAI是一个专注于多智能体协作的开源框架,它通过模块化设计让开发者能够像搭积木一样构建复杂的智能体工作流。这个框架特别适合需要多个AI角色协同完成任务的场景,比如内容创作、数据分析、流程自动化等。
与传统的端到端AI系统不同,CrewAI采用了更灵活的组件化架构。它主要由四个核心模块组成:
- Agent(智能体):具有特定角色、目标和记忆的AI实体
- Task(任务):智能体需要完成的具体工作项
- Tool(工具):智能体执行任务时使用的辅助手段
- Crew(团队):协调多个智能体共同工作的容器
提示:CrewAI支持多种大模型后端,包括OpenAI API和本地部署的Ollama,这为不同预算和隐私要求的项目提供了灵活性。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与安装
2.1 Python环境配置
建议使用Miniconda管理Python环境,避免依赖冲突:
bash复制conda create -n crewai_env python=3.10 -y
conda activate crewai_env
2.2 框架安装
安装CrewAI核心包及其依赖:
bash复制pip install crewai
2.3 大模型后端选择
根据项目需求选择合适的大模型后端:
| 后端类型 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| OpenAI API | 模型强大,无需本地资源 | 需要API密钥,有使用成本 | 快速原型开发 |
| Ollama本地 | 数据隐私性好,无网络依赖 | 需要本地计算资源 | 敏感数据处理 |
如果选择Ollama本地部署,推荐使用7B参数量的模型如Qwen2-7B,在性能和资源消耗间取得平衡。
3. 构建写作智能体系统
3.1 系统架构设计
我们将创建一个由两个智能体组成的写作流水线:
- 构思者(Ideator):负责生成故事大纲和创意
- 写作者(Writer):根据大纲创作完整故事
这种分工模拟了人类创作团队的工作模式,每个角色专注于自己擅长的部分。
3.2 智能体定义实现
3.2.1 构思者智能体
python复制from crewai import Agent
ideator = Agent(
role="儿童故事构思专家",
goal="根据给定主题创作富有想象力的故事构思",
backstory="一位资深儿童文学编辑,擅长将简单主题转化为引人入胜的故事框架",
allow_delegation=False,
verbose=True
)
关键参数说明:
role:定义智能体的专业领域goal:明确智能体的核心目标backstory:提供上下文,影响生成风格allow_delegation:控制是否允许任务委派
3.2.2 写作者智能体
python复制writer = Agent(
role="儿童文学作家",
goal="将故事构思转化为生动有趣的完整故事",
backstory="获奖儿童文学作家,擅长用简单语言讲述深刻道理",
allow_delegation=False,
verbose=True
)
3.3 任务定义与分配
3.3.1 构思任务
python复制from crewai import Task
ideation_task = Task(
description="基于{topic}主题,创作一个适合6-8岁儿童的绘本故事构思",
expected_output="包含故事主要角色、情节发展和寓意的完整构思框架(300-500字)",
agent=ideator
)
3.3.2 写作任务
python复制writing_task = Task(
description="将提供的构思转化为完整的儿童故事",
expected_output="适合6-8岁儿童阅读的完整故事(800-1000字),语言生动有趣",
agent=writer
)
注意:任务描述中使用{topic}作为占位符,实际运行时会被具体主题替换。
4. 团队协作与执行
4.1 创建智能体团队
python复制from crewai import Crew
story_crew = Crew(
agents=[ideator, writer],
tasks=[ideation_task, writing_task],
verbose=2
)
4.2 执行工作流
python复制result = story_crew.kickoff(inputs={"topic": "友谊与分享"})
print(result)
执行过程会显示每个智能体的思考过程:
- 构思者接收主题并生成大纲
- 写作者接收大纲并创作完整故事
- 系统返回最终故事内容
4.3 输出优化技巧
为提高输出质量,可以:
- 在任务描述中添加具体要求(如字数、风格)
- 使用模板规范输出格式
- 设置温度参数控制创造性(0.7-1.0较适合创意写作)
5. 常见问题与解决方案
5.1 输出质量不稳定
问题现象:相同输入产生差异很大的输出
解决方案:
- 完善智能体的backstory提供更多上下文
- 在任务描述中添加更具体的限制条件
- 调整大模型的temperature参数(建议0.7-0.9)
5.2 任务衔接不畅
问题现象:后序任务无法正确理解前序任务的输出
解决方案:
- 在前序任务的expected_output中明确要求结构化输出
- 添加中间处理步骤对输出进行格式校验
- 使用JSON等结构化格式传递数据
5.3 执行时间过长
问题现象:简单任务耗时超出预期
解决方案:
- 检查模型是否本地部署且资源充足
- 限制每个任务的max_iter参数(默认值可能过高)
- 对于复杂工作流考虑异步执行模式
6. 进阶应用方向
6.1 多智能体并行工作
CrewAI支持更复杂的流程设计,比如:
- 竞争模式:多个智能体独立完成相同任务,选择最佳结果
- 评审模式:专门智能体负责质量把控
- 分层协作:管理者智能体协调多个执行者
6.2 自定义工具集成
可以为智能体开发专用工具:
python复制from crewai_tools import tool
@tool("字数统计器")
def word_counter(text: str) -> int:
"""统计文本字数"""
return len(text.split())
writer.tools = [word_counter]
6.3 记忆与上下文管理
通过实现自定义记忆模块,可以让智能体记住历史交互:
python复制from crewai import Memory
class CustomMemory(Memory):
def store(self, key, value):
# 自定义存储逻辑
pass
def retrieve(self, key):
# 自定义检索逻辑
pass
agent.memory = CustomMemory()
在实际项目中,我发现定义清晰的智能体角色边界至关重要。一个常见误区是让单个智能体承担过多职责,这往往会导致输出质量下降。比较好的实践是为每个关键能力点创建专门的智能体,然后通过精心设计的任务流程将它们串联起来。
