1. CrewAI 原理与介绍

1.1 什么是 CrewAI

CrewAI 是一个开源的多智能体(Multi-Agent)编排框架,专为构建自主协作的 AI 智能体团队而设计。它提供了一种结构化的方法来创建、管理和协调多个专业化的 AI 智能体,使它们能够协作完成复杂的任务,而无需人工干预。

1.2 核心设计理念

CrewAI 基于以下核心设计理念:

  • 基于角色的代理设计(Role-Based Agent Design):每个智能体通过定义特定的角色、目标、背景故事和专业知识来实现专业化分工
  • 自主任务委派(Autonomous Task Delegation):框架内置智能任务分配机制,根据智能体的能力和角色自动将任务分配给最合适的智能体
  • 智能体协作(Agent Collaboration):提供框架支持智能体之间的自主通信、知识共享和结果传递,实现真正的团队协作
  • 简化编排(Simplified Orchestration):通过直观的 API 和抽象层,简化多智能体系统的构建和管理复杂度

1.3 技术架构

CrewAI 采用分层架构设计:

┌─────────────────────────────────────┐
│        应用层 (Application)          │
│   用户定义 Crew、Agent、Task         │
└─────────────────────────────────────┘
┌─────────────────────────────────────┐
│        编排层 (Orchestration)        │
│   任务分配、流程控制、结果聚合        │
└─────────────────────────────────────┘
┌─────────────────────────────────────┐
│        执行层 (Execution)            │
│   LLM 调用、工具执行、状态管理        │
└─────────────────────────────────────┘
┌─────────────────────────────────────┐
│        基础设施层 (Infrastructure)    │
│   LLM Provider、Memory、Storage      │
└─────────────────────────────────────┘

1.4 版本信息

数据来源:PyPI (2025-12)

  • CrewAI 最新版本1.7.2
  • LangGraph 最新版本1.0.5
  • Python 版本要求:Python 3.10+
  • 主要依赖:LangChain, Pydantic, OpenAI/Anthropic 等

2. CrewAI 数据流向

2.1 整体数据流架构

CrewAI 的数据流向遵循以下流程:

用户输入/请求

Crew 接收任务

任务分解与规划

任务分配器

Agent 1

Agent 2

Agent 3

LLM 调用

工具调用

LLM 调用

工具调用

LLM 调用

工具调用

结果生成

结果生成

结果生成

结果聚合器

任务协调器

是否完成?

最终输出

用户接收结果

2.2 详细数据流说明

阶段 1:任务接收与分解
  • 输入:用户请求(自然语言或结构化任务)
  • 处理:Crew 接收任务,根据任务复杂度进行分解
  • 输出:任务列表(Task List)
阶段 2:任务分配
  • 输入:任务列表
  • 处理:任务分配器根据 Agent 的角色、能力和当前负载进行智能分配
  • 输出:Agent-Task 映射关系
阶段 3:并行执行
  • 输入:分配给各 Agent 的任务
  • 处理
    • Agent 接收任务上下文
    • 调用 LLM 进行推理和决策
    • 根据需要调用工具(Tools)
    • 生成执行结果
  • 输出:各 Agent 的执行结果
阶段 4:结果聚合
  • 输入:各 Agent 的执行结果
  • 处理
    • 结果聚合器收集所有 Agent 的输出
    • 根据任务依赖关系进行结果整合
    • 检查任务完成度
  • 输出:聚合后的结果
阶段 5:迭代与输出
  • 输入:聚合结果
  • 处理
    • 任务协调器评估任务完成情况
    • 如未完成,生成新的子任务并返回阶段 2
    • 如已完成,生成最终输出
  • 输出:最终结果返回给用户

2.3 Agent 内部数据流

单个 Agent 执行任务时的内部数据流:

任务输入

角色上下文

LLM 推理

需要工具?

工具选择

结果生成

工具执行

工具结果

输出结果


3. CrewAI 核心组件

3.1 Agent(智能体)

