大家好,我是木木。
今天给大家分享一个协作的 Python 库,crewai。
crewai
如果说单个 AI Agent 像一个会调用工具的助手,那多 Agent 协作更像一个小团队:有人负责研究,有人负责写作,有人负责校验,有人负责执行。crewai 做的就是把这些角色、任务、工具和执行流程组织起来,让“多个 AI 分工干活”变成可维护的工程结构。
项目地址:https://github.com/crewAIInc/crewAI
官方文档:https://docs.crewai.com
三大特点
角色清楚
每个 Agent 都有自己的 role、goal 和 backstory,适合把复杂任务拆成不同职责。
流程可控
任务可以绑定 Agent,也可以设置上下文依赖,再由 Crew 用顺序流程或其它模式组织执行。
工具可接
Agent 可以挂载业务工具,让模型不只是生成文本,还能查询订单、读取系统、调用内部能力。
最佳实践
安装方式:python -m pip install crewai==1.14.4
真正运行 CrewAI 通常需要配置 LLM 凭证。下面的例子只构建对象和配置,不调用 crew.kickoff(),所以不会请求外部模型,也不会消耗 API 额度。
功能一:建一个小型多 Agent 团队
这段代码解决什么问题:把“研究员先整理信息、编辑再写内容”这种协作关系显式建模。任务之间通过 context 串起来,Crew 用 Process.sequential 表示顺序执行。
importosimportwarningswarnings.filterwarnings("ignore")os.environ["CREWAI_DISABLE_TELEMETRY"]="true"fromcrewaiimportAgent,Task,Crew,Processresearcher=Agent(role="资料研究员",goal="整理库的关键特性",backstory="擅长把技术资料拆成要点",llm="openai/gpt-4o-mini")writer=Agent(role="文章编辑",goal="把研究结果写成短文",backstory="擅长面向开发者表达",llm="openai/gpt-4o-mini")research_task=Task(description="列出 crewai 的三个核心能力",expected_output="三条要点",agent=researcher)write_task=Task(description="基于研究结果写一段介绍",expected_output="一段中文介绍",agent=writer,context=[research_task])crew=Crew(agents=[researcher,writer],tasks=[research_task,write_task],process=Process.sequential)print("agents:",len(crew.agents))print("tasks:",len(crew.tasks))print("process:",crew.process.value)fortaskincrew.tasks:print(task.agent.role,"->",task.description[:16])
这个结构最大的好处是边界清楚。后续如果研究任务质量不好,就调研究员的 goal、backstory 或工具;如果表达不对,就调编辑 Agent,而不是把所有要求塞进一个巨大 prompt。
功能二:给 Agent 挂业务工具
这段代码解决什么问题:Agent 不应该只会聊天。通过 @tool 可以把内部查询、计算、文件处理等能力挂到 Agent 身上,让它在任务中按需调用。
importosimportwarningswarnings.filterwarnings("ignore")os.environ["CREWAI_DISABLE_TELEMETRY"]="true"fromcrewaiimportAgentfromcrewai.toolsimporttool@tool("order_status")deforder_status(order_id:str)->str:"""Return a local order status for demo purposes."""return{"A-1001":"paid","A-1002":"review"}.get(order_id,"missing")agent=Agent(role="运营助手",goal="查询订单状态并给出建议",backstory="熟悉内部订单系统",tools=[order_status],llm="openai/gpt-4o-mini")print("agent:",agent.role)print("tools:",len(agent.tools))foriteminagent.tools:print(item.name,"->",item.description.splitlines()[0])print("local call:",order_status.run("A-1001"))
工具设计要小而清楚:输入输出明确、错误可解释、写操作可回滚。不要把数据库密码、Token 或用户隐私直接写进 prompt,凭证仍然应该放在本地配置或密钥系统里。
环境与版本信息
- Demo 环境:Windows 11,Python 3.11
- 当前包要求 Python:
>=3.10,<3.14 - 关键依赖版本:
openai 2.35.1、chromadb 1.1.1、pydantic 2.12.5 - 项目最近一次提交时间:
2026-05-07T04:40:08+08:00 - 说明:安装
crewai 会调整部分共享依赖,和其它 Agent 库共用同一个 Python 环境时要单独留意
高级功能
这段代码解决什么问题:多 Agent 应用最怕输出格式飘。给 Task 配置 output_pydantic,可以让任务目标明确成结构化结果,后续更容易进入数据库、接口或评审流程。
importosimportwarningswarnings.filterwarnings("ignore")os.environ["CREWAI_DISABLE_TELEMETRY"]="true"frompydanticimportBaseModel,FieldfromcrewaiimportAgent,TaskclassArticlePlan(BaseModel):title:str=Field(description="文章标题")sections:list[str]=Field(description="章节列表")planner=Agent(role="选题规划师",goal="规划一篇技术文章",backstory="擅长拆解读者关心的问题",llm="openai/gpt-4o-mini")task=Task(description="为 crewai 写一份文章提纲",expected_output="包含标题和章节列表的 JSON",agent=planner,output_pydantic=ArticlePlan,markdown=True)print("task:",task.description)print("agent:",task.agent.role)print("structured:",task.output_pydantic.__name__)print("markdown:",task.markdown)print("fields:",", ".join(ArticlePlan.model_fields))
结构化输出不是万能保险,但能显著降低下游对文本的猜测成本。我的建议是:凡是要入库、触发审批、调用接口的任务,都尽量给出明确 schema。
适用场景
- 你想把一个复杂 AI 任务拆成研究、执行、校验、写作等多个角色
- 你需要让 Agent 调用内部工具,而不是只靠自然语言回答
不适用场景
- 只是一次简单问答或单步总结,一个普通 LLM 调用就够了
- 你的任务必须完全确定性执行,不能接受模型判断带来的波动
- 团队还没有凭证管理、日志审计和人工确认机制,却想直接让 Agent 做写操作
上线检查
- Agent 的 role、goal、backstory 要短而明确,不要把所有职责堆给一个 Agent。
- 工具要设置输入校验、错误处理和权限边界,写操作最好加人工确认。
- 给关键任务配置结构化输出、日志、超时、重试和测试样本,再接真实业务。
总结
crewai 很适合把“多个 AI 分工协作”落成代码结构。它的重点不是炫技式堆 Agent,而是把角色、任务、工具和流程拆清楚。用得好,它可以让复杂 AI 应用更像一个可维护的小团队。