CrewAI: 主流的多智能体框架
大约 14 分钟
CrewAI: 主流的多智能体框架
- CrewAI的两种自动化模式:Crews & Flows
- CrewAI Flows的流程控制逻辑
- CrewAI Crews的三大模块化组件(Agents,Tasks,Crews)
- CrewAI使用案例:股票分析系统
相关概念梳理
Traditional Automation vs Agentic Automation
- Traditional Automation:依靠条件判断实现,有明确的规则驱动,固定可复现,适用于确定性、重复性任务
- Agentic Automation:借助LLM的模糊推理能力,通过语义理解和上下文推理来驱动,自主决策,多路径可选,动态多样,适应性强,适用于模糊性、高语义任务(如内容生成、决策分析)
Agent vs Multi-Agent
- Agent
- Memory: 持续追踪上下文逻辑与全局目标
- Tool: 与现实世界互动,执行实际操作
- 调用外部 API 和服务
- 集成企业内部系统(CRM、数据库等)
- 执行复杂计算或处理任务
- 与现有程序进行通信和交互
- 是一个ReAct循环: Observation -> Thinking -> Action
- Multi-Agent
- 高度专业化:每个Agent只聚焦特定任务
- 每个智能体应只承担特定任务范围,控制上下文长度与工具数量
- 工具应精挑细选,与任务高度匹配。过多工具会导致模型选择困难或误用,尤其影响小模型表现。通过确保每个智能体仅能访问其任务所需的工具来增强安全性,从而降低未经授权访问敏感数据的可能性。
- 每个智能体应只承担特定任务范围,控制上下文长度与工具数量
- 多智能体协作:模拟人类团队的交流与反馈,智能体间应能交流信息、互相评审、委派任务,形成反馈闭环,提升结果质量。
- 复杂工作流程处理:能够通过将任务分配给多个智能体来管理高级且复杂的工作流程。
- 模型灵活性:不同Agent可以针对任务特点采用不同模型
- 整体结果的质量提升:相较于单一Agent执行多任务,多个高专注度的Agent协作往往能生成更精确、更专业的结果
- 更进一步:Self-Improvement Loop: 自我改进机制,通过反馈不断优化决策逻辑与执行结果
- 智能体通过记忆学习与优化,随着时间推移输出更加可靠
- 高度专业化:每个Agent只聚焦特定任务
CrewAI的两种自动化模式:Crews & Flows

