Skip to content

CrewAI

本页速览 CrewAI 用「角色 + 目标 + 背景故事」定义 Agent,用 Crew 做自治协作、用 Flow 做事件驱动控制,是落地最快的多 Agent 框架之一。本篇基于 v1.15.x 官方文档讲清核心概念、可运行代码、与 LangGraph/AutoGen 的哲学差异及真实社区批评。

本页含时效性内容,数据截止于 2026-08;JD、价格、产品功能等信息可能已变化,引用前请核对原始出处。

CrewAI ​

如果你能用一句话向同事描述业务流程——"一个研究员搜集资料,一个分析师整理,一个编辑润色成稿"——CrewAI 就是把这个描述直接翻译成代码的框架。它把多 Agent 系统的入门成本压到了所有主流框架里最低的一档,代价是抽象层较厚,出问题时你得钻到框架内部去调试。本页基于 CrewAI v1.15.x(2026 年 8 月最新发布线)的官方文档与真实用户反馈,讲清它是什么、怎么用、什么时候不该用。

一、定位:角色扮演式多 Agent 编排 ​

CrewAI 由 João Moura 创建,最初是他的 side project,2024 年 10 月完成 Insight Partners 领投的 1800 万美元 A 轮融资(Andrew Ng、HubSpot CTO Dharmesh Shah、Replit CEO Amjad Masad 等参投)。2025 年 10 月发布 v1.0 GA,官方当时披露的数据是:累计 14 亿次 Agentic 执行、60% 以上财富 500 强在用(厂商自报口径,含试用)、GitHub 4 万 star、月下载量 180 万;到 2026 年年中 star 数已超过 5 万。截至 2026 年 8 月,最新版本为 v1.15.x 系列,MIT 协议开源。

它的核心隐喻是角色扮演:一个 Agent = role(角色)+ goal(目标)+ backstory(背景故事)。这三个字段不是装饰——它们会被拼进 system prompt,直接决定模型的行为倾向。这种设计的心智负担极低:你不需要懂图论、状态机或事件溯源,只需要会"写岗位说明书"。

两个容易混淆的事实,先澄清:

  • CrewAI 不是 LangChain 的封装。早期版本(约 0.30 之前)确实构建在 LangChain 之上,但很早就移除该依赖、重写了独立内核。如今它是完全独立的 Python 框架(要求 Python >= 3.10, < 3.14),只把 LiteLLM 作为模型路由层。网上说它"基于 LangChain"的文章都已过时。
  • 它不是单 Agent 框架。单 Agent 场景用 CrewAI 是杀鸡用牛刀——直接调 LLM API 或用 OpenAI Agents SDK 更合适。它的价值全在"多个有分工的 Agent 协同"这件事上,这也是它与 LangGraph 等框架比较时的根本出发点(详见 多 Agent 架构)。

CrewAI 内部采用双层架构,这是理解它的关键:

┌─────────────────────────────────────────────────┐
│  Flows(事件驱动工作流)—— 精确控制层             │
│  @start / @listen / @router,状态机式编排        │
│  ┌───────────┐   ┌───────────┐   ┌───────────┐ │
│  │  Crew A   │ → │ 确定性代码 │ → │  Crew B   │ │
│  │ (自治协作) │   │ (纯 Python)│   │ (自治协作) │ │
│  └───────────┘   └───────────┘   └───────────┘ │
│       每个 Crew 内部:                            │
│       Agent(role+goal+backstory) + Task          │
│       → Process.sequential / hierarchical        │
└─────────────────────────────────────────────────┘

一句话:Crew 管"自治",Flow 管"控制"。v1.0 之后官方明确推荐用 Flow 作为生产应用的骨架,Crew 退居为 Flow 中的一个执行单元。

二、核心概念:Agent / Task / Crew / Process ​

Agent:三个字符串决定行为 ​

python
from crewai import Agent
from crewai_tools import SerperDevTool

