想象你是一家餐厅的老板。以前你只雇了一个全能厨师,洗菜、切菜、炒菜、摆盘都是他一个人,忙起来手忙脚乱,出错率也高。后来你决定分工——洗菜阿姨、切菜师傅、炒菜大厨、摆盘专员各司其职,效率确实上来了,可新的麻烦也来了:这些人怎么配合?谁先做?谁听谁的?谁做的结果传给谁?CrewAI 就是给「AI 后厨」设计的协作系统。在它看来,每一个 AI 助手(Agent)就是一位厨师,Task 是写好的工序卡,Process 是后厨的配合方式:顺序 Process 像流水线,一个工位做完传给下一个;层级 Process 像主厨坐镇,把整桌菜拆成任务分给手下,再逐一验收。本文就用这套「后厨逻辑」,带你零基础看懂 CrewAI 的多 Agent 协作。
掌握 Task+Process 的设计与对比,是成为 AI Agent 架构师的必修课——它决定你搭建的智能体团队是高效后厨,还是一团乱麻。
可视化演示
\u5c55\u793a\u6570\u636e\u5e93\u5d29\u6e83\u540e\u901a\u8fc7WAL\u5199\u524d\u65e5\u5fd7\u8fdb\u884c\u6062\u590d\u7684\u5168\u8fc7\u7a0b\uff1a\u5206\u6790\u65e5\u5fd7\u786e\u5b9a\u4e8b\u52a1\u72b6\u6001\uff0c\u5bf9\u5df2\u63d0\u4ea4\u4e8b\u52a1REDO\u91cd\u505a\uff0c\u5bf9\u672a\u5b8c\u6210\u4e8b\u52a1UNDO\u64a4\u9500\u3002
本节配有交互动效(进入视口后自动加载,约 3KB)。
WAL\u6062\u590d\u673a\u5236 T1\u5df2\u63d0\u4ea4\uff1aREDO T2/T3\u672a\u5b8c\u6210\uff1aUNDO ARIES \u5d29\u6e83\u6062\u590d\u4e09\u9636\u6bb5
Task 定义与分配
在老牌餐厅里,每一道工序都有一张挂在墙上的「工序卡」:这道工序做什么、由哪个岗位负责、做完长什么样算合格、允许用哪口锅哪把刀,写得明明白白。新来的厨师不用到处问人,看一眼卡片就知道自己该干什么。CrewAI 的 Task 就是这张工序卡。
在 CrewAI 中,Task 是协作的最小执行单元,它把「做什么、谁来做、做成什么样、用什么做」封装成一条结构化指令。一个清晰的 Task 是高效协作的地基:卡片上的信息模糊,后厨就会乱套;卡片清晰,每个 Agent 才能在自己的岗位上稳定输出。
Task 的核心四要素通常是 description、agent、expected_output 和 tools。description 描述目标,越具体 Agent 越不容易跑偏;agent 把任务绑定到某个有对应技能的 Agent;expected_output 相当于验收标准,告诉 Agent 输出的格式与内容;tools 则允许任务调用搜索、代码解释器等外部能力,相当于允许厨师使用特定的锅和刀。
回到后厨:一张好的工序卡,能让新来的帮厨也立刻上手。在设计多 Agent 系统时,花时间把每个 Task 的四要素写清楚,远比堆砌更多 Agent 更有效——工序卡不清晰,再好的厨师也会炒出黑暗料理。
- description(任务描述)告诉 Agent 具体要做什么,目标描述越清晰,产出越可控。
- agent(负责Agent)指定后厨里由谁来掌勺,把任务绑定到有对应技能的智能体。
- expected_output(期望输出)定义任务做完后应该交出的成果样式,相当于验收标准。
- tools(工具集)允许该任务调用的外部工具集合,如搜索、计算、代码执行器等。
顺序 Process
流水线上,洗好的菜放在传菜口,切菜师傅取走切好,再放到下一个传菜口,炒菜师傅接手……每个工位只做一件事,做完就传给下一位。谁也不会抢跑,也不会有人闲着。这就是后厨的「顺序配合」,也是 CrewAI 中最直观的协作方式。
CrewAI 的 SequentialProcess 正是这种模式:把多个 Task 排成一个列表,按顺序逐个执行。前一个任务的输出会自动成为后续任务的上下文,就像半成品在工位间流动,把信息一层层带下去。组织流水线时,你只需要想清楚任务的前后依赖,并把每一站的「验收标准」写具体,剩下的由框架自动衔接。
这种模式简单、可控、token 开销相对较低。它非常适合流程固定、步骤明确的工作,比如「调研 → 写作 → 审核」的内容生产链。每个 Agent 只拿到它所需要的那部分上下文,不容易被无关信息干扰,产出的稳定性也更高。
流水线的弱点也很明显:如果某一步突然需要拆成更多步骤,整条线就得停下来重新排。所以顺序 Process 适合「菜单早就定好」的常规流程,而面对「客人临时加菜」这类复杂需求,就要请出主厨模式了。
- Task_i(第i个任务)流水线上第 i 个工位的工序卡,按列表顺序依次排队等待执行。
- context_{i-1}(前序上下文)前 i-1 个任务的输出合集,相当于传给下一位厨师的所有半成品。
- Agent_i 执行产出第 i 个 Agent 读取任务与上下文,处理后产出自己的输出结果。
- context_i 累积更新把新输出加入上下文集合,供后续任务接力时继续参考使用。
层级 Process
想象一桌婚宴的大订单:主厨不会自己从头炒到尾,而是看一眼菜单,心里快速拆解——凉菜给小李、热菜给老王、汤给阿珍,每人分到一张写着「做什么、几点前完成」的小纸条。做完之后,主厨还要逐盘尝一口,不合格的打回重做。这就是后厨的「主厨模式」。
CrewAI 的 HierarchicalProcess 就是这个模式的软件版:一个 Manager Agent(对应主厨)接收整体目标,动态创建并委派子任务给其他 Agent,然后审查每个返回的结果。要实现它,你需要提供一个 manager_llm 或 manager_agent 来扮演主厨角色,由它来决定「这桌菜怎么拆、派给谁」。
与顺序 Process 最大的不同是:层级模式不要求你预先列出所有子任务——主厨现场拆解。这使它特别适合目标复杂、子任务不确定的场景,比如「写一份商业计划书」这种需要边做边调整的大目标。Manager 还拥有局部决策权,可以决定某个子任务是否需要返工、是否需要调用额外资源。
主厨模式也不是万能的:每拆解一次、审查一次,都要额外花 token 和时间,就像婚宴主厨也要付加班费。当流程已经稳定时,回去用流水线反而更划算——这正是选型时要权衡的关键:你的任务是固定菜单,还是创意大餐?
- Manager(goal) 目标拆解主厨读取整桌菜的订单,把大目标动态拆解成若干个子任务。
- 委派 Worker_i把每个子任务派给具备对应专长的工人 Agent 去执行并回收产出。
- 结果汇总 ⊕把各工人提交的结果收集到一起,准备交给主厨统一检查验收。
- Review 审查把关主厨对汇总结果逐一审查,不合格的任务会被打回重做。
Agent 通信机制
后厨里没有人大声聊天。配菜切好,往传菜口一放;炒锅师傅瞄一眼进度板,就知道该炒哪道菜;需要问前台,就通过对讲机说一句。信息跟着「半成品」走,而不是靠人围在一起闲聊。
CrewAI 的 Agent 之间也没有「自由闲聊」。协作信息主要通过任务衔接传递:上一个 Task 的输出,作为下一个 Task 的输入(context)出现。同时,Crew 内的共享上下文与记忆机制,让多个 Agent 能感知同一份「进度板」——比如一个 Agent 中途发现的约束条件,可以被后续 Agent 读取。
除此之外,Agent 可以通过工具调用把外部数据写进上下文,比如搜索结果的摘要、数据库查询结果。一次消息本质上是一个「(发送方 → 接收方:内容)」的结构,只是这个「发送」由任务编排自动完成,而不是 Agent 自己发起。这种设计让每一条信息的来源和去处都可追踪、可审计。
这种「传菜口式」通信的好处是清晰、可控——每一条信息都有来源和去处;缺点是不像真人讨论那样灵活。如果你需要 Agent 像圆桌会议一样你一言我一语地碰撞想法,那就要看 AutoGen 的思路了。
- msg(消息结构)一次信息传递包含发送方、接收方和内容,对应传菜口的一次递送。
- 输出即消息上一个 Task 的输出自动成为下游 Agent 可见的上下文内容。
- 共享记忆 union多个 Agent 的记忆合并成共享语义池,彼此可读取同一份「进度板」。
- 工具调用回填Agent 通过工具获取的外部数据也会写入上下文,供后续任务使用。
结果聚合
各灶台的菜炒好了,不能直接端上桌——需要摆盘师傅统一检查:菜量够不够、温度行不行、酱汁有没有串味,最后合成一道完整的大菜再上桌。结果聚合,就是后厨的「摆盘出品」环节。
在多 Agent 协作中,每个 Task 都会产出结果;但如果直接把这些文本拼在一起,往往会有重复、冲突或格式混乱。聚合阶段要做的三件事是:解析(Parse)、合并(⊕)和校验(Validate)。CrewAI 会在每个 Task 结束后解析输出,并把整个 Crew 的成果汇总为一个统一的输出对象。
解析指把原始输出转成结构化内容,比如解析 JSON 或 Markdown 表格;合并是把多份结果去重、去冲突、按顺序拼装;校验则是拿 expected_output 当验收标准,检查最终结果是否达标。如果某份输出格式不符,聚合层可能直接丢弃或要求重跑——就像摆盘师傅把炒糊的菜退回炒灶。
没有摆盘师傅的后厨,菜再好也上不了台面;没有结果聚合的多 Agent 系统,单看每个结果都很好,合在一起却没法用。设计协作流程时,从一开始就要约定好每份输出的格式——聚合的代价,取决于你在 Task 卡片上有没有写清楚「做成什么样」。
- Parse 输出解析把每个任务的原始输出转换为结构化内容,如 JSON 或 Markdown 表格。
- ⊕ 结果合并将多份结构化结果拼装成完整内容,去掉重复信息并解决冲突。
- Validate 质量校验检查合并结果是否符合 expected_output 定义的验收标准。
- final 最终输出通过校验的成果交付给用户,或作为下一流程的输入继续流转。
与 AutoGen 对比
如果你走进另一家店,会发现完全不同的风格:他们不设固定流水线,而是让所有厨师围坐在一张大圆桌旁,针对「今天做什么菜」自由发言,聊着聊着决定分工。这家店就是 AutoGen——多智能体的「圆桌会议」模式。
CrewAI 与 AutoGen 最根本的区别在驱动方式:CrewAI 是任务驱动,你事先用 Task+Process 把流程编排好,Agent 按工序执行;AutoGen 是会话驱动,核心是 GroupChat,多个 Agent 在一个会话里轮流发言,对话的走向决定任务如何推进。一句话:CrewAI 像按菜谱执行的后厨,AutoGen 像边聊边定的创意厨房。
各有优劣。CrewAI 的后厨式编排流程显式、可预测、token 开销相对可控,适合生产环境中的确定性流程;AutoGen 的圆桌模式灵活、能自由多轮协商,但结果随机性高、更难审计。选型应该根据任务特征:线性固定流程选顺序 Process;复杂动态目标选层级 Process;需要多 Agent 自由讨论协商则考虑 AutoGen。
回到开头的比喻:你是开一家「固定菜单的流水线餐厅」,还是一家「每天圆桌定菜的创意餐厅」?没有最好的后厨,只有最适合客人需求的模式。作为 AI Agent 架构师,你的职责就是看清每道工序的特征,然后把它们安排到最合理的协作结构中。
- 选型条件判断把选型想象成点菜方式——客人的需求决定后厨用流水线还是主厨负责制。
- 线性依赖明确任务先后顺序固定、流程确定时,选择顺序 Process 最稳定、最省成本。
- 需动态拆解目标复杂、子任务不确定时,选择层级 Process,由主厨现场拆解委派。
- 需开放协作需要多 Agent 自由对话、多轮协商时,考虑 AutoGen 的 GroupChat。
AI 应用场景
内容工厂的「流水线三班」
阶段:任务编排 / Agent 协作
解决的问题:传统内容生产靠一个 Agent 从调研写到发布,上下文混杂、角色错位,导致质量不稳定。用顺序 Process 拆成调研 → 写作 → 审核三个 Task,每个 Agent 只干一件事,上下文干净,产出质量大幅提升。
具体案例:某科技媒体用 CrewAI 构建「研究助理 → 撰写专员 → 内容编辑」三 Agent 流水线。研究助理输出带引用的资料包,写手基于资料包生成初稿,编辑按风格指南润色并输出 Markdown,最后由结果聚合层校验格式并发布。
软件项目的主厨式管理
阶段:层级编排 / 动态任务委派
解决的问题:一个复杂需求无法预先列出所有子任务,传统线性流程容易漏步骤。层级 Process 让 Manager 动态拆解目标,按专长委派给不同工程师 Agent,并审查每个产出。
具体案例:研发团队用「技术经理 Agent」接收需求,拆成架构设计、API 实现、测试用例三个子任务,分别派给架构师、后端、测试三个 Agent;Manager 逐个审查输出,不合格打回重做,最终聚合为一份完整的技术方案。
客服工单的聚合分发
阶段:结果聚合 / 意图路由
解决的问题:多个专项 Agent 分别处理「订单问题」「退款问题」「物流问题」,需要把用户意图识别结果聚合,统一路由到正确的 Agent,再把答复汇总成一条用户可见消息。
具体案例:电商客服系统先由意图分类 Agent 打标,再路由到对应专项 Agent;结果聚合层校验答复格式、去重合并,输出单条规范回复,保证用户不会同时收到五条互相矛盾的答案。
Python 演示
# 模拟 CrewAI 的 Task + Process 多智能体协作 class Task: def __init__(self, desc, agent=None, expected_output=""): self.desc = desc self.agent = agent self.expected_output = expected_output self.output = "" def run(self): if self.agent is None: return "" self.output = self.agent.execute(self) return self.output class Agent: def __init__(self, name, skill): self.name = name self.skill = skill self.gc_count = 0 def execute(self, task): self.gc_count += 1 return "[%s] 完成: %s -> %s" % (self.name, task.desc, self.skill) class ManagerAgent(Agent): def decompose(self, goal, n): return ["%s 子任务%d" % (goal, k + 1) for k in range(n)] def sequential_process(agent_list, task_list): # 顺序 Process: 依次执行, 前序输出累积为上下文 context = [] for i, task in enumerate(task_list): if task.agent is None: task.agent = agent_list[i % len(agent_list)] task.run() context.append(task.output) return context def hierarchical_process(manager, worker_list, goal, n=3): # 层级 Process: 主厨拆解目标, 委派工人并回收结果 results = [] for i, desc in enumerate(manager.decompose(goal, n)): worker = worker_list[i % len(worker_list)] task = Task(desc, worker) task.run() results.append(task.output) return results def main(): researcher = Agent("研究员", "资料收集") writer = Agent("写手", "内容撰写") editor = Agent("编辑", "质量把关") print("== 顺序 Process: 流水线协作 ==") tasks = [ Task("收集 2025 年 AI 芯片市场资料"), Task("撰写一篇千字市场分析"), Task("审核并润色文章"), ] for out in sequential_process([researcher, writer, editor], tasks): print(out) print("\n== 层级 Process: 主厨委派 ==") boss = ManagerAgent("主编", "任务拆解") for out in hierarchical_process(boss, [researcher, writer], "发布技术周报", 3): print(out) if __name__ == "__main__": main()
self.output = self.agent.execute(self)任务把工序卡交给绑定的 Agent 执行,产出写入任务对象。if task.agent is None: task.agent = agent_list[...]未指定负责人的任务,按顺序自动分配到团队成员。context.append(task.output)前序输出累积进上下文,流水线下一步就能看到半成品。manager.decompose(goal, n)主厨(Manager)把大目标拆解成 n 个子任务。worker_list[i % len(worker_list)]轮询分配工人,让团队负载均衡。task.run()执行单个任务,触发对应 Agent 的 execute 逻辑。
常见误区
误区我觉得把一个大任务拆成十几个小任务,每个 Agent 更专注,效果一定更好。
正解任务拆得过碎会导致上下文传递链变长,通信和 token 开销翻倍,还可能让下游 Agent 面对碎片化输入。就像后厨如果把「切菜」再拆成「洗第一把菜」「洗第二把菜」,反而拖慢出菜。合理的粒度是「一个 Agent 的一次完整产出」。
为何常见:人们容易觉得「分工=越细越好」,却忽略了协作本身是有成本的。
误区层级 Process 有 Manager 统筹,肯定比傻傻排队强,所以无脑用层级模式。
正解线性固定流程用顺序 Process 更省 token、更稳定可控;层级 Process 的 Manager 每轮拆解审查都要额外消耗时间与 token,还引入随机性。主厨模式适合复杂、动态的目标,不适合稳定流水线。
为何常见:把「管理能力」等同于「更好」,忽略了成本和场景匹配。
误区多个 Agent 在一个 Crew 里,应该可以互相发消息、像聊天群一样讨论。
正解CrewAI 的 Agent 不直接对话,协作靠 Task 的输出传递和共享上下文/记忆。就像后厨靠传菜口,而不是各灶台互相喊话。AutoGen 的 GroupChat 才是「自由发言」模式。
为何常见:把多 Agent 框架都想象成「聊天群」,混淆了任务驱动与会话驱动。
误区expected_output 只是个备注,写「结果」两个字就够了,反正 Agent 能理解。
正解expected_output 是 Agent 的验收标准,直接决定输出的格式与质量。写得模糊,Agent 就交来一段「大概相关」的文字;写明「Markdown 表格,含厂商/份额/趋势」,才能得到结构化、可聚合的结果。
为何常见:把 Task 当命令而非「有交付标准的工序卡」,低估了输出标准对下游聚合的影响。
误区把每个 Agent 的输出直接拼成一个长文本,就是结果聚合了。
正解不同 Agent 的输出可能重复、冲突或格式不一致,需要解析、去重、合并和校验。后厨不会把没检查的菜直接端给客人——摆盘前要检查温度、份量和搭配,聚合层就是那道最后的质量关卡。
为何常见:低估了多路输出的一致性处理难度,以为「拼起来」就完成了任务。
面试题
Q1. CrewAI 中 Task 的核心四要素不包括以下哪一项?
- A.description 任务描述
- B.agent 负责执行的智能体
- C.expected_output 期望输出
- D.max_retry 重试次数配置← 正确答案
答案:D。Task 的核心四要素是描述、负责 Agent、期望输出和工具;重试次数属于执行配置,而不是任务本身的定义字段,就像工序卡上不会写「炒糊了重炒几次」。
Q2. 顺序 Process 最核心的执行特征是哪一项?
- A.多个任务并行执行互不干扰
- B.任务按先后顺序链式传递← 正确答案
- C.管理器动态拆解子任务
- D.智能体之间自由对话交流
答案:B。顺序 Process 像流水线,任务一个接一个执行,前一个的输出进入后一个的上下文;并行、动态拆解和自由对话都不是它的特征。
Q3. 适合使用顺序 Process 的场景有哪些特征?
- A.任务之间存在明确先后依赖← 正确答案
- B.流程固定且不需要动态调整← 正确答案
- C.需要主厨动态拆解复杂目标
- D.步骤确定且上下文逐级累积← 正确答案
答案:ABD。顺序 Process 适合线性依赖、流程确定、上下文逐级累积的任务;「主厨动态拆解复杂目标」是层级 Process 的典型场景。
Q4. 在层级 Process 中 Manager 的核心职责是什么?
- A.亲自完成所有具体业务任务
- B.拆解目标并委派与审查结果← 正确答案
- C.只负责收集最终输出结果
- D.直接对外部用户提供服务
答案:B。Manager 像主厨,负责把大目标拆成子任务、委派给合适的工人 Agent,并对回收的结果逐一把关;它不亲自做具体业务,也不直接服务用户。
Q5. 层级 Process 相比顺序 Process 的主要优势在哪?
- A.运行速度和成本一定更低
- B.能动态适应复杂任务拆解← 正确答案
- C.完全不需要额外计算消耗
- D.保证所有任务严格串行化
答案:B。层级 Process 的核心优势是 Manager 可以现场拆解动态变化的复杂目标;它的成本通常更高,而且任务执行不一定是串行,也可能并行委派。
Q6. CrewAI 中 Agent 之间传递信息的方式包含哪些?
- A.前序任务的输出作为上下文← 正确答案
- B.共享 Crew 的长期记忆库← 正确答案
- C.任意两个智能体自由聊天
- D.通过工具调用获取外部数据← 正确答案
答案:ABD。CrewAI 靠任务输出传递、共享记忆和工具调用结果来交换信息;Agent 之间不能绕过任务随意发起自由聊天,那是 AutoGen 的 GroupChat 模式。
Q7. Task 的 expected_output 字段主要起到什么作用?
- A.记录任务执行失败日志
- B.界定 Agent 产出的验收标准← 正确答案
- C.限制 Agent 使用全部工具
- D.设置 Agent 的对话轮次上限
答案:B。expected_output 是交付标准的定义,告诉 Agent 输出要长成什么样,也是结果聚合阶段校验质量的依据;它不负责日志、工具限制或对话轮次。
Q8. 关于 CrewAI 结果聚合流程,下列哪项说法正确?
- A.拼接所有输出即可直接交付
- B.需要解析合并并进行质量校验← 正确答案
- C.聚合环节只能交由用户完成
- D.聚合结果与任务定义无关联
答案:B。聚合需要 Parse(解析)→ ⊕(合并)→ Validate(校验)三步,才能消除重复与冲突;简单拼接和推给用户都不对,聚合与 expected_output 的定义密切相关。
Q9. 关于 CrewAI 与 AutoGen 的差异,下列说法正确的是?
- A.CrewAI 以 Task 驱动并显式编排← 正确答案
- B.AutoGen 以 GroupChat 会话驱动← 正确答案
- C.CrewAI 的后厨模式流程更可控← 正确答案
- D.AutoGen 对于任务顺序感更强
答案:ABC。CrewAI 用 Task+Process 显式编排,流程可控、可预测;AutoGen 用 GroupChat 会话驱动,靠对话推进,灵活性高但顺序不确定性也更强,所以 D 的说法相反。
Q10. 某团队需要多个 Agent 直接对话、多轮协商制定方案,以下哪种方案最合适?
- A.顺序 Process 固定流水线
- B.层级 Process 主厨委派
- C.AutoGen GroupChat 圆桌← 正确答案
- D.单 Agent 一次性完成输出
答案:C。「直接对话、多轮协商」正是 AutoGen GroupChat 的圆桌会议模式;顺序与层级 Process 都是任务驱动,Agent 之间不自由对话,单 Agent 则根本没有协作。