多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

AI Agent白手起家74: CrewAI 核心组件详解——从智能体到知识库

AI Agent白手起家74: CrewAI 核心组件详解——从智能体到知识库 纲要组件概览Agent、Task、Crew、Flow、Knowledge、MemoryAgent团队中的最小执行单元YAML 配置化定义纯代码定义运行代码与工具集成Task智能体的工作任务配置与依赖关系结构化输出Crew组建专业团队配置式与代码式两种风格启动与输出Flow编排多个团队基于修饰符的事件驱动状态管理知识库与记忆文本和 URL 加载嵌入模型切换短期、长期、实体、情境记忆完整可运行示例一个带搜索和报告的团队总结与相关度说明组件概览CrewAI的整个框架围绕六个核心组件展开它们的分工和层级关系如下表所示组件角色类比Agent执行具体工作的个体员工Task分配给 Agent 的工作项任务单Crew管理 Agent 和 Task 的团队小组Flow编排多个 Crew 的流水线部门协作流程Knowledge外挂知识库RAG参考资料库Memory短期/长期/实体/情境记忆工作笔记理解这些组件后你就能像搭积木一样组装出复杂的多智能体应用。Agent团队中的最小执行单元Agent是CrewAI的原子单元每个Agent拥有独立的角色、目标、背景故事可以绑定工具、记忆和特定的大语言模型。CrewAI提供了两种定义方式YAML 配置和纯代码。YAML 配置式定义在src/config/agents.yaml中声明researcher:role:高级数据研究员goal:发掘某一话题领域的前沿发展backstory:你是一名经验丰富的研究员擅长发现最新信息并以清晰简洁的方式呈现。reporting_analyst:role:报告分析师goal:基于数据分析和研究发现创建详细报告backstory:你是一位一丝不苟的分析师能够将复杂数据转化为清晰简洁的报告。代码中通过agent修饰符引用fromcrewaiimportAgent,Crew,Task,Processfromcrewai.projectimportCrewBase,agent,task,crewCrewBaseclassMyCrew:agentdefresearcher(self)-Agent:returnAgent(configself.agents_config[researcher],verboseTrue,tools[search_tool]# 可选绑定搜索工具)agentdefreporting_analyst(self)-Agent:returnAgent(configself.agents_config[reporting_analyst],verboseTrue)纯代码定义不使用配置文件直接在代码中传参agentAgent(role资深Python开发者,goal编写高质量、安全的Python代码,backstory你有十年Python开发经验熟悉安全编码规范。,allow_code_executionTrue,# 允许执行代码code_execution_modesafe,# 安全沙箱模式tools[my_tool],memoryTrue,verboseTrue)两种方式等价配置式更适合规范化项目代码式更灵活。Task智能体的工作任务每个Task描述一个具体的工作项支持依赖关系和结构化输出。YAML 配置式定义在tasks.yaml中声明research_task:description:对{topic}进行深入研究找出有趣且相关的信息。当前年份是2025年。expected_output:包含10个要点的列表列出关于{topic}的相关信息agent:researcherreporting_task:description:基于研究结果创建一份详细报告。expected_output:一份完整的Markdown报告agent:reporting_analystoutput_file:report.mdcontext:[research_task]# 依赖 research_task 完成后执行代码中引用taskdefresearch_task(self)-Task:returnTask(configself.tasks_config[research_task])taskdefreporting_task(self)-Task:returnTask(configself.tasks_config[reporting_task])结构化输出Task支持output_pydantic或output_json来强制指定输出格式frompydanticimportBaseModelclassBlogPost(BaseModel):title:strcontent:strblog_taskTask(description写一篇关于多智能体架构的博客,agentwriter,expected_output结构化的博客文章,output_pydanticBlogPost)执行后task.output.pydantic将返回一个BlogPost实例。Crew组建专业团队Crew把Agent和Task组合成一个可执行的工作单元并指定执行策略顺序或层次化。配置式组合crewdefcrew(self)-Crew:returnCrew(agents[self.researcher(),self.reporting_analyst()],tasks[self.research_task(),self.reporting_task()],processProcess.sequential,# 顺序执行verboseTrue,memoryTrue,# 开启记忆knowledge_sources[...]# 挂载知识库)代码式组合不依赖配置文件crewCrew(agents[agent1,agent2],tasks[task1,task2],processProcess.sequential,verboseTrue)resultcrew.kickoff()print(result)Flow编排多个团队Flow用于串联多个Crew形成更复杂的业务流程。它基于事件和修饰符驱动类似LangGraph的图结构。fromcrewai.flowimportFlow,start,listenclassCityFactFlow(Flow):start()defgenerate_city(self):city北京# 模拟随机生成self.state[city]cityreturncitylisten(generate_city)defgenerate_fact(self,city):# 根据城市生成有趣事实returnf{city}是中国的首都拥有超过3000年的历史。flowCityFactFlow()resultflow.kickoff()start标记入口节点listen标记监听其他节点的输出自动建立依赖。知识库与记忆知识库CrewAI将 RAG 封装为高级接口支持文本字符串和 URL 两种源。fromcrewai.knowledge.source.string_knowledge_sourceimportStringKnowledgeSource contentTommy住在北京今年25岁。sourceStringKnowledgeSource(contentcontent)crewCrew(agents[qa_agent],tasks[qa_task],knowledge_sources[source],embedder{provider:openai,config:{model:text-embedding-3-small,api_key:your-api-key}})resultcrew.kickoff()URL 源类似使用CrewDoclingSource并传入 URL 列表。注意默认嵌入模型为 OpenAI如需使用其他模型如 Ollama须修改embedder配置。记忆在Crew中开启memoryTrue即可激活四种记忆类型记忆类型作用短期记忆当前对话上下文长期记忆跨会话持久化存储实体记忆自动抽取人物、地点等实体情境记忆维护交互的连贯性底层存储可通过memory_config配置例如使用 SQLite 存储长期记忆。完整可运行示例带搜索的研究团队下面构建一个完整的“新闻研究助手”团队它先搜索最新动态再生成分析报告。环境准备pipinstallcrewai crewai-tools python-dotenv.env配置OPENAI_API_KEYsk-xxxx SERPAPI_API_KEYyour-serpapi-key代码research_crew.pyimportosfromdotenvimportload_dotenvfromcrewaiimportAgent,Task,Crew,Processfromcrewai_toolsimportSerperDevTool load_dotenv()# 1. 搜索工具search_toolSerperDevTool()# 2. 定义 AgentresearcherAgent(role信息检索专家,goal查找关于指定主题的最新新闻和信息,backstory你擅长使用搜索引擎能快速找到高质量的信息来源。,tools[search_tool],verboseTrue,allow_delegationFalse)analystAgent(role分析报告撰写人,goal基于搜索到的信息撰写一份专业分析报告,backstory你善于提炼关键信息并用清晰的结构呈现。,verboseTrue,allow_delegationFalse)# 3. 定义 Tasksearch_taskTask(description搜索关于{topic}的最新动态找到至少5条相关信息。,agentresearcher,expected_output包含5条以上新闻标题和摘要的列表)write_taskTask(description根据搜索到的信息写一份关于{topic}的300字分析报告。,agentanalyst,expected_output一份结构完整的分析报告,context[search_task])# 4. 组建团队crewCrew(agents[researcher,analyst],tasks[search_task,write_task],processProcess.sequential,verboseTrue)# 5. 执行resultcrew.kickoff(inputs{topic:2024人工智能发展趋势})print(\n 最终输出 \n)print(result)执行python research_crew.py控制台会依次展示搜索和报告生成的过程最终输出一份分析报告。总结CrewAI通过高度封装的组件体系将多智能体开发简化为“配置角色、分配任务、组建团队、编排流程”四个步骤。与LangGraph相比它的学习曲线更平滑特别适合快速构建原型和业务流程自动化。但当需要深度定制底层行为时LangGraph的细粒度控制仍是不可替代的。两者可以互补使用。本文覆盖了 CrewAI 的 Agent、Task、Crew、Flow、知识库、记忆等所有核心组件包括 YAML 配置与代码定义两种方式、结构化输出、依赖关系、嵌入模型切换等技术要点并提供了示例代码。
返回列表