Agent 是 CrewAI 的核心执行单元,代表一个具有特定角色和专业能力的 AI 智能体。

关键属性
  • role(角色):定义 Agent 的专业角色,如"数据分析师"、“内容撰写者”
  • goal(目标):Agent 的长期目标
  • backstory(背景故事):描述 Agent 的专业背景和经验,帮助 LLM 更好地理解其角色
  • llm(语言模型):指定 Agent 使用的 LLM 实例
  • tools(工具):Agent 可调用的工具列表
  • verbose(详细模式):是否输出详细的执行日志
  • allow_delegation(允许委派):是否允许 Agent 将任务委派给其他 Agent
代码示例 (CrewAI v1.7.2)
from crewai import Agent
from langchain_openai import ChatOpenAI

# 创建 LLM 实例
llm = ChatOpenAI(model="gpt-4", temperature=0.7)

# 定义数据分析师 Agent
data_analyst = Agent(
    role='数据分析师',
    goal='分析数据并提供有价值的洞察',
    backstory='你是一位经验丰富的数据分析师,擅长从复杂数据中提取关键信息。',
    llm=llm,
    verbose=True,
    allow_delegation=False
)

3.2 Task(任务)

Task 定义了 Agent 需要完成的具体工作单元。

关键属性
  • description(描述):任务的详细描述
  • agent(智能体):负责执行该任务的 Agent
  • expected_output(预期输出):描述任务的预期输出格式
  • context(上下文):指定该任务依赖的前序任务
  • async_execution(异步执行):是否异步执行任务
代码示例
from crewai import Task

# 定义数据分析任务
analysis_task = Task(
    description='分析过去6个月的销售数据,识别趋势和异常',
    agent=data_analyst,
    expected_output='一份包含趋势分析、异常识别和建议的数据分析报告'
)

3.3 Crew(团队)

Crew 是由多个 Agent 组成的协作团队,负责协调和管理任务的执行。

关键属性
  • agents(智能体列表):组成团队的 Agent 列表
  • tasks(任务列表):需要执行的任务列表
  • process(流程):定义任务执行流程(Process.sequential / Process.hierarchical)
  • memory(记忆):是否启用记忆功能(ShortTerm/LongTerm/Entity Memory)
  • planning(规划):是否启用自动规划功能 (CrewAI 新特性)
代码示例
from crewai import Crew, Process

# 创建团队
crew = Crew(
    agents=[data_analyst, content_writer],
    tasks=[analysis_task, writing_task],
    process=Process.sequential,  # 顺序执行
    verbose=True,
    memory=True,
    planning=True  # 启用规划能力
)

# 执行任务
result = crew.kickoff(inputs={'topic': '销售数据分析'})

3.4 Tool(工具)

Tool 扩展了 Agent 的能力,允许 Agent 调用外部功能和服务。

内置工具
  • SerperDevTool:网络搜索
  • FileReadTool:文件读取
  • FileWriteTool:文件写入
  • DirectoryReadTool:目录读取
  • WebsiteSearchTool:网站搜索
自定义工具
from crewai.tools import tool

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

# 使用自定义工具
data_analyst.tools.append(calculator)

3.5 Flow(流程)

Flow 是 CrewAI 的高级特性(CrewAI Flows),提供了类似 LangGraph 的状态驱动工作流控制。

Flow 的特点
  • 基于装饰器:通过 @start@listen 装饰器定义流程
  • 状态管理:内置状态传递
  • 灵活路由:支持基于代码逻辑的条件路由
代码示例
from crewai.flow.flow import Flow, start, listen

class AnalysisFlow(Flow):
    @start()
    def gather_data(self):
        # 步骤 1: 收集数据
        return "raw_data"

    @listen(gather_data)
    def analyze_data(self, data):
        # 步骤 2: 分析数据
        return f"analyzed_{data}"

# 执行流程
flow = AnalysisFlow()
flow.kickoff()