researcher = Agent(
    role="AI 领域资深研究员",
    goal="挖掘 {topic} 的最新进展,只采信可核实的来源",
    backstory="你做了十年技术调研,以能找到一手信源、拒绝二手转述著称。",
    tools=[SerperDevTool()],
    llm="openai/gpt-4o",      # 经 LiteLLM 路由,支持上百家模型供应商
    verbose=True,              # 打印每步思考,调试期必开
    max_iter=20,               # 单个任务的最大 Agent Loop 迭代次数
    max_rpm=10,                # 限速,防止打爆 API 配额
    allow_delegation=False,    # 是否允许把任务转派给其他 Agent
)

role / goal / backstory 是必填项,CrewAI 把它们组装成 system prompt。这意味着背景故事不是玄学:写得具体("你以拒绝二手信源著称")比写得空洞("你是一个乐于助人的 AI")输出质量明显更稳——本质上这就是 Prompt Engineering 在框架层的封装。

其余高频参数:respect_context_window=True(默认开启,context window 溢出时自动摘要历史而不是报错)、memory=True(启用短期/长期/实体记忆,底层依赖嵌入模型,见 记忆系统)、reasoning=True(执行前先反思并生成计划)、inject_date=True(把当前日期注入 prompt,时效性任务很有用)。

注意一个 1.x 时代的变化:allow_code_execution 和内置 CodeInterpreterTool 已废弃移除,官方建议改用 E2B、Modal 这类独立沙箱服务做代码执行(安全考量,见 Agent 安全)。

Task:描述 + 期望输出 ​

python
from crewai import Task
from pydantic import BaseModel

class ResearchNotes(BaseModel):
    key_findings: list[str]
    sources: list[str]

research_task = Task(
    description="调研 {topic} 在 2026 年的产业落地现状,区分事实与厂商宣传。",
    expected_output="一份结构化调研笔记,含关键发现和来源清单。",
    agent=researcher,
    output_pydantic=ResearchNotes,   # 强制结构化输出
    # context=[other_task],          # 显式声明依赖上游任务的输出
    # output_file="output/notes.md", # 落盘
)

expected_output 是 CrewAI 里最容易被低估的字段。它不只是给人看的——框架会拿它校验和引导输出格式。写得越像验收标准("3-5 条,每条附 URL,区分事实与观点"),返工率越低。

Crew 与 Process ​

Crew 把 Agent 和 Task 装配起来,process 决定调度策略:

  • Process.sequential(默认):任务按列表顺序执行,上一个任务的输出自动流入下一个任务的上下文。覆盖 80% 的场景。
  • Process.hierarchical:引入一个 manager Agent 负责任务分派和结果验收,类似"主管带团队"。必须额外提供 manager_llm 或 manager_agent。听着美好,实测稳定性一般——manager 的分派质量完全取决于模型能力,任务稍复杂就容易出现反复转派、死循环,且 token 消耗成倍上涨。大多数团队最终都退回 sequential + Flow 路由。
python
from crewai import Crew, Process

crew = Crew(
    agents=[researcher, analyst, writer],
    tasks=[research_task, analysis_task, writing_task],
    process=Process.sequential,
    memory=True,
    verbose=True,
    max_rpm=20,            # crew 级限速,覆盖单个 agent 的设置
    checkpoint=True,       # 1.x 新增:任务完成后自动存档,中断可断点续跑
)

result = crew.kickoff(inputs={"topic": "端侧大模型"})
print(result.raw)               # 最终任务的原始输出
print(result.pydantic)          # 若定义了 output_pydantic
print(result.token_usage)       # 全程 token 消耗

kickoff 有一族变体,生产里常用的是:

  • kickoff_for_each(inputs_list):对一组输入逐个跑,比如批量处理 100 篇稿件;
  • akickoff() / akickoff_for_each():原生 async,高并发场景首选;
  • kickoff_async():线程包装的异步,官方标注仅作兼容,新代码用 akickoff;
  • CLI 的 crewai replay -t <task_id>:从指定任务重放,调试长流水线时省 token。

