简介
多智能体AI系统代表了AI自动化的下一个演进方向。与单个AI处理所有事务不同,专业智能体各自拥有不同的角色、目标和工具,通过协作更有效地解决复杂任务。
CrewAI是一个让构建此类系统变得简单的Python框架。在本教程中,你将构建一个研究团队,自动调查技术主题、分析市场趋势并生成专业报告。
你将学到
- 从零搭建CrewAI项目
- 定义具有专业角色和工具的智能体
- 创建具有依赖关系和预期输出的任务
- 编排多智能体工作流
- 集成Web搜索和自定义工具
- Python 3.10+
- OpenAI API密钥
- Python基础知识
前提条件
---
步骤1: 环境搭建
创建新项目并安装依赖:
mkdir tech-research-crew && cd tech-research-crew
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install crewai crewai-tools langchain-openai python-dotenv
创建.env文件存放API密钥:
# .env
OPENAI_API_KEY=sk-your-api-key-here
SERPER_API_KEY=your-serper-key-here # 用于Web搜索
---
步骤2: 定义智能体
创建agents.py — 每个智能体有角色、目标和背景故事:
# agents.py
from crewai import Agent
from crewai_tools import SerperDevTool, WebsiteSearchTool
# 工具
search_tool = SerperDevTool()
web_tool = WebsiteSearchTool()
# 智能体1: 研究专家
researcher = Agent(
role="高级技术研究员",
goal="寻找关于新兴技术的全面、准确信息",
backstory="""你是一位在顶级咨询公司拥有15年经验的资深技术研究员。
你擅长寻找可靠来源、识别关键趋势,并区分炒作与实质。""",
tools=[search_tool, web_tool],
verbose=True,
allow_delegation=False,
max_iter=5,
)
# 智能体2: 数据分析师
analyst = Agent(
role="技术市场分析师",
goal="分析技术趋势并提供数据驱动的洞察",
backstory="""你是一位专注于技术市场分析的数据驱动型分析师。
你将原始研究转化为可执行的洞察,识别模式并做出基于证据的预测。""",
verbose=True,
allow_delegation=False,
)
# 智能体3: 技术写手
writer = Agent(
role="高级技术写手",
goal="创建清晰、引人入胜且结构良好的技术报告",
backstory="""你是一位以将复杂主题变得易懂而闻名的获奖技术写手。
你创建的报告让高管和工程师都觉得有价值。""",
verbose=True,
allow_delegation=False,
)
---
步骤3: 创建任务
创建tasks.py — 任务定义每个智能体应完成的工作:
# tasks.py
from crewai import Task
from agents import researcher, analyst, writer
def create_research_tasks(topic: str):
"""为给定主题创建研究任务序列"""
# 任务1: 研究
research_task = Task(
description=f"""对以下主题进行彻底研究: {topic}
研究内容:
1. 技术现状
2. 关键参与者和公司
3. 最新发展(过去6个月)
4. 用例和实际应用
5. 技术挑战和局限性
提供所有来源的URL。""",
expected_output="""详细的研究文档:
- 执行摘要(2-3句)
- 关键发现(5-7条)
- 各研究领域的详细章节
- 用于验证的来源URL""",
agent=researcher,
)
# 任务2: 分析(依赖研究结果)
analysis_task = Task(
description=f"""分析研究发现: {topic}
分析内容:
1. SWOT分析
2. 市场采用时间线预测
3. 竞争技术对比
4. 企业采用风险评估
5. 早期采用者的ROI潜力""",
expected_output="""结构化分析文档:
- SWOT矩阵
- 采用时间线(含阶段)
- 竞品对比表
- 风险矩阵
- ROI预测""",
agent=analyst,
context=[research_task],
)
# 任务3: 报告撰写(依赖前两个任务)
writing_task = Task(
description=f"""撰写专业技术报告: {topic}
报告要求:
1. 以执行摘要开头
2. 按逻辑顺序呈现发现
3. 包含分析框架
4. 提供可执行的建议
5. 以下一步行动结束
格式: Markdown,使用清晰的标题、列表和表格""",
expected_output="""完善的Markdown报告(2000-3000字):
- 标题和日期
- 执行摘要
- 研究发现
- 分析与洞察
- 建议(按优先级)
- 来源附录""",
agent=writer,
context=[research_task, analysis_task],
output_file="output/report.md",
)
return [research_task, analysis_task, writing_task]
---
步骤4: 组装Crew
创建main.py — 编排层:
# main.py
import os
from dotenv import load_dotenv
from crewai import Crew, Process
from agents import researcher, analyst, writer
from tasks import create_research_tasks
load_dotenv()
os.makedirs("output", exist_ok=True)
def run_research_crew(topic: str):
tasks = create_research_tasks(topic)
crew = Crew(
agents=[researcher, analyst, writer],
tasks=tasks,
process=Process.sequential,
verbose=True,
memory=True,
max_rpm=10,
)
result = crew.kickoff()
print(f"\n报告已保存至: output/report.md")
print(f"使用Token数: {crew.usage_metrics}")
return result
if __name__ == "__main__":
topic = input("输入研究主题: ") or "企业中的AI智能体"
result = run_research_crew(topic)
---
步骤5: 添加自定义工具
创建tools.py扩展智能体能力:
# tools.py
from crewai_tools import tool
import json
from datetime import datetime
@tool("保存JSON报告")
def save_json_report(content: str, filename: str) -> str:
"""将结构化数据保存为JSON报告文件。
Args:
content: JSON字符串格式的报告内容
filename: 输出文件名(不含扩展名)
"""
try:
data = json.loads(content)
except json.JSONDecodeError:
data = {"raw_content": content}
report = {
"generated_at": datetime.now().isoformat(),
"data": data,
}
filepath = f"output/{filename}.json"
with open(filepath, "w") as f:
json.dump(report, f, indent=2, ensure_ascii=False)
return f"报告已保存至 {filepath}"
---
步骤6: 高级 — 层级流程
对于复杂工作流,使用管理者智能体进行委派:
# hierarchical_crew.py
from crewai import Crew, Process
from langchain_openai import ChatOpenAI
manager_llm = ChatOpenAI(model="gpt-4o", temperature=0.1)
crew = Crew(
agents=[researcher, analyst, writer],
tasks=tasks,
process=Process.hierarchical,
manager_llm=manager_llm,
verbose=True,
)
result = crew.kickoff()
在层级模式下,CrewAI自动创建管理者智能体,负责任务分配和质量控制。
---
步骤7: 运行测试
python main.py
# 输出示例:
# > Agent: 高级技术研究员
# > Task: 正在调研AI智能体...
# > 使用工具: 互联网搜索
# > ...
# > CREW EXECUTION COMPLETE
# > 报告已保存至: output/report.md
---
核心概念总结
| 概念 | 说明 |
|------|------|
| Agent | 拥有角色、目标和工具的自主AI实体 |
| Task | 具有预期输出和上下文的具体任务 |
| Crew | 协作完成任务的智能体团队 |
| Process | 执行策略(顺序或层级) |
| Tools | 智能体与外界交互的函数 |
| Memory | 跨任务执行持久化的共享上下文 |
---
最佳实践
1. 明确角色 — 给智能体窄而清晰的角色定义
2. 清晰预期 — 精确定义expected_output
3. 任务依赖 — 使用context链接任务并传递信息
4. 速率限制 — 设置max_rpm避免API限流
5. 错误处理 — 设置max_iter防止无限循环
6. 模型选择 — 复杂推理用GPT-4o,简单任务用GPT-3.5
---
参考资源
Techsfree出品 — 您的技术创新合作伙伴