CrewAI 是一个轻量、快速的 Python 框架,用于构建协作式 AI 智能体团队和结构化工作流。它让开发者创建具有特定角色、工具和目标的自主 AI 智能体,使其协同完成复杂任务。本技能涵盖 Crews(自主协作)、Flows(结构化编排)、智能体、任务以及企业部署。
核心概念
智能体(Agents):专业团队成员 智能体是具有特定角色、目标和能力的自主 AI 单元。通过 from crewai import Agent 导入,可设置 role(角色)、goal(目标)、backstory(背景故事)、verbose(详细日志)、allow_delegation(是否可委派任务)、tools(可用工具)、llm(自定义 LLM 配置)、max_iter(最大迭代次数)、max_rpm(每分钟请求限制)、memory(启用记忆)、cache(启用响应缓存)以及 system_template、prompt_template、response_template 等自定义模板。
任务(Tasks):独立的工作分配 任务定义智能体需要完成的具体工作。通过 from crewai import Task 导入,可设置 description(任务描述)、expected_output(期望输出格式)、agent(执行智能体)、tools(任务专属工具)、context(依赖的前置任务)、async_execution(异步执行)、output_json / output_pydantic(结构化输出)、output_file(输出到文件)、callback(完成回调)、human_input(请求人工反馈)等。
Crews:组织智能体团队 Crews 编排智能体共同朝着一个目标工作。通过 from crewai import Crew, Process 导入,可设置 agents、tasks、process(Process.sequential 顺序执行或 Process.hierarchical 层级执行)、verbose、memory、cache、max_rpm、share_crew 等。使用 crew.kickoff() 启动,也可通过 inputs 传入自定义输入。层级流程需要指定 manager_llm。
Flows:结构化工作流编排 Flows 提供事件驱动、确定性的执行路径控制。通过 from crewai.flow.flow import Flow, listen, start 导入,使用 @start() 标记入口点,@listen() 监听前置步骤输出。支持 Flow State Management(通过 Pydantic BaseModel 管理状态)和 Router Pattern(使用 @router 根据条件路由到不同处理函数)。
工具(Tools):扩展智能体能力 内置工具通过 from crewai_tools import ... 导入,包括 SerperDevTool(Google 搜索)、ScrapeWebsiteTool(网页抓取)、FileReadTool(读取文件)、DirectoryReadTool(读取目录)、CodeDocsSearchTool、CSVSearchTool、JSONSearchTool、MDXSearchTool、PDFSearchTool、TXTSearchTool、WebsiteSearchTool、SeleniumScrapingTool、YoutubeChannelSearchTool、YoutubeVideoSearchTool 等。自定义工具可继承 BaseTool 并实现 _run 方法,也可直接将函数作为工具传入。
记忆(Memory):从过往交互中学习 在 Crew 中设置 memory=True 可启用所有记忆类型,也可通过 memory_config 配置 short_term(单次运行内记忆)、long_term(跨运行记忆)、entity(实体记忆)。
知识(Knowledge):RAG 集成 通过 from crewai import knowledge 导入,可使用 StringKnowledgeSource、PDFKnowledgeSource、TextKnowledgeSource 等创建知识源,并在 Agent 中通过 knowledge_sources 参数使用。
结构化输出(Pydantic) 在 Task 中设置 output_pydantic 为 Pydantic 模型,执行后可通过 task.output.pydantic 获取结构化结果。
训练(Training) 使用 crew.train(n_iterations=..., inputs=..., filename=...) 进行训练循环,并通过 Crew.load('trained_crew.pkl') 加载训练后的 crew。
人工介入(Human-in-the-Loop) 在 Task 中设置 human_input=True,任务将暂停并请求人工输入。
测试 Crews 可使用 pytest 对 crew 进行测试,通过 crew.kickoff(inputs=...) 执行并断言结果,也可使用 mock 智能体进行测试。
自定义 LLM 可使用 langchain_openai 的 ChatOpenAI 等自定义 LLM,在 Agent 中通过 llm 参数设置,或在 Crew 中通过 manager_llm 设置(用于层级流程)。
异步执行 支持 await crew.kickoff_async(inputs=...) 异步启动,以及 crew.kickoff_for_each(inputs=inputs_list) 并行执行。
回调与事件监听 Task 支持 callback 参数,Agent 支持 step_callback 和 task_callback。
企业部署 环境配置:可设置 OPENAI_API_KEY、SERPER_API_KEY、CREWAI_API_KEY(CrewAI+ 企业版)、LANGCHAIN_TRACING_V2、LANGCHAIN_API_KEY 等环境变量。 项目结构:包含 src 目录、main.py、crew.py、config 目录(agents.yaml、tasks.yaml)、tools 目录、tests 目录、pyproject.toml、README.md。 YAML 配置:agents.yaml 定义智能体的 role、goal、backstory;tasks.yaml 定义任务的 description、expected_output、agent、context。
最佳实践 智能体设计:给予清晰具体的角色,提供详细背景故事,限制工具数量,为管理者启用委派,开发时使用 verbose 模式;避免模糊或重叠的角色、过多工具、缺少背景故事、过于复杂的目标。 任务设计:编写清晰可执行的描述,明确期望输出格式,设置正确的任务依赖。