- 从宏观层面来看,CrewAI 创建了两种主要的自动化方式:团队Crews & 流程Flows
- Crew:自主协作的AI团队,其中每个智能体都有特定的角色、工具和目标(动态的智能决策)
- Crew: 团队
- Agents: 智能体
- Tasks: 任务
- Process: 协作模式(顺序执行 Sequential or 层级式执行 Hierarchical)
- Flow:实现精细的、事件驱动的控制,精确的任务编排,并原生支持 Crews(静态的工作流)
- Flow: 流程,工作流编排
- Events: 事件
- States: 状态
- Crew Support: 原生支持Crews
- Crew:自主协作的AI团队,其中每个智能体都有特定的角色、工具和目标(动态的智能决策)
- When to Use Crews vs. Flows
- 使用Crews场景
- 开放性问题,探索性任务,需要自主解决问题,创造性协作
- 使用Flows场景
- 可预测、可审计、具有确切路径
- 结合Crews和Flows场景
- 既需要结构化的流程,也需要一些自主智能
- 使用Crews场景
CrewAI Flows的流程控制逻辑
- @start():流程的起点
- @listen():监听器(当被监听的方法产生输出时,监听器方法会被触发)
- 条件逻辑 or
- 用于监听多个方法,并在任何指定方法发出输出时触发监听器方法
- 条件逻辑 and
- 仅当所有指定的方法都发出输出时才触发监听器方法
- 条件逻辑 or
- @router():根据方法的输出指定不同的路由
- @persist:管理状态的持久化,可应用于类级别和方法级别
CrewAI Crews的三大模块化组件(Agents,Tasks,Crews)
通过这三大组件,CrewAI 实现了从任务定义、角色分配到结果输出的完整智能工作流。
- Agents(智能体):具备目标导向行为的智能体
- 功能描述:多智能体系统的核心个体,具备自主思考与行动能力。
- 关键属性
- Role(角色):定义职责与身份
- Goal(目标):明确任务方向
- Backstory(背景故事):提供行为语境与决策依据
- Tasks(任务):智能体执行的具体目标或操作单元
- 功能描述:指导智能体执行的具体工作内容。前一任务输出可作为后一任务的输入。
- 关键属性
- Description(任务描述):明确告知智能体任务内容是什么
- Expected Output(预期结果):定义结果形式与质量标准,明确告知智能体期望完成的结果,确保输出与目标一致
- Expected Output 是一种 “强制函数(forcing function)”,它引导智能体思考如何达成目标,并确保输出符合结构化要求。这一机制能有效提升输出的可控性与一致性。
- Agent(关联智能体):指定执行者
- Crews(团队) /kruː/:一个 Crew 是由多个具备不同角色与能力的 AI 智能体组成的团队,通过协作完成复杂任务。
- 功能描述:将智能体与任务组合为可运行单元,实现协同运作。
- 关键属性:agents(智能体列表)、tasks(任务列表)、verbose(详细模式,设置 verbose=2 可启用最高级别日志输出)
CrewAI Agents协作模式
- 传统协作方式 (Sequential & Parallel)
- 顺序执行 (Sequential)
- 局限性:初始上下文可能随任务链拉长而丢失
- 并行执行 (Parallel Execution)
- 局限性:仅解决任务执行速度问题,不解决上下文丢失
- 顺序执行 (Sequential)
- 进阶协作方式:层级式调度 (Hierarchical Process)
- 核心优势:
- 单点控制:由经理智能体 (Manager Agent) 统一管理。
- 记忆目标:经理保持初始目标不丢失。
- 自动委派:经理将任务分配给其他智能体。
- 结果审查:经理审查并可要求改进任务输出。
- 实现方式:在 CrewAI 中,仅需少量代码即可切换至层级流程。
- 用户自定义:可以自定义经理智能体的策略与决策方式。
- 核心优势:
CrewAI Tools
CrewAI提供了丰富的内置工具与技能库,并支持外部工具和自定义工具
- 内置工具:提供多种开箱即用工具。
- LangChain 兼容性:CrewAI 支持所有 LangChain 工具,极大扩展了智能体可使用的工具集。
- 自定义工具:开发者可以创建自定义工具,与外部 API、数据库、CRM 或内部系统无缝集成。
CrewAI Tools的两种工具作用域(Tool Scope)
- Task 级
- 工具仅在该任务执行时可用,优先级高
- Agent 级
- 工具在Agent的所有任务中可用,优先级低
CrewAI的三类记忆机制
只需在 Crew 实例化时开启一个标志即可启用记忆功能,框架自动管理存储与调用。
启用记忆后,CrewAI 会自动激活以下三类机制,分别服务于不同层级的学习与上下文保持。
- 短期记忆(Short-Term Memory):
- 存储单次客户对话中的上下文与中间结果。
- 生命周期:仅在当前 Crew 执行期间存在。
- 功能:存储执行任务过程中产生的信息与中间结果。
- 特性:在同一 Crew 内,所有智能体共享短期记忆,实现上下文连贯与多体协作。
- 用途示例:在“规划-撰写-编辑”流程中,编辑可直接访问规划师生成的大纲与撰稿人的初稿。
- 长期记忆(Long-Term Memory):
- 保留过往客户交互与自我批评结果,帮助系统不断改进。
- 生命周期:Crew 执行结束后仍保留,存储于本地数据库。
- 功能:支持智能体从历史执行中“学习经验”。
- 机制:
- 执行完成后,智能体会进行 自我批评(Self-Critique);
- 记录如何改进下一次表现;
- 这些反馈被保存并在未来运行时自动调用。
- 效果: 让智能体“越用越聪明”,持续优化输出质量与一致性。
- 实体记忆(Entity Memory):
- 追踪客户、公司、产品等核心“实体”,以实现跨任务引用与个性化响应。
- 生命周期:与短期记忆相似,仅在当前执行期间有效。
- 功能:存储智能体正在处理的主题或实体信息。
- 示例:
- 当研究智能体分析 “OpenAI 公司” 时,系统会创建 “OpenAI” 实体;
- 其中保存了相关的产品、人员、历史与特征,供其他任务引用。
CrewAI任务的高级超参数
高级超参数用于处理复杂任务场景,可让复杂多智能体系统更灵活、安全且可控。
高级属性允许任务实现 结构化输出、人工审查与并行处理,提高系统灵活性和效率。
- 上下文 (Context)
- 作用:为任务提供额外背景信息。
- 示例:在任务开始前加载最新数据或指令。
- 回调函数 (Callback)
- 作用:任务完成后执行自定义函数。
- 示例:发送通知邮件或记录数据。
- 工具覆盖 (Overriding Agent Tools)
- 作用:用任务特定工具覆盖智能体默认工具。
- 示例:限制任务只能使用指定工具,提高安全性与效率。
- 强制人类输入 (Force Human Input)
- 作用:完成前暂停任务,等待人工审查。
- 示例:在关键决策点进行人工干预。
- 可在关键节点暂停并等待人工审查或输入,确保重要决策质量。
- 执行模式 (Execution)
- 作用:配置任务的运行方式。
- 示例:同步 (synchronous) 或 并行 (parallel) 执行。
- 并行执行 (Parallel Execution):允许任务异步运行,提升整体系统效率。
- 输出格式 (Output Format)
- 作用:指定任务输出的格式,便于后续编程、存储或作为函数参数使用。
- 示例:输出为 Pydantic 对象、JSON 或文件。
- 使用 Pydantic 模型将 LLM 模糊输出转换为强类型数据对象。
- 可输出为 JSON 文件 或其他文件格式,便于与常规编程系统集成。
智能体的设计
- 智能体设计的管理者思维
- 设计智能体时,应从“我能用 AI 做什么?”转向:“如果我要雇佣一群人来完成这个任务,我会雇佣谁?”
- 强调角色定位、任务分工、目标明确是多智能体系统成功的关键
- 精确角色定位与关键词的力量
- 仅给智能体一个通用角色(如“研究员”或“作家”)容易产生模糊、低质量的输出。优秀智能体需要 精确的角色定义和 关键词 来引导行为,就像雇佣领域专家一样。
- 在定义智能体的角色、目标和背景故事时,务必使用 最能代表专业知识的关键词。
- 示例
- 研究员 (Researcher) -> HR 研究专家 (HR Research Specialist)
- 限制研究范围,输出更专业的 HR 知识
- 作家 (Writer) -> 高级文案 (Senior Copywriter)
- 提高输出质量、语气及营销专业性
- 金融分析师 (Financial Analyst) -> FINRA 批准分析师 (FINRA Approved Analyst)
- 使用关键词(如 FINRA)引导 LLM,触发 RAG 机制,输出符合行业标准的分析结果
- 研究员 (Researcher) -> HR 研究专家 (HR Research Specialist)
- 创建出色任务的强制属性
- 清晰描述 (Clear Description):明确告知智能体任务内容是什么
- 清晰的预期结果 (Clear Expected Output):明确告知智能体期望完成的结果,确保输出与目标一致
- 构建出色工具的三大关键要素
- 多功能性 / 通用性(Versatility)
- 工具是 AI 应用模糊输入与外部系统强类型输入之间的转换器。
- 实现要点:工具必须足够灵活,能处理 LLM 提供的多样化输入,提高复用性
- 开发实践:确保 LLM 输出的参数可正确转换为外部 API 或服务所需的类型,以保证请求执行成功。
- 容错性(Fault-Tolerance)
- 背景:外部系统可能发生异常,影响智能体流程。
- 作用:工具必须能够优雅失败(Fail Gracefully)并具备自愈能力。保证系统即使遇到错误仍能继续执行,提升鲁棒性。(Self-healing),防止流程中断。
- CrewAI 机制:
- 即使工具运行异常,Crew 不会停止执行。
- 智能体会根据错误信息采取行动,例如调整输入、补充参数或尝试其他执行方法。
- 大规模部署时考虑:工具需能处理复杂文档、不符合预期的数据格式,确保系统稳定运行。
- 智能缓存(Caching)
- 背景:工具调用外部 API 或服务时可能触发速率限制或消耗时间。
- 作用:缓存机制可优化系统性能,减少重复调用,提高多智能体系统效率。节省 API 调用成本,避免速率限制,加快系统运行。
- CrewAI 特性:跨智能体缓存
- 若不同智能体使用相同工具和参数调用请求,系统会命中缓存,避免重复调用。
- 减少 API 请求次数,避免速率限制,并加速系统执行。
- 多功能性 / 通用性(Versatility)
使用CrewAI创建多智能体系统的步骤
- 定义LLM(三种方式:环境变量,使用 YAML 配置或直接在代码中定义)
- 定义Agents(两种方式:使用 YAML 配置或直接在代码中定义)
- 定义Tasks(两种方式:使用 YAML 配置或直接在代码中定义)
- 定义Tools
- 创建团队Crew
- 运行Crew
使用案例:股票分析系统
三个团队Crews
- 数据收集团队 (DataCollectionCrew) Process.sequential, allow_delegation=False
- 市场研究员 - 市场研究任务: 收集市场新闻、行业信息和公司动态
- market_researcher -> market_research_task
- 财务数据专家 - 财务数据收集任务: 获取财务报表、关键财务指标
- financial_data_expert -> financial_data_collection_task
- 技术分析师 - 技术分析任务: 收集价格数据、技术指标
- technical_analyst -> technical_analysis_task
- 数据验证专家 - 数据验证任务: 验证数据质量、处理异常值
- data_validation_expert -> data_validation_task
- 数据协调专家 - 数据协调任务: 协调和整合所有数据收集工作
- data_coordination_agent -> data_coordination_task
- 市场研究员 - 市场研究任务: 收集市场新闻、行业信息和公司动态
- 分析团队 (AnalysisCrew) Process.hierarchical, allow_delegation=True
- 高级基本面分析师 - 基本面分析任务: 评估公司基本面、财务健康状况
- fundamental_analyst -> fundamental_analysis_task
- 风险评估专家 - 风险评估任务: 分析投资风险、风险因素识别
- risk_assessment_specialist -> risk_assessment_task
- 行业研究专家 - 行业分析任务: 分析行业地位、竞争环境
- industry_expert -> industry_analysis_task
- 量化分析师 - 量化验证任务: 验证分析结论的统计显著性
- quantitative_analyst -> quantitative_validation_task
- 分析协调员 - 分析协调任务: 整合所有分析结果并形成最终判断
- analysis_coordinator -> analysis_coordination_task
- 高级基本面分析师 - 基本面分析任务: 评估公司基本面、财务健康状况
- 决策团队 (DecisionCrew) Process.hierarchical
- 投资策略顾问 - 投资策略制定任务: 生成投资建议、策略制定
- investment_advisor -> investment_strategy_task
- 报告生成专家 - 报告生成任务: 生成详细分析报告
- report_generator -> report_generation_task
- 质量控制专家 - 质量保证任务: 质量控制、结果验证
- quality_assurance_specialist -> quality_assurance_task
- 风险管理专家 - 风险评估任务: 从风险管理角度评估投资建议
- risk_manager -> risk_assessment_task
- 投资组合经理 - 投资组合优化任务: 从投资组合角度评估投资决策
- portfolio_manager -> portfolio_optimization_task
- 市场策略师 - 市场时机分析任务: 分析投资时机和策略
- market_strategist -> market_timing_task
- 道德合规官 - 合规审查任务: 从道德和合规角度审查投资建议
- ethics_compliance_officer -> compliance_review_task
- 决策主持人 - 集体决策任务: 主持投资决策委员会,进行集体讨论和决策
- decision_moderator -> collective_decision_task
- 投资策略顾问 - 投资策略制定任务: 生成投资建议、策略制定
智能投资流程Flow
- 初始化分析 initialize_analysis
- @start()
- 智能路由数据收集策略 route_data_collection
- @listen("initialize_analysis")
- @router
- 标准数据收集 standard_data_collection
- @listen("route_data_collection")
- 全面数据收集 comprehensive_data_collection
- @listen("route_data_collection")
- 实时数据收集 real_time_data_collection
- @listen("route_data_collection")
- 标准数据收集 standard_data_collection
- DataCollectionCrew.execute_data_collection
- 智能路由分析策略 route_analysis_strategy
- @listen(or_("standard_data_collection", "comprehensive_data_collection", "real_time_data_collection"))
- @router
- 深度分析 deep_analysis
- @listen("route_analysis_strategy")
- 标准分析 standard_analysis
- @listen("route_analysis_strategy")
- 快速分析 rapid_analysis
- @listen("route_analysis_strategy")
- 简化分析 simplified_analysis
- @listen("route_analysis_strategy")
- 深度分析 deep_analysis
- AnalysisCrew.execute_collaborative_analysis
- 智能路由决策策略 route_decision_strategy
- @listen(or_("deep_analysis", "standard_analysis", "rapid_analysis", "simplified_analysis"))
- @router
- 集体决策 collective_decision
- @listen("route_decision_strategy")
- 标准决策 standard_decision
- @listen("route_decision_strategy")
- 快速决策 rapid_decision
- @listen("route_decision_strategy")
- 保守决策 conservative_decision
- @listen("route_decision_strategy")
- 集体决策 collective_decision
- DecisionCrew.execute_collective_decision
- 完成分析并生成总结报告 finalize_analysis
- @listen(or_("collective_decision", "standard_decision", "rapid_decision", "conservative_decision"))
- OUTPUT: 个性化分析结果
参考Github: https://github.com/liangdabiao/crewai_stock_analysis_system
