想象你是一位电影导演,手里攥着一本厚厚的剧本。你当然不会自己一边演主角、一边扛摄影机、一边打灯光——那又累又拍不好。真正聪明的做法,是召集一支剧组:让资深调研员去翻资料,让文案去打磨台词,让审校去盯穿帮镜头。每个人只负责自己最擅长的一块,而你只需要给每人一份“角色设定”和“任务单”,拍摄就会自动推进。 CrewAI 就是这样一个“智能剧组导演”。它英文名里的 Crew 正是“剧组、团队”的意思。在这个框架里,每个 AI 角色(Agent)都有明确的身份、目标和工具,任务被拆成一场场“戏”,再由内置的流程管理决定先拍哪场、哪场可以同时拍。你只需像填通告单一样,用声明式的配置把“谁来演、演什么”写清楚,剩下的调度与协作全部交给框架。曾经常常要写大量胶水代码的多智能体协作,如今几行配置就能驱动。
对 AI 从业者而言,CrewAI 是掌握“多智能体协作工程化”最快的入口:它把角色、任务、流程三大抽象一次讲透,学完后你会把任何复杂业务拆成可编排的 AI 团队,直接提升交付效率与方案说服力。
可视化演示
展示神经网络反向传播的四个阶段:前向计算、损失评估、梯度反向传播和权重更新,支持逐阶段步进观察。
本节配有交互动效(进入视口后自动加载,约 3KB)。
前向传播阶段 输入数据逐层前向传播,每层计算加权和与激活值 a⁽ˡ⁾ = σ(z⁽ˡ⁾), z⁽ˡ⁾ = W⁽ˡ⁾a⁽ˡ⁻¹⁾ 点击下一步进入损失计算
角色定义
一位导演拿到剧本后,做的第一件事不是喊“开拍”,而是选角。他不会只写一句“主角是个老兵”,而是要化成一份完整的人物小传:这个人叫什么、经历什么、性格如何、这次要达成什么结局。角色立住了,戏才有灵魂。
在 CrewAI 里,Agent 就是你要“选角”的演员,每个 Agent 由三大核心要素定义:role(角色描述)、goal(目标)以及可选的 tools(工具)。role 是身份,goal 是方向,tools 是武器,三者共同决定这个 Agent 在协作中如何思考、如何行动。框架会把 role、goal 和 backstory(背景故事)拼到一起塞进大模型的系统提示词——就像递给演员一份完整小传,模型才清楚该用什么口吻和知识结构来工作。
例如定义一个“资深调研员”Agent:role 写“你是一名有十年经验的科技分析师”,goal 写“为给定主题搜索并提炼关键趋势”,tools 挂上搜索工具。角色写得太空,模型只能“本色出演”,输出泛泛而谈;写得太满,又会让简单任务变得笨重。优秀的人工智能团队,靠的是清晰的角色设定,而不是一味追求更聪明的模型。
就像选角导演在通告单上写下“资深调研员:十年行业经验,目标输出要点清单,允许使用资料库”——一个有血有肉的角色,就这样被定义出来了。
- 角色描述定义 Agent 的身份与专业背景,决定它看问题的视角和说话的口吻。
- 目标设定明确这个 Agent 要为之努力的方向,是它所有行动的内在动力。
- 工具配置挂载搜索、计算、代码执行等能力,决定 Agent 能调用哪些“武器”。
- 集合组装大括号把三个要素收拢成一个完整的 Agent 单元。
任务机制
选完角,场务要发“拍摄任务单”了。一场戏不能只写“拍点东西”,要写清楚场景、台词和验收标准:这场戏在咖啡馆,男主说三句台词,镜头最后停在窗外。任务单越具体,拍摄越不会跑偏。
在 CrewAI 中,Task 就是这张任务单。每个 Task 包含 description(任务描述)和 expected_output(预期输出)。description 告诉 Agent 具体要做什么,expected_output 定义“拍成什么样算过”——这个验收标准至关重要,它决定了模型是随手交一份大纲,还是一份可以直接用的成品。
任务还可以直接绑定 Agent,例如把“调研 AI Agent 行业趋势”交给“资深调研员”。在顺序流程中,前一个任务的输出会自动成为后一个任务的上下文,就像上一场的素材要送到下一场使用。写任务描述时,把背景、格式、字数都交代清楚,产出质量会立刻上一个台阶。
任务单写得越细,演员越清楚自己要交出什么“样片”;只写一句“你看着办”,最后收到的多半是不能用的废片。
- 任务描述用自然语言交代任务背景、内容与约束,是 Agent 行动的剧本。
- 预期输出明确结果的格式与形态,让 Agent 的产出可预期、可验收。
- 配对绑定圆括号将两者组合成一个完整的任务单元。
团队组装
演员选好了、戏份拆好了,导演要把所有人召集起来宣布“开机”。在片场,这件事由总通告单完成:今天谁到场、拍哪几场、按什么顺序。所有要素凝聚成一个可执行的整体。
CrewAI 里的 Crew 对象就是这张总通告单,也是整个框架的执行入口。你只需把 agents(代理名单)、tasks(任务清单)和 process(流程模式)装进一个 Crew,再调用 kickoff(),整支智能剧组就开始运转。框架会在内部建立任务与 Agent 的映射关系,并在执行时自动传递上下文。
最简洁的组装几乎只靠声明:Crew(agents=[……], tasks=[……], process=Process.sequential)。agents 决定“谁来演”,tasks 决定“演什么”,process 决定“按什么顺序演”。对开发者而言,复杂的调度细节被封装在框架内部——这正是 CrewAI 降低多智能体开发门槛的关键设计。
通告单一贴出,各部门各就各位——导演喊一声 kickoff,整个剧组就自动跑起来了。
- 代理名单把已定义好的 Agent 收集成列表,决定参与协作的全部角色。
- 任务清单把任务按依赖关系排列,决定整场协作要完成的事情。
- 流程模式指定顺序、并行或层级等编排方式,决定执行的先后策略。
- 组装容器大括号表示 Crew 是一个容纳以上三者的总容器。
协作模式
拍戏有两种常见排期:一种是按剧本顺序一场接一场地拍,主演从头待到尾;另一种是分成 A、B 两个摄制组,同时拍没有剧情依赖的戏,最后合并素材。一个剧组选哪种排期,取决于戏与戏之间是否存在勾连。
CrewAI 的协作模式与之对应。顺序执行(sequential)是最常用模式:任务按列表顺序逐个执行,前一个 Agent 的输出作为后一个 Agent 的输入,形成一条连贯“流水线”。并行执行则允许相互独立的任务同时推进,最后由流程统一汇总,非常适合资料收集、多源调研这类场景。层级流程(hierarchical)则额外引入一个 manager agent,由它负责规划任务、分配人手并审核结果,适合目标模糊、需要动态拆解的复杂任务。
在新版 CrewAI 中,如果任务之间没有显式依赖,框架会自动让它们并行执行;一旦存在依赖,则必须等待前序任务完成。模式的选择本质是“确定性”与“灵活性”的权衡:顺序流程好排查、好预测,层级流程更聪明但更难以控制。依赖关系,才是排期的唯一裁判。
今天的排期是“一镜到底”还是“AB 组并行”,全看戏与戏之间有没有剧情勾连——依赖关系是排期的唯一裁判。
- 顺序箭头箭头表示上游输出流入下游输入,形成严格的先后依赖。
- 任务编号下标区分不同任务,n 表示整条流水线的任务总数。
- 并行记号双竖线表示两个任务互不依赖、可以同时执行。
流程管理
剧组里最难当的是副导演,他要盯住每个部门的进度:灯光好了没、演员到没到、哪场戏卡住了要先暂停、拍完的素材要立刻送剪辑。没有这张“进度总表”,拍摄现场会乱成一锅粥。
在 CrewAI 中,流程管理由 Process 承担。框架内置了顺序与层级两种流程:顺序流程按任务列表依次调度,层级流程由 manager agent 动态规划。你不需要自己写 while 循环、消息队列或状态机——框架负责在正确的时机把正确的任务交给正确的 Agent。
流程管理还包含任务依赖:当一个任务声明需要前序任务的输出时,框架会自动等待并传递上下文;若几个任务互相独立,框架可以并行调度以压缩总耗时。执行过程中出现异常时,你可以捕获 kickoff() 的异常或检查任务输出做兜底。这层内置调度能力正是 CrewAI “开箱即用”的核心卖点:开发者从“如何协调”中被解放出来,专注于“如何定义”。
副导演不用自己喊每一条口令,只需要拿好排期总表——CrewAI 的 Process 就是那个从来不掉链子的副导演。
- 调度函数arrange 代表框架内置的编排逻辑,负责分配执行顺序。
- 输入要素调度对象是 Agents 与 Tasks,即谁来做、做什么。
- 输出结果整个表达式的结果就是一套有序的执行计划。
声明式配置
拍戏最省心的管理方式,是“一张通告单管到底”:上面只写着谁、在哪、几点、拍什么,至于摄影机怎么架、灯光怎么摆,那是各组自己的事。你不需要给每个人写操作手册。
这正是声明式配置(declarative)的精髓:你只描述“要什么”(who 和 what),框架负责“怎么做”(how)。在 CrewAI 中,Agent、Task、Crew 全部用结构化参数声明,甚至支持 YAML 文件配置,运行时再加载成对象。这与命令式编程形成鲜明对比——后者要求你把每一步调度、每一次调用都写出来,代码量与心智负担成倍增加。
例如一份 crew.yaml 里直接写 agents 和 tasks 的字段列表,主程序只需读取并组装。CrewAI 还提供 Flows 机制,用事件驱动的方式编排任务,适合更复杂的动态流程。声明式配置带来的直接收益是:上手门槛低、易读易维护、团队评审时像对剧本一样对配置文件。对中小团队而言,“少写代码”就是“少有 bug”。
通告单上从不写“如何布光”,导演也从不用代码指挥每一台机器——把“怎么做”交给专业的人,你只负责写出那张漂亮的通告单。
- 声明主体输入只有两个要素——参与角色与任务内容。
- 蕴含推导双线箭头表示由声明自动推导出执行细节,无需人工书写。
- 框架代劳结论部分代表调度、上下文传递等复杂逻辑由框架封装完成。
实战应用
一支磨合成熟的剧组,什么题材都能接:科普纪录片、财经专访、产品宣传片。变化的是剧本,不变的是“角色分工 + 任务编排 + 流程调度”这套方法论。CrewAI 的应用价值就藏在这套可复用的方法论里。
最典型的落地场景是内容创作与研究分析。内容创作常用“调研员 → 文案 → 审校”三角色流水线:调研员收集事实,文案转译成通俗表达,审校把关质量。研究分析则可以派多个研究员 Agent 并行消化不同信源,再统一汇总,把原来按天计的调研周期压缩到分钟级。
这类方案的“质量红利”来自角色隔离:每个 Agent 只做一件最擅长的事,输出经过多轮角色视角的交叉检查,相比单次大模型调用,事实错误与逻辑跳跃明显减少。同时,因为团队结构是声明式的,换主题、加选题、调人数都只是改配置的事——一个团队模板可以复用到几十个内容栏目,这正是工程化带来的长期回报。
只要剧组还在、分工还在、流程还在,下一个题材的片子就能立刻开拍——这就是一支成熟 AI 团队的复用价值。
- 各自产出每个 Agent 按自己的角色产出局部结果。
- 汇聚合并Merge 表示把局部结果按规则组装成整体成果。
- 团队输出TeamOutput 代表最终交付物,质量优于单次直出。
AI 应用场景
公众号内容生产线
阶段:多 Agent 任务编排与顺序执行
解决的问题:一个人从选题、找料到写稿、改稿往往耗时数小时,且质量不稳定;CrewAI 把流程拆给“调研员、文案、审校”三个角色,各自专注单一职责,产出经过多轮交叉检查后明显更稳。
具体案例:某科技自媒体团队用 CrewAI 定义三个 Agent,输入一个关键词后自动产出带引用来源的文章初稿,写稿时间从 3 小时压缩到 40 分钟,人工只做最后把关。
行业研究报告分析
阶段:并行任务分发与结果合并
解决的问题:传统研究需要研究员逐篇阅读上百份资料,串行处理一周才能完成交叉验证;CrewAI 让多个研究员 Agent 并行领取不同信源,最后统一汇总成同格式要点表,显著缩短调研周期。
具体案例:某券商研究部门用 CrewAI 对 20 家竞品公司的新闻稿做并行分析,每个 Agent 负责 5 家并输出统一格式的要点,分析师只需对合并结果做人工复核。
客服工单智能分诊
阶段:角色分工与工具调用
解决的问题:客服工单积压,分类与回复草稿需要两个岗位衔接,人力成本高;CrewAI 中“分诊员”Agent 判断工单类别,“回复专员”Agent 结合知识库工具起草答复,形成一条自动处理流水线。
具体案例:某 SaaS 公司接入 CrewAI 后,工单平均处理时间从 30 分钟降到 5 分钟,分诊准确率从 78% 提升到 92%。
Python 演示
# -*- coding: utf-8 -*-"""CrewAI 角色协作:研究员、文案、审校三角色接力产出文章。"""from crewai import Agent, Task, Crew, Process# 如需联网搜索能力,可安装 crewai_tools 后引入:# from crewai_tools import SerperDevTool def main(): # 1. 角色定义:身份、目标、背景故事,框架会拼入系统提示词 researcher = Agent( role="资深调研员", goal="搜集并提炼 AI Agent 的行业趋势", backstory="十年经验的科技分析师,擅长检索与归纳", # tools=[SerperDevTool()] # 挂载工具,扩展能力边界 ) writer = Agent( role="技术内容编辑", goal="把调研要点写成通俗易懂的文章", backstory="擅长把复杂技术讲清楚的资深编辑", ) editor = Agent( role="审校编辑", goal="核对事实与错别字并输出终稿", backstory="严谨的出版级审校,关注每一个细节", ) # 2. 任务机制:描述 + 预期输出,并绑定到指定 Agent research_task = Task( description="调研 AI Agent 行业趋势,输出 5 条核心要点", expected_output="一份包含 5 条要点的清单", agent=researcher, ) write_task = Task( description="根据调研要点撰写一篇 800 字科普文章", expected_output="一篇 800 字的文章初稿", agent=writer, ) review_task = Task( description="审校初稿,修正事实错误、错别字与逻辑问题", expected_output="可直接发布的文章终稿", agent=editor, ) # 3. 团队组装:演员、戏份、流程一起装进 Crew crew = Crew( agents=[researcher, writer, editor], tasks=[research_task, write_task, review_task], process=Process.sequential, # 顺序执行,前序输出流入后序任务 ) # 4. 执行入口:一行启动整支剧组 result = crew.kickoff() print(result) if __name__ == "__main__": main()
from crewai import Agent, Task, Crew, Process把框架四大件一次引入,相当于从器材库领出导演、场记和通告单。role="资深调研员"定义角色身份,CrewAI 会把 role 与 goal、backstory 一起拼进系统提示词。# tools=[SerperDevTool()]这一行说明在哪里挂载工具:把真实工具对象放进 tools 列表即可扩展 Agent 能力。expected_output="一份包含 5 条要点的清单"预期输出是验收标准,越具体,Agent 越不会“交作业式”糊弄。agent=researcher把任务绑定到指定角色,Crew 才知道这场戏该谁上场。process=Process.sequential指定顺序流程,前序任务输出自动成为后续任务的上下文。result = crew.kickoff()一行启动整条流水线,调度与上下文传递由框架内部完成。
常见误区
误区“Agent 不就是一个大模型吗?给它写一句‘你叫小助手’,它就会自动扮演起来,内容质量高低全看模型本身。”
正解角色(role)、目标(goal)和背景故事(backstory)会被框架拼进系统提示词,相当于演员拿到的人物小传。小传越立体,模型越清楚自己该用什么身份、口吻与知识结构来输出。只写名字不写设定,就像让演员演一个“只有名字”的主角,最后只能交出一张白开水般的脸。
为何常见:日常聊天里用“角色扮演”prompt 就能获得不错效果,让人误以为框架中的角色定义也同等简单。
误区“只要把 process 改成并行,所有任务就会同时跑,总时间必然缩短,所以能并行就别用顺序。”
正解并行只对“相互独立”的任务有意义。任务 B 需要任务 A 的输出时,B 必须等待 A,强行并行要么报错、要么退化成名义上的顺序。并行还会带来资源竞争与结果汇总的开销。正确思路是先画依赖图:有依赖就走等待,无依赖才并行。
为何常见:直觉上“同时做=更快”,忽略了任务之间的数据依赖这个硬约束。
误区“CrewAI 都会自动规划了,任务描述写个关键词就行,比如‘写报告’,它自己会知道要写成什么样。”
正解自动规划解决的是“谁来执行、何时执行”,而不是“输出什么”。“写报告”和“写一份 300 字、含三个论据、面向小白读者的报告”得到的产出质量天差地别。expected_output 越明确,Agent 越能对齐验收标准。通告单上只写“拍场戏”的剧组,是拍不出能上映的片子的。
为何常见:被“全自动智能体”的宣传语误导,把框架的调度能力误当成任务理解能力。
误区“多智能体就是要堆角色,7 个不够上 15 个,角色多了总有一个能覆盖到,输出肯定更全面。”
正解每个 Agent 都要消耗一次模型调用,角色越多,链路越长、延迟越高、错误被放大传递的概率越大,甚至会出现互相“甩锅”或改坏彼此产出。实际工程中,3~5 个分工清晰的角色往往比十几个模糊角色更稳定。好导演的剧组不在人多,在人人知道自己该干什么。
为何常见:看到演示里多个 Agent 对话很酷,就把“数量”当成了“质量”,忽略了协作成本随团队规模非线性上涨。
面试题
Q1. CrewAI 中定义一个 Agent 的核心三要素是哪一组?
- A.角色、目标、工具← 正确答案
- B.主题、标签、备注
- C.页面、容器、布局
- D.名称、版本、图标
答案:A。Agent 的三大件是角色、目标与工具,分别解决“是谁、要什么、能做什么”,如同演员的设定、动机和道具。B、C、D 都是无关的展示性描述,不会参与模型提示词的构建。
Q2. 在 CrewAI 中,启动整个协作流程应调用哪个方法?
- A.crew.run() 方法
- B.crew.start() 方法
- C.crew.kickoff() 方法← 正确答案
- D.crew.execute() 方法
答案:C。kickoff() 是 Crew 的标准启动方法,意为“开球/开拍”,CrewAI 官方将团队执行命名为 kickoff。run 是 AutoGen 等框架的写法,start 和 execute 并非 CrewAI 的公开 API。
Q3. CrewAI 的 Process 参数默认采用的执行模式是?
- A.随机执行流程
- B.顺序执行流程← 正确答案
- C.并行执行流程
- D.间隔执行流程
答案:B。默认是顺序执行(sequential):任务按列表顺序逐个执行,前序输出自动传给后续任务,就像剧组一场接一场按剧本拍。“随机执行”和“间隔执行”都不是框架中的概念。
Q4. 以下哪类任务最适合让多个 Agent 并行执行?
- A.依赖上一 Agent 输出的任务
- B.互相独立的资料收集任务
- C.同一报告的多轮修改任务← 正确答案
- D.必须逐级审批的流程任务
答案:C。并行只适用于无数据依赖的任务。独立的资料收集各干各的、最后合并,类似两组摄制组同时拍不同场景;有依赖、需审批、多轮修改的任务都必须串行等待。
Q5. Task 的 expected_output 字段主要作用是什么?
- A.指定控制台打印格式
- B.规定任务的验收标准← 正确答案
- C.设置代码运行的超时
- D.定义数据库表结构
答案:B。expected_output 定义“拍成什么样算过”,是任务单上的验收标准。它不控制打印、超时或数据库,而是让 Agent 明确该交出什么形态的结果,从而约束输出质量。
Q6. 关于 CrewAI 声明式配置的说法,正确的是?
- A.只需声明角色与任务清单← 正确答案
- B.必须手写全部调度逻辑
- C.需要精通底层线程模型
- D.无法支持复杂业务场景
答案:A。声明式风格只写“谁来做、做什么”,调度由框架处理,如同拍戏只需发通告单、不用教摄影机怎么摆。手写调度属于命令式风格,与 CrewAI 的设计正好相反。
Q7. 当一个任务必须使用前一个 Agent 的输出时,最佳做法是?
- A.将任务标注为并行并最后合并
- B.删除前 Agent 输出以节省开销
- C.把所有任务合并成一个任务
- D.保持顺序流程自动传递上下文← 正确答案
答案:D。顺序流程中前序输出会自动成为后续任务的上下文,这是 CrewAI 的内置能力。强行并行会破坏依赖;删输出与合并任务都会丢失应有的分阶段质量检查,反而降低最终质量。
Q8. 使用层级流程(hierarchical)时,通常需要额外配置什么?
- A.多个数据库连接池的配置
- B.独立图形渲染引擎的支持
- C.每个 Agent 的专用浏览器
- D.一个总规划与管理的代理← 正确答案
答案:D。层级流程需要一个 manager agent 负责拆解任务、分配人手和审核结果,相当于剧组里的副导演。数据库、渲染引擎、浏览器都不是层级流程的必要配置项。
Q9. 以下哪些属于 CrewAI 支持的协作流程?(多选)
- A.顺序执行← 正确答案
- B.并行执行← 正确答案
- C.层级流程← 正确答案
- D.随机执行
答案:ABC。官方支持顺序、并行与层级三种:顺序像一镜到底、并行像 AB 组同时拍、层级像导演逐级分派。“随机执行”不是框架提供的流程类型,任务编排始终遵循依赖关系。
Q10. 关于 CrewAI 声明式配置的理解,正确的有哪些?(多选)
- A.只需声明角色与任务即可运行← 正确答案
- B.框架负责调度与流程管理← 正确答案
- C.开发者无需编写任何提示词
- D.开发者需要手工管理线程池
答案:AB。声明式配置把“怎么做”交给框架,开发者只需声明“谁、做什么”。但“无需编写提示词”是误解——角色描述与任务描述本身就是提示词工程的一部分;线程池由框架管理,开发者无需手工操控。