三、Flows:事件驱动工作流 ​

Crew 解决"Agent 之间怎么协作",Flow 解决"整条自动化流水线怎么流转"。这是 CrewAI 从"多 Agent 玩具"走向"业务自动化工具"的分水岭,也是它和纯 Agent 框架拉开差异的地方。

Flow 的模型很简单:类方法 + 三个装饰器,状态挂在 self.state 上:

python
from crewai.flow.flow import Flow, listen, start, router, or_
from pydantic import BaseModel

class ContentState(BaseModel):       # 结构化状态(也可用无 schema 的字典式 state)
    topic: str = ""
    draft: str = ""
    score: float = 0.0

class ContentPipeline(Flow[ContentState]):

    @start()                          # 入口,可以有多个,并行触发
    def set_topic(self):
        self.state.topic = "端侧大模型"

    @listen(set_topic)                # 监听上游方法的完成事件
    def research(self):
        result = research_crew.kickoff(inputs={"topic": self.state.topic})
        return result.raw             # 返回值会传给下游监听者

    @router(research)                 # 路由:根据返回值字符串决定走哪个分支
    def grade(self, notes: str):
        # 这里可以调一个打分 agent 或纯 Python 规则
        return "publish" if self.state.score > 0.8 else "revise"

    @listen("publish")
    def publish(self):
        pass  # 走发布逻辑

    @listen(or_("revise", "low_quality"))   # or_ / and_ 组合触发条件
    def request_revision(self):
        pass

flow = ContentPipeline()
flow.plot("pipeline")    # 生成 HTML 可视化流程图,评审时很有用
flow.kickoff()

Flow 里可以混着放三类东西:完整 Crew、单个 Agent、纯 Python 函数(直连数据库/调内部 API/跑规则引擎,一次 LLM 调用都不花)。生产推荐姿势是:确定性逻辑全部用纯 Python 写进 Flow,只有真正需要推理的环节才交给 Crew。这是控制成本和可预测性的关键(详见 成本工程)。

v1.0 起 Flow 还补齐了持久化与恢复(@persist 装饰器 + SQLite/自定义后端)、human-in-the-loop 暂停等待人工输入等能力(对应模式见 人在回路)。

四、动手:跑通一个最小项目 ​

官方推荐用 CLI 脚手架(内置 uv 依赖管理):

bash
uv pip install crewai 'crewai[tools]'
crewai create crew market_research
cd market_research
# 编辑 .env 填入 OPENAI_API_KEY、SERPER_API_KEY
crewai run

