🚢 AI船员协作框架

CrewAI 完整教程

让AI代理像专业团队一样协作

⭐ 22K+ Stars 👥 角色驱动 🎯 任务编排 🚀 简单易用

💡 CrewAI核心概念

🚢 船员隐喻(Crew Metaphor)

CrewAI使用"船员"概念:每个Agent是船员,有明确的角色(Role)目标(Goal)背景(Backstory)。 多个船员组成船队(Crew),协作完成任务(Task)

🎭 三要素定义Agent

  • Role:角色身份(如"资深数据分析师")
  • Goal:工作目标(如"分析数据找出趋势")
  • Backstory:背景故事(如"有10年经验...")

📋 任务编排

  • Description:任务描述
  • Expected Output:期望输出
  • Agent:负责的船员

🆚 CrewAI vs AutoGen

特性 CrewAI AutoGen
核心理念 角色和任务驱动 对话驱动
学习难度 简单(概念清晰) 中等
任务编排 Sequential/Hierarchical GroupChat
代码执行 支持工具调用 原生支持,更强大
适用场景 任务明确的协作 探索性问题解决

💡 选择建议:任务清晰、角色明确选CrewAI;需要代码执行和探索性对话选AutoGen

🚀 快速开始

📦 安装CrewAI

# 基础安装
pip install crewai

# 包含工具支持
pip install 'crewai[tools]'

# 配置OpenAI API Key
export OPENAI_API_KEY='your-api-key'

🎯 创建第一个Crew

from crewai import Agent, Task, Crew, Process

# 1. 定义Agent(船员)
researcher = Agent(
    role='研究员',
    goal='收集关于AI的最新信息',
    backstory='你是一位经验丰富的AI研究员,擅长找到最新最准确的信息',
    verbose=True,
    allow_delegation=False
)

writer = Agent(
    role='技术作家',
    goal='将研究结果撰写成易懂的文章',
    backstory='你是一位优秀的技术作家,善于用简单语言解释复杂概念',
    verbose=True,
    allow_delegation=False
)

# 2. 定义Task(任务)
research_task = Task(
    description='研究2024年AI发展的最新趋势,重点关注大语言模型',
    expected_output='一份详细的研究报告,包含关键趋势和数据',
    agent=researcher
)

write_task = Task(
    description='基于研究结果,撰写一篇科普文章',
    expected_output='一篇1000字的科普文章,通俗易懂',
    agent=writer
)

# 3. 组建Crew(船队)
crew = Crew(
    agents=[researcher, writer],
    tasks=[research_task, write_task],
    process=Process.sequential,  # 顺序执行
    verbose=2
)

# 4. 启动!
result = crew.kickoff()
print(result)

✅ 执行流程:

  1. 1. 研究员执行research_task,收集信息
  2. 2. 将研究结果传递给写作任务
  3. 3. 作家执行write_task,撰写文章
  4. 4. 返回最终文章

🧩 CrewAI核心功能

🔧 给Agent配备工具

from crewai_tools import (
    SerperDevTool,  # 网络搜索
    ScrapeWebsiteTool,  # 网页抓取
    FileReadTool,  # 读取文件
    DirectoryReadTool  # 读取目录
)

# 配置工具
search_tool = SerperDevTool()
scrape_tool = ScrapeWebsiteTool()

# Agent配备工具
researcher = Agent(
    role='研究员',
    goal='收集信息',
    tools=[search_tool, scrape_tool],  # 可以搜索和抓取
    verbose=True
)

# 自定义工具
from crewai_tools import tool

@tool("计算器")
def calculator(expression: str) -> str:
    """计算数学表达式"""
    try:
        result = eval(expression)
        return f"计算结果:{result}"
    except:
        return "计算错误"

analyst = Agent(
    role='数据分析师',
    goal='分析数据',
    tools=[calculator],
    verbose=True
)

🔗 任务依赖关系

任务可以依赖前序任务的输出

task1 = Task(
    description='分析用户需求',
    expected_output='需求分析文档',
    agent=analyst
)

task2 = Task(
    description='基于需求分析,设计系统架构',
    expected_output='架构设计文档',
    agent=architect,
    context=[task1]  # 依赖task1的输出
)

task3 = Task(
    description='根据架构设计,编写代码',
    expected_output='完整代码',
    agent=developer,
    context=[task2]  # 依赖task2的输出
)

crew = Crew(
    agents=[analyst, architect, developer],
    tasks=[task1, task2, task3],
    process=Process.sequential
)

👨‍💼 层级流程(Hierarchical)

Manager Agent负责分配任务和协调

crew = Crew(
    agents=[researcher, analyst, writer],
    tasks=[task1, task2, task3],
    process=Process.hierarchical,  # 层级模式
    manager_llm="gpt-4"  # Manager使用的模型
)

# Manager自动:
# 1. 分析任务优先级
# 2. 分配给合适的Agent
# 3. 协调Agent之间的沟通
# 4. 确保任务按时完成

💼 实战案例

案例1:AI内容创作团队

从选题到发布的完整内容创作流程

from crewai import Agent, Task, Crew
from crewai_tools import SerperDevTool