4. CrewAI vs LangGraph 对比分析

4.1 框架概述对比

特性 CrewAI LangGraph
最新版本 1.7.2 1.0.5
核心抽象 Agent, Task, Crew, Flow Graph, Node, Edge, State
设计理念 高层抽象:专注"角色"与"协作",开箱即用的多智能体团队 底层控制:专注"状态"与"图",极度灵活的计算图编排
学习曲线 低:类似搭积木,定义角色和任务即可 中/高:需要理解图论、状态机和 Reducer
任务编排 自动规划、顺序/层级处理、简单装饰器 Flow 显式定义图结构、循环、条件分支、中断与恢复
状态管理 隐式管理(通过 Context 传递) 显式管理(全局 State Schema)

4.2 CrewAI 的优势 (v1.7.2)

1. 开箱即用的多智能体协作

CrewAI 内置了复杂的协作模式(如层级管理、自动规划),你不需要自己写循环来让 Agent 互相聊天。

# CrewAI: 一行开启层级管理模式(Manager 自动分配任务)
crew = Crew(
    agents=[...],
    tasks=[...],
    process=Process.hierarchical,  # 自动启用 Manager Agent
    manager_llm=gpt4
)
2. 专注于"人"的设计

CrewAI 强迫你思考 Agent 的"人设"(Role, Backstory),这通常能激发 LLM 更好的表现。

3. 极速原型开发

对于大多数标准的"流水线"或"协作"任务,CrewAI 的代码量通常是 LangGraph 的 1/3。

4.3 LangGraph 的优势 (v1.0.5)

1. 极致的控制力

LangGraph 允许你用“状态图”的方式精确控制执行路径(循环、分支、人工介入 Human-in-the-loop 的时机等),适合把复杂业务流程显式化。

# LangGraph: 显式定义图结构(伪代码,见下方“最小可运行示例”)
workflow = StateGraph(State)
workflow.add_node("research", research_node)
workflow.add_node("review", review_node)
workflow.add_conditional_edges("review", should_continue, {"accept": END, "revise": "research"})
2. 持久化与状态回溯

LangGraph (配合 LangGraph Cloud/Studio) 提供了强大的 Checkpoint 机制,可以保存当前运行状态,随时暂停、恢复或修改状态后再继续运行。

3. 复杂非线性逻辑

对于非线性的、充满不确定性的业务逻辑(例如:复杂的客服多轮对话跳转),图(Graph)是比链(Chain)更自然的表达方式。

4.4 选择建议

✅ 选择 CrewAI 当…
  1. 任务是"协作型"的:你需要一群"专家"互相配合(写代码+测试+文档)。
  2. 需要快速落地:你不想花时间设计复杂的状态机,只想让 AI 把活干完。
  3. 流程相对确定:虽然支持 Flow,但 CrewAI 最擅长的还是线性和层级任务。
  4. 关注结果优于过程:你更在乎 Agent 产出的内容质量,而不是它中间怎么跳转的。
✅ 选择 LangGraph 当…
  1. 任务是"流程型"的:业务逻辑极其复杂,有大量的 if-else、循环和状态判断。
  2. 需要人工介入:需要在流程中间暂停,让人类审核,然后修改状态继续运行。
  3. 需要生产级可观测性:需要对每一步的状态进行精细的监控、持久化和调试。
  4. 构建单一超级 Agent:例如构建一个像 ChatGPT 那样的全能助手,通常 LangGraph 更合适。

4.5 LangGraph v1.0.5 最小可运行示例(同一任务:研究→审阅→可能返工)

说明:LangGraph 采用“状态 + 节点函数 + 边”的方式组织流程。下面示例可直接运行,并演示 add_conditional_edges 形成循环。

from typing import TypedDict, Literal

from langgraph.graph import StateGraph, END
from langgraph.version import __version__ as langgraph_version


print("LangGraph version:", langgraph_version)


class State(TypedDict, total=False):
    topic: str
    research: str
    draft: str
    review: str


