CrewAI 是一个以”角色扮演”为核心范式多智能体框架,它让你把复杂任务拆解成多个有明确职责的 Agent(如研究员、作家、审校),由它们像一支团队一样协作完成工作。相比把全部逻辑塞进单个大模型对话,角色化分工能显著提升输出的专业度与可控性。本文从核心抽象讲起,带你用 CrewAI 跑通第一个 Crew,并给出生产化与成本控制要点。
一、为什么需要角色化多智能体
1.1 单 Agent 的天花板
单个大模型对话在面对”既要检索资料、又要写报告、还要保证事实准确”的复合任务时,往往顾此失彼:它可能在同一个上下文里反复横跳,既当裁判又当运动员,结果要么遗漏关键信息,要么给出看似合理却经不起推敲的结论。人类团队之所以高效,是因为有分工——有人负责找资料,有人负责动笔,有人负责挑错。多智能体框架正是把这套组织方式搬到 AI 工作流里。
1.2 CrewAI 的核心抽象
CrewAI 把协作拆成四个清晰的层次:Agent(角色) 定义”谁来做”,包含角色定位(role)、目标(goal)与背景故事(backstory);Task(任务) 定义”做什么”,描述期望产出与可调用工具;Crew(团队) 把多个 Agent 与 Task 组合起来,并指定协作流程(顺序或层级);Flow(流程) 则进一步用代码编排多步、带状态的工作流。这种”角色—任务—团队”的抽象非常贴近真实团队,上手成本低、可读性高。它与 AutoGen 的群聊式编排、LangGraph 的状态图编排 思路不同,更强调”职责隔离”,适合流程相对固定的业务场景。
| 维度 | CrewAI | AutoGen | LangGraph |
|---|---|---|---|
| 核心隐喻 | 角色化团队 | 可对话 Agent 群 | 状态图/节点 |
| 擅长场景 | 固定流程协作 | 自由讨论求解 | 复杂有环流程 |
| 上手难度 | 低 | 中 | 较高 |
| 可控性 | 高(角色约束) | 中 | 高(显式图) |
| 与业务耦合 | 角色即岗位 | 对话即逻辑 | 图即流程 |
二、5 分钟跑通第一个 Crew
2.1 安装
# 安装核心与官方工具集
pip install crewai crewai-tools
# 如需联网检索等能力,再装具体工具依赖
pip install duckduckgo-search
2.2 定义角色与任务
下面用”调研一个技术趋势并产出简报”作为示例:研究员负责搜集信息,作家负责成文。
from crewai import Agent, Task, Crew
researcher = Agent(
role="资深技术调研员",
goal="搜集并核实关于 {topic} 的最新事实与数据",
backstory="你拥有十年技术媒体经验,只输出可溯源的信息。",
verbose=True,
)
writer = Agent(
role="技术专栏作家",
goal="把调研结果写成 800 字通俗易懂的简报",
backstory="你擅长把复杂概念讲给工程师听。",
verbose=True,
)
research_task = Task(
description="调研 {topic} 的主流方案、优缺点与代表项目",
expected_output="3-5 条带来源的事实要点",
agent=researcher,
)
write_task = Task(
description="基于调研要点撰写简报",
expected_output="一篇结构清晰的简报",
agent=writer,
context=[research_task], # 依赖上一个任务的结果
)
crew = Crew(agents=[researcher, writer], tasks=[research_task, write_task])
result = crew.kickoff(inputs={"topic": "向量数据库"})
print(result)
2.3 运行与观察
设置环境变量 OPENAI_API_KEY(或 CrewAI 支持的其它模型后端)后直接运行。开启 verbose=True 能在终端看到每个 Agent 的推理过程,便于调试分工是否合理。注意 context 参数让作家任务自动拿到调研任务的产出,这是多 Agent 协作的关键纽带。
三、给 Agent 装上工具
3.1 内置工具与自定义工具
没有工具的 Agent 只能凭记忆作答,容易编造。CrewAI 通过 tools 注入真实能力,例如联网搜索、读取文档、调用 API。也可以把任意 Python 函数包装成工具,让 Agent 在需要时调用。
from crewai_tools import SerperDevTool, ScraperTool
search = SerperDevTool()
scraper = ScraperTool()
researcher = Agent(
role="资深技术调研员",
goal="搜集并核实关于 {topic} 的最新事实",
backstory="你只输出可溯源的信息。",
tools=[search, scraper], # 赋予联网检索与网页抓取能力
verbose=True,
)
# 自定义工具:把内部 API 封装给 Agent 调用
from crewai.tools import tool
@tool("查询内部订单量")
def order_count(day: str) -> str:
"""根据日期返回当日订单总量,参数格式 YYYY-MM-DD。"""
# 这里调用真实后端或数据库
return f"{day} 订单量:12893"
四、用 Flow 编排多步流程
4.1 用 @CrewBase 组织项目
当任务从”跑一次 Crew”升级为”可复用的流水线”,可以用 CrewBase 把角色、任务、团队集中声明,配合 @agent、@task 装饰器管理依赖,代码结构更清晰、更易维护。下面给出一个最小骨架:
from crewai import Agent, Task, Crew, Process
from crewai.project import CrewBase, agent, task, crew
@CrewBase
class BriefCrew:
agents_config = "config/agents.yaml"
tasks_config = "config/tasks.yaml"
@agent
def researcher(self) -> Agent:
return Agent(config=self.agents_config["researcher"], verbose=True)
@agent
def writer(self) -> Agent:
return Agent(config=self.agents_config["writer"], verbose=True)
@task
def research(self) -> Task:
return Task(config=self.tasks_config["research"])
@task
def write(self) -> Task:
return Task(config=self.tasks_config["write"], context=[self.research()])
@crew
def crew(self) -> Crew:
return Crew(agents=[self.researcher(), self.writer()],
tasks=[self.research(), self.write()],
process=Process.sequential)
五、生产化要点
5.1 成本控制与超时
多 Agent 意味着多次模型调用,token 消耗会成倍增长。务必给每个 Agent 设置 max_rpm(每分钟最大请求数)防止触发限流,给 Task 设置 max_retry_limit 避免单次失败拖垮整条链路。结合 vLLM/SGLang/Ollama 等推理引擎 把底层模型替换为自建或低价端点,是压低单位成本最直接的手段;若是本地场景,可参考 本地大模型量化部署 把 Agent 跑在自有算力上。
5.2 错误重试与人工介入
生产中不要假设模型永远稳定。对关键任务启用重试与回退(fallback)模型;对涉及写操作或对外发送的任务,预留人工确认(human-in-the-loop)断点。把每次运行的输入、中间产物、最终输出落库,方便复盘与审计。
| 生产检查项 | 建议 |
|---|---|
| 速率限制 | 设置 max_rpm,避免触发 429 |
| 失败重试 | Task 级 max_retry_limit + 回退模型 |
| 成本控制 | 优先低价/本地推理端点 |
| 可观测 | 开启 verbose 并持久化轨迹日志 |
| 人工介入 | 写操作前加确认断点 |
六、与既有 AI 栈的协同
CrewAI 不是孤岛。它可与 Dify + Ollama 搭建的私有 Agent 平台 互补——Dify 负责可视化编排与知识库,CrewAI 负责代码侧精细化的角色协作;也能和 Semantic Kernel、Spring AI 在企业 Java 体系中各司其职。如果你的团队已经在用上述任一框架,引入 CrewAI 的成本主要是”把业务岗位翻译成角色定义”,而非重写基础设施。
七、什么时候该用 CrewAI
当你的任务满足”可拆成多个职责、彼此有先后依赖、且希望每个环节产出可控”时,CrewAI 是低门槛的好选择。例如竞品分析、周报生成、代码评审流水线、客服工单分类与回复起草,都非常契合角色化分工。反之,若任务高度动态、需要 Agent 之间自由辩论才能收敛,AutoGen 的群聊模式可能更合适;若流程充满条件分支与回环,LangGraph 的图编排会更顺手。先用 CrewAI 把一个固定流程跑顺,再按需升级复杂度,是最稳妥的落地节奏。把”让 AI 组队干活”从概念变成可运行的生产力,往往就从定义第一个角色开始。