search_tool = SerperDevTool()

# 定义团队成员
topic_researcher = Agent(
    role='选题策划',
    goal='找到热门且有价值的话题',
    backstory='你有敏锐的市场洞察力,知道读者喜欢什么',
    tools=[search_tool],
    verbose=True
)

content_writer = Agent(
    role='内容撰写',
    goal='撰写高质量的原创文章',
    backstory='你是一位经验丰富的内容创作者,文笔优美',
    verbose=True
)

seo_expert = Agent(
    role='SEO专家',
    goal='优化文章的搜索引擎排名',
    backstory='你精通SEO,知道如何让文章获得更多流量',
    verbose=True
)

# 定义工作流
task1 = Task(
    description='研究当前AI领域的热点话题,选择3个最有潜力的',
    expected_output='3个话题及其潜力分析',
    agent=topic_researcher
)

task2 = Task(
    description='选择第一个话题,撰写一篇1500字的深度文章',
    expected_output='完整文章,包含引言、正文、结论',
    agent=content_writer
)

task3 = Task(
    description='优化文章的SEO,添加关键词、meta描述、标题优化建议',
    expected_output='SEO优化建议和优化后的文章',
    agent=seo_expert
)

# 组建团队
content_crew = Crew(
    agents=[topic_researcher, content_writer, seo_expert],
    tasks=[task1, task2, task3],
    process=Process.sequential,
    verbose=2
)

# 开始工作
result = content_crew.kickoff()
print(result)

案例2:AI软件开发团队

需求分析 → 设计 → 开发 → 测试 完整流程

# 产品经理
pm = Agent(
    role='产品经理',
    goal='分析用户需求,编写产品需求文档',
    backstory='你有丰富的产品经验,善于把握用户痛点'
)

# 架构师
architect = Agent(
    role='系统架构师',
    goal='设计系统架构和技术方案',
    backstory='你是资深架构师,精通各种设计模式'
)

# 开发工程师
developer = Agent(
    role='全栈工程师',
    goal='实现系统功能',
    backstory='你精通Python和JavaScript,代码质量高'
)

# 测试工程师
tester = Agent(
    role='测试工程师',
    goal='编写测试用例,确保质量',
    backstory='你有强迫症,不放过任何bug'
)

# 定义开发流程
tasks = [
    Task(
        description='分析用户需求:构建一个TODO应用',
        expected_output='PRD文档',
        agent=pm
    ),
    Task(
        description='设计系统架构和数据库结构',
        expected_output='架构设计文档和ER图',
        agent=architect
    ),
    Task(
        description='实现后端API和前端界面',
        expected_output='完整代码',
        agent=developer
    ),
    Task(
        description='编写单元测试和集成测试',
        expected_output='测试代码',
        agent=tester
    )
]

dev_crew = Crew(
    agents=[pm, architect, developer, tester],
    tasks=tasks,
    process=Process.sequential
)

result = dev_crew.kickoff()

🎓 高级特性

🔄 Agent委托(Delegation)

Agent可以将子任务委托给其他Agent

manager = Agent(
    role='项目经理',
    goal='协调团队完成项目',
    backstory='你善于分配任务和协调资源',
    allow_delegation=True  # 允许委托
)

# Manager可以说:
# "我需要研究员帮我调研一下市场"
# "程序员,请实现这个功能"

⚡ 异步执行

# 并行执行多个任务
import asyncio

async def run_crew():
    result = await crew.kickoff_async()
    return result

# 运行
result = asyncio.run(run_crew())

🧠 Agent记忆

agent = Agent(
    role='助手',
    goal='帮助用户',
    memory=True,  # 启用记忆
    verbose=True
)

# Agent会记住之前的对话

📋 结构化输出

from pydantic import BaseModel

class ArticleOutput(BaseModel):
    title: str
    content: str
    tags: list[str]

task = Task(
    description='写文章',
    expected_output='结构化文章',
    output_pydantic=ArticleOutput,
    agent=writer
)

⭐ 最佳实践

✅ 推荐做法

  • 角色具体化:给Agent明确的专业领域和背景
  • 任务清晰:expected_output要具体明确
  • 工具精选:只给必要的工具,避免混乱
  • 控制规模:3-5个Agent最佳

❌ 常见陷阱

  • 角色重叠:避免多个Agent职责相同
  • 任务模糊:描述要具体,不要"帮我做某事"
  • 过度委托:委托链太长会低效
  • 忽略成本:多Agent对话消耗大量Token

❓ 常见问题

Q1: CrewAI适合什么场景?

特别适合:

  • • 任务可以拆分为明确步骤
  • • 需要不同专业角色协作
  • • 有清晰的输入和输出
  • • 流程相对固定

Q2: 如何让Agent更智能?

  • • 丰富backstory,给Agent个性和经验
  • • 提供合适的工具
  • • 使用gpt-4而非gpt-3.5
  • • 启用memory让Agent学习

Q3: 执行时间太长怎么办?

  • • 减少任务数量和Agent数量
  • • 缩短expected_output
  • • 使用max_iter限制迭代次数
  • • 考虑使用更快的模型

开始使用CrewAI

组建你的第一支AI团队