def research_node(state: State) -> State:
    topic = state["topic"]
    return {"research": f"研究要点:关于 {topic} 的3个关键点..."}


def review_node(state: State) -> State:
    # 真实场景:这里可接入 LLM 做审阅,或接入人工审核
    research = state.get("research", "")
    ok = len(research) > 10
    return {"review": "accept" if ok else "revise"}


def should_continue(state: State) -> Literal["accept", "revise"]:
    return "accept" if state.get("review") == "accept" else "revise"


workflow = StateGraph(State)
workflow.add_node("research", research_node)
workflow.add_node("review", review_node)

workflow.set_entry_point("research")
workflow.add_edge("research", "review")
workflow.add_conditional_edges("review", should_continue, {"accept": END, "revise": "research"})

app = workflow.compile()
result = app.invoke({"topic": "AI Agents"})
print(result)

5. CrewAI 适用场景

5.1 内容生成工厂

多个 Agent(策划、写手、编辑、SEO专家)流水线式作业,生产高质量文章。

5.2 自动化调研分析

Agent A 搜索信息,Agent B 阅读网页,Agent C 总结数据,Agent D 生成报告。

5.3 辅助编程团队

架构师设计接口,开发者写代码,测试工程师写用例,技术作家写文档。

5.4 智能客服分类与处理

分类 Agent 识别意图,分发给售后 Agent 或 售前 Agent 处理。


6. 快速开始指南

6.1 安装

# 安装最新版 CrewAI
pip install crewai==1.7.2

# 安装最新版 LangGraph
pip install langgraph==1.0.5

6.2 完整代码示例 (v1.7.2)

import os
from crewai import Agent, Task, Crew, Process
# 假设已设置 OPENAI_API_KEY 环境变量

# 1. 定义 Agents
researcher = Agent(
    role='高级技术研究员',
    goal='发现 AI 领域的最新突破',
    backstory='你是一名专注于大语言模型的研究员,擅长从复杂的论文中提取关键创新点。',
    verbose=True
)

writer = Agent(
    role='技术博主',
    goal='将复杂的技术概念转化为通俗易懂的文章',
    backstory='你擅长科普技术,你的文章风格幽默风趣,深受开发者喜爱。',
    verbose=True
)

# 2. 定义 Tasks
task1 = Task(
    description='研究关于 "AI Agents" 的最新趋势,列出3个关键突破。',
    expected_output='一份包含3个AI Agent关键突破的简报列表。',
    agent=researcher
)

task2 = Task(
    description='基于研究员的简报,写一篇博客文章介绍这些突破。',
    expected_output='一篇不少于500字的Markdown格式博客文章。',
    agent=writer,
    context=[task1]  # 显式依赖 task1 的结果
)

# 3. 定义 Crew
crew = Crew(
    agents=[researcher, writer],
    tasks=[task1, task2],
    process=Process.sequential,
    verbose=True,
    planning=True  # 启用规划以优化执行路径
)

# 4. 执行
result = crew.kickoff()

print("######################")
print(result)

6.3 LangGraph 最小示例(版本检查)

from langgraph.version import __version__ as langgraph_version

print("LangGraph version:", langgraph_version)

7. 最佳实践

  1. 善用 context:在 Task 中显式指定 context=[prev_task],这能让下游 Agent 精确获取上游的信息,而不是依赖模糊的隐式传递。
  2. 精细化 RoleBackstory:不要偷懒,越详细的背景故事,LLM 的角色扮演效果越好,幻觉越少。
  3. 使用 Memory:在 Crew 初始化时开启 memory=True,对于长任务链非常有用,可以避免 Agent 遗忘之前的关键信息。
  4. 工具单一职责:自定义 Tool 时,功能越单一越好,Agent 更容易学会何时调用。
  5. 从 Sequential 开始:先用顺序模式跑通流程,只有在非常复杂且需要动态调整时,才考虑 Hierarchical 模式。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