CrewAI:编排角色化 AI 代理团队完成复杂任务
什么是 CrewAI?一句话理解多代理协作
CrewAI 是一个开源的多代理编排框架,它的核心思想是:将多个拥有不同角色、技能和目标的 AI 代理组成一个团队,通过分工协作完成复杂的、多步骤的任务。
你不再需要反复调教一个“全能型”大模型,而是像管理一个小型项目团队一样,给每个代理分配明确的角色——研究员、分析师、写手、审核员——然后让它们按流程自主交互、传递信息、迭代产出,最终交付高质量结果。
CrewAI 构建在 LangChain 等大模型应用框架之上,但重点解决了 代理间通信、任务依赖管理、上下文共享与角色限定 等编排问题,让开发者可以像定义工作流一样定义一支 AI 团队。
核心概念:代理、任务、工具与流程
理解 CrewAI 只需要掌握四个核心对象,它们共同描述了一支 AI 团队的全部行为。
1. 代理(Agent)
代理是团队中的成员。每个代理都需要明确:
- 角色:它在团队中的职能,例如“资深技术研究员”
- 目标:它要达成什么,例如“收集关于量子计算的权威资料”
- 背景故事:用自然语言描述的个性与专长,这会深度影响模型的回答风格与决策逻辑
- 可用工具:该代理可以调用的外部能力,如搜索、读写文件、调用 API
- 是否允许委派:是否可以与其他代理沟通或移交任务
示例定义(伪代码):
researcher = Agent(
role='资深研究员',
goal='找到关于{主题}的最新技术文档和论文',
backstory='你是一位严谨的研究者,擅长从海量信息中筛选出高质量来源,并给出清晰总结。',
tools=[search_tool, browser_tool],
allow_delegation=False
)
2. 任务(Task)
任务是代理需要执行的一个具体工作单元,具有:
- 描述:清晰说明要做什么、产出格式是什么
- 指派的代理:谁负责这个任务
- 期望输出:产出规格,例如“一份包含摘要、核心观点和引用链接的 Markdown 报告”
- 上下文:是否依赖其他任务的输出
任务之间可以通过 context 参数建立依赖链,CrewAI 会自动按依赖顺序执行,并将上游输出作为下游的输入。
示例定义:
research_task = Task(
description='搜索量子计算在制药领域的应用案例,至少收集5个真实案例。',
expected_output='一份结构化的案例列表,每个案例包含公司、应用方向和简短说明。',
agent=researcher
)
3. 工具(Tool)
工具是扩展代理能力的外部模块。可以是:
- 内置工具:如
SerperDevTool(搜索)、WebsiteSearchTool(网页浏览) - 自定义工具:用 LangChain 的
@tool装饰器轻松封装自己的函数 - 第三方集成:数据库查询、API 请求、企业系统连接等
工具让代理不再只是“纯文本生成器”,而是能执行动作的智能体。工具越精准,代理产出质量越高。
4. 流程(Process)
流程定义了任务执行顺序以及代理间的协作方式。CrewAI 提供两种内置流程:
- 顺序流程(Sequential):任务一个接一个线性执行,前一个任务的输出成为后一个的输入
- 层级流程(Hierarchical):存在一个管理者代理,它负责分解目标、分配子任务给不同代理,并综合结果。适合需要动态规划和复杂决策的场景
你还可以通过自定义 Process 子类实现更复杂的工作流,但大多数情况下两种内置模式已经足够。
快速上手:搭建你的第一支 AI 团队
下面是一个可运行的完整示例,实现一支“科技新闻自动简报团队”,包含研究员和写手两个角色。
环境准备
pip install crewai crewai-tools
配置大模型接口(以 OpenAI 为例),设置环境变量 OPENAI_API_KEY。CrewAI 也支持本地模型通过 ollama 等方式接入。
步骤1:定义工具
from crewai_tools import SerperDevTool
search_tool = SerperDevTool()
步骤2:创建代理
from crewai import Agent
researcher = Agent(
role='首席科技研究员',
goal='搜集今日最值得关注的科技新闻,覆盖 AI、半导体和航天领域',
backstory='你是一位拥有十年经验的科技记者,擅长快速筛选重要信息并以批判性视角解读。',
tools=[search_tool],
verbose=True
)
writer = Agent(
role='科技内容撰稿人',
goal='根据研究员的发现,撰写一篇吸引人且信息准确的简报',
backstory='你是一位面向大众的科技写手,能把复杂概念讲得通俗易懂,同时保持专业严谨。',
verbose=True
)
步骤3:定义任务并绑定代理
from crewai import Task
research_task = Task(
description='搜索今日 AI、半导体、航天领域的重要新闻,每个领域至少找到2条头条级消息。',
expected_output='一个字典,key 为领域,value 为新闻摘要列表。每条摘要包含标题和关键事实。',
agent=researcher
)
writing_task = Task(
description='使用研究员收集的新闻,撰写一份科技早报,包括标题、导语、各领域重点新闻和一小段编辑评论。格式为 Markdown。',
expected_output='一份完整的科技早报 Markdown 文本,可即刻发布。',
agent=writer,
context=[research_task] # 明确引用调研结果
)
步骤4:创建 Crew 并启动
from crewai import Crew, Process
crew = Crew(
agents=[researcher, writer],
tasks=[research_task, writing_task],
process=Process.sequential,
verbose=True
)
result = crew.kickoff()
print(result)
运行后你会看到代理间的对话流和最终输出的结构化简报。这就是 CrewAI 最基本的用法。
深入理解:上下文传递与记忆机制
光有任务依赖还不够,复杂项目中代理需要记住已发生的事情并理解大的上下文。CrewAI 提供多层记忆体系。
短期记忆与工作记忆
- 短期记忆:当前执行过程中各任务产生的中间结果,自动在上下文变量中传递
- 工作记忆:代理在单次推理中能直接使用的窗口,由大模型上下文长度决定
长期记忆与实体记忆
CrewAI 支持接入向量数据库(如 Chroma、Weaviate)实现长期记忆。你可以让代理记住:
- 用户偏好与历史反馈
- 以前执行类似任务时的成功模式
- 关键实体的信息(公司、人物、产品),避免重复查询
配置记忆示例:
crew = Crew(
agents=[...],
tasks=[...],
memory=True, # 开启默认内存记忆
embedder={
"provider": "openai",
"config": {"model": "text-embedding-3-small"}
}
)
这样代理就能在多次交互中积累知识,越来越“懂你”。
高级编排:层级流程与管理者代理
当任务目标复杂且难以预先规划所有步骤时,层级流程就派上用场。它会自动生成一个管理者代理,负责:
- 理解最终目标
- 动态分解为子任务
- 将子任务分配给最合适的专家代理
- 审查子任务结果,决定是否需要重做或进一步分解
- 综合所有结果形成最终交付
管理者代理本身也是一个 Agent,可以配置完全不同的模型和指令,但它不能使用工具,主要职责是思考、规划和沟通。
启用层级流程示例:
crew = Crew(
agents=[analyst, coder, reviewer],
tasks=[overall_task], # 通常只定义一个总目标任务
process=Process.hierarchical,
manager_llm=ChatOpenAI(model="gpt-4o") # 管理者可用更强模型
)
这种方式适合代码生成、复杂分析报告、策略规划等不确定性较高的场景。
实战技巧与避坑指南
1. 角色描述越具体,代理表现越好
不要只写“你是一个助手”,要写明专业知识范围、思考习惯、输出风格,甚至可以加入约束(如“永远不要捏造数据,不确定时请注明”)。
2. 工具的描述至关重要
工具的定义中要写明何时使用、输入输出是什么,这直接影响模型能否正确调用工具。描述要像给 API 写文档一样清晰。
3. 合理拆分任务粒度
单一任务不要超过代理单次推理能胜任的范围。如果任务需要多步推理和大量信息处理,应拆成多个顺序子任务。
4. 充分测试上下文窗口
当上下文积累过长时,模型可能遗忘早期信息或产生幻觉。使用 expected_output 约束产出长度,或利用记忆将关键信息外化保存。
5. 用好 verbose 调试
开发阶段开启 verbose=True,观察代理间确切的对话和工具调用日志,能快速定位问题。
对比其他框架:为什么选择 CrewAI?
| 特性 | CrewAI | AutoGen | MetaGPT |
|---|---|---|---|
| 编程范式 | 声明式角色+任务 | 灵活的对话模式 | 以软件公司角色模拟 |
| 易用性 | 极高,概念清晰 | 中等,需理解代理对话 | 中等,强依赖预定义角色 |
| 工作流控制 | 顺序与层级内置 | 通过图表或多代理编排 | 阶段式流程 |
| 记忆与上下文 | 原生多层级记忆 | 需自行管理 | 有限的内置记忆 |
| 适用场景 | 通用任务团队化 | 研究、复杂对话和代码 | 软件工程复杂项目 |
CrewAI 的优势在于极低的学习曲线和清晰的角色化思维,非常适合将现有业务工作流快速转化为 AI 多代理协作。同时其底层基于 LangChain,易于扩展工具和集成。
总结与后续学习
CrewAI 为你提供了一种将大模型从“单兵作战”升级为“协同团队”的简单方式。从定义一个研究员+写手的二人组,到搭建拥有管理者、专家池和长期记忆的复杂系统,它的能力边界由你的创意决定。
下一步你可以:
- 阅读 CrewAI 官方文档 掌握更多内置工具和配置细节
- 尝试为自己的生活或工作创建一个多代理助手(例如旅行规划团队:目的地研究员、预算分析师、行程撰写员)
- 探索在自有数据上构建长期记忆,让代理真正个性化
- 将 CrewAI 集成到现有应用,通过 API 暴露你的 AI 团队
多代理协作正在成为 AI 应用落地的关键范式,现在就用 CrewAI 给复杂任务找一个“团队”吧。