v1.15 时代脚手架默认生成的是 JSONC 配置式项目(crew.jsonc + agents/*.jsonc),一行 Python 不用写就能跑:

jsonc
// crew.jsonc
{
  "name": "Market Research Crew",
  "agents": ["researcher", "analyst"],
  "tasks": [
    {
      "name": "research",
      "description": "Research {topic} and collect the most relevant facts.",
      "expected_output": "Structured research notes about {topic}.",
      "agent": "researcher"
    },
    {
      "name": "analysis",
      "description": "Analyze the research and write a concise report.",
      "expected_output": "A markdown report with findings and recommendations.",
      "agent": "analyst",
      "context": ["research"],
      "output_file": "output/report.md"
    }
  ],
  "process": "sequential",
  "inputs": { "topic": "AI Agents" }
}
jsonc
// agents/researcher.jsonc
{
  "role": "{topic} Senior Researcher",
  "goal": "Find accurate and current information about {topic}.",
  "backstory": "You are a careful researcher who cites clear evidence.",
  "llm": "openai/gpt-4o",
  "tools": ["SerperDevTool"]
}

老项目用 crewai create crew <name> --classic 走 YAML + @CrewBase/@agent/@task/@crew 装饰器路线,依然受支持。个人建议:配置式适合标准化流水线(运维可改、不用动代码),装饰器式适合需要深度定制的场景。

JSONC 项目的安全边界

JSONC 配置里 custom:<name> 工具和 {"python": "module.attribute"} 回调会在加载时执行本地 Python 代码。只运行来源可信的 crew 项目——这本质上等价于执行对方给的脚本。

调试三件套:verbose=True 看完整推理过程;v1.0 起内置免费 tracing(OpenTelemetry,不用接第三方);crewai log-tasks-outputs + crewai replay -t <task_id> 从中间任务重放。更系统的可观测性方案见 可观测性。

五、CrewAI vs AutoGen vs LangGraph:设计哲学差异 ​

三个框架的分歧不在功能清单,而在"Agent 系统应该被怎样思考":

维度CrewAIAutoGenLangGraph
核心隐喻公司/团队:角色 + 岗位说明书群聊:Agent 是对话参与者电路图:节点 + 边 + 状态
编排范式过程式(sequential/hierarchical)+ 事件驱动 Flow消息驱动的异步 actor 模型显式状态图,每个 transition 都要你定义
抽象层级最高,约定大于配置中高最低,一切皆显式
上手到跑通半小时半天一到两天(要理解 state/reducer/edge)
精细控制力中——Flow 层够用,Crew 内部是黑盒中高最高,每一步都可干预
出错时的调试较痛,抽象厚中相对好,状态流转全显式
典型用户画像业务自动化、内容流水线团队研究/实验性多 Agent 对话平台团队、复杂生产系统

用一句不客气但准确的话总结:

  • CrewAI 赌的是"大多数多 Agent 需求其实是流水线"。角色隐喻 + Flow 就是流水线的两种粒度。赌对了——它成了内容生产和业务流程自动化里落地最快的框架。
  • LangGraph 赌的是"严肃系统需要显式状态机"。它给你图灵完备的控制力,代价是所有复杂度都摆在你面前,没有框架帮你挡。
  • AutoGen 赌的是"Agent 协作本质是对话"。消息驱动的 actor 模型最灵活也最学术,适合探索新型协作模式,但在"流程基本固定、只是要自动化"的企业场景里显得绕。

实际工程里三者并不互斥:常见组合是 CrewAI 做快速验证和标准化流水线,真正卡住脖子的核心环节用 LangGraph 重写;或者反过来,LangGraph 图里把某个节点委托给一个 CrewAI Crew。选型方法论见 框架选型总览。

六、企业功能:AMP 与部署 ​

开源框架之外,CrewAI 公司的商业化产品是 CrewAI AMP(Agent Management Platform,前身叫 CrewAI Enterprise)。从官方 GitHub 与文档披露的能力看:

  • 统一控制平面:托管部署、版本管理、环境隔离、安全重部署,支持云上托管和 on-premise 两种形态;
  • 可观测性:实时 trace、指标、日志(开源版 v1.0 起也内置了免费 tracing,AMP 在其上加企业级留存与告警);
  • 治理:RBAC、审计日志、团队管理;
  • Triggers:Gmail、Slack、Salesforce、Outlook、HubSpot 等事件源直连,收到事件自动触发 Crew/Flow;
  • Visual Agent Builder:无代码搭建 Agent 的可视化界面,面向非开发角色;
  • 24/7 企业支持。

AMP 有免费档位(Crew Control Plane 可免费试用),付费档位按 execution 计费,第三方整理的公开定价为 Professional 约 $25/月起步——价格变动频繁,签约前以官网为准。部署链路是:crewai run 本地验证 → 推 GitHub → AMP 控制台一键部署。

合作伙伴层面官方点名了 IBM、PwC、NVIDIA 及 Arize、Databricks、Galileo 等;并宣称 IBM、Microsoft、Walmart、SAP、Adobe、PayPal 等公司内部有工程师在用开源版。这类"财富 500 采用率"数字按行业惯例统计口径很宽(装过包就算),听听就好,别当成采购依据。

七、社区评价与常见批评 ​

正面反馈很集中:上手快("一下午就能把想法跑起来")、角色模型直觉("如果你知道怎么带人类团队,就会用 CrewAI")、文档和官方课程(learn.crewai.com,官方称 10 万+ 认证开发者)扎实。

批评也同样集中,按出现频率排序:

  1. 抽象太厚,出错难查。这是被吐槽最多的一条。happy path 很顺滑,一旦 Agent 行为不符合预期,你要面对的是框架拼装的巨型 system prompt + LiteLLM 路由 + 内部 Agent Loop 三层黑盒,debug 经常变成读框架源码。社区常见的报复性写法是干脆绕过 Crew,只用 Flow + 单次 LLM 调用。
  2. token 消耗偏高。role/goal/backstory 拼装、任务间上下文传递、delegation 机制都会推高 token 用量;hierarchical 模式下 manager 的反复分派更是放大器。不给 max_iter、max_rpm 设上限就上线,账单会教你做人。
  3. 0.x 时代 breaking change 频繁。2024-2025 年升级版本踩坑是常态;v1.0(2025 年 10 月)官方承诺 API 冻结、长期稳定,此后一年多的 1.x 发布线确实以修 bug 和增功能为主,这一点算是兑现了。
  4. hierarchical 模式名不副实。manager Agent 的调度质量完全看模型脸色,社区共识是优先 sequential + Flow 显式路由,把 hierarchical 当实验功能。
  5. 默认开启匿名遥测。框架默认上报版本、OS、Agent 数量、角色名等元数据(官方称不收集 prompt 和业务数据,除非显式开 share_crew=True)。企业环境记得设 OTEL_SDK_DISABLED=true 关闭。
  6. 是开发者框架,不是业务产品。没有面向业务人员的控制台(AMP 的 Visual Builder 在补这个缺口),非技术团队直接用会撞墙——这一点和 Dify、Coze 这类低代码平台定位不同。

一个务实的判断

CrewAI 的最佳使用方式是"降级使用":Flow 当工作流引擎,Crew 只在真正需要多角色推理的节点启用,能写成纯 Python 步骤的绝不交给 Agent。把它当"带 Agent 能力的 workflow 框架"用,比当"自治多 Agent 系统"用,成功率高得多。

八、适用场景 ​

适合:

  • 内容生产流水线:调研 → 撰写 → 事实核查 → 润色,每个环节角色清晰,输出有明确验收标准。这是 CrewAI 最甜区,官方示例(job description、trip planner、stock analysis)全是这类。
  • 业务流程自动化:RevOps 报表、KYC 初审、会议纪要分发、客服工单分类——配合 AMP 的 Triggers(Gmail/Slack/Salesforce 事件驱动)能很快拼出可用系统。
  • 快速验证多 Agent 想法:半小时出原型,验证"这件事到底需不需要多 Agent",再决定要不要用 LangGraph 重写核心链路。

不适合:

  • 单 Agent 就够的场景:加个 role/goal/backstory 不会让单 Agent 变更强,只会更贵。
  • 强实时 / 低延迟场景:框架调度开销 + 多轮 LLM 调用,延迟敏感产品慎用。
  • 需要精确控制每一步推理的系统:金融合规、医疗这类每一步都要可解释可干预的场景,直接上 LangGraph 或者自己写 Agent Loop。
  • 无代码团队:去用 Dify 或 Coze,别碰 Python 框架。

最后一个学习建议:CrewAI 是建立多 Agent 直觉的最快路径,但别停在它给你的隐喻里。读完本篇后建议对照 AutoGen 的"对话即协作"和 LangGraph 的"图即控制"各看一遍,三种哲学都理解透了,才算真正会选型。

参考资料 ​