ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

CrewAI多智能体编排实战:从零搭建Agent协作团队

CrewAI多智能体编排实战:从零搭建Agent协作团队 在 GitHub 上搜索开源多智能体项目时CrewAI 是出现频率高、上手路径也短的一个。它用 Python 把多个大模型 Agent 组织成一个协作团队让不同 Agent 扮演不同角色共同完成研究、写作、数据处理这类复杂任务。与直接用一次大模型调用硬撑整篇回答不同CrewAI 强调的是把任务拆开、把角色分清楚再按流程把结果拼起来。这篇内容适合两类读者一类是想把多智能体概念落地成可运行代码的开发者另一类是做调研、报告、资料整理等场景希望用开源方案减少重复劳动的科研人员。读完之后你可以从零搭起一个最小 Crew 项目跑通两个 Agent 的分工协作懂得怎么调关键参数也知道出现问题该从哪里查起。1. 先搞清楚 CrewAI 是什么它不是大模型而是大模型的编排层1.1 从单次调用到多角色协作问题发生了哪些变化传统的大模型调用方式是一条 Prompt 进去一条回答出来。对于简单问答这种方式足够。但遇到“先调研背景、再整理方案、最后输出报告”这类任务时单个 Prompt 会变得很长模型既要检索信息又要组织语言还要保证前后逻辑一致输出质量很难稳定。多智能体的思路是把一次复杂任务拆成多段子任务每段子任务交给一个专职 Agent。负责调研的 Agent 只做调研负责写作的 Agent 只基于调研结果写作。这样每个 Agent 的 Prompt 更短、职责更清楚、输出更容易控制。这里需要说明一个关键边界CrewAI 本身不提供大模型能力它是一个编排框架。真正生成文字的仍然是你配置的底层 LLM比如 OpenAI 系列模型或者本地部署的模型。CrewAI 负责解决 Agent 如何创建、任务如何分配、结果如何传递、流程如何执行这些问题。1.2 CrewAI 的五个核心概念在 CrewAI 里最常用的概念可以浓缩成五个Agent智能体一个有角色、目标、背景设定的执行者。它知道自己是“研究员”“写作专家”还是“数据分析师”并根据这些设定调用模型完成任务。Task任务一个具体的工作单元包含任务描述、期望输出、由哪个 Agent 执行。Crew团队Agent 和 Task 的集合。Crew 是整个编排的入口它决定哪些 Agent 参与、哪些任务要执行、按什么流程执行。Process流程执行任务的编排方式常见的是 SequentialProcess顺序执行和 HierarchicalProcess由一个 Manager Agent 动态分配任务。Tool工具Agent 可以调用的外部能力比如联网搜索、本地知识库检索、数据库查询。没有工具时Agent 只能依赖模型自身知识。理解这五个概念之后CrewAI 的代码结构就很容易读懂了先创建 Agent再定义 Task然后把它们放进 Crew最后调用 kickoff 启动。1.3 与 LangChain、AutoGen 的位置差异多智能体领域经常被拿来比较的还有 LangChain 和 AutoGen。三者不是一个东西在一个工程里甚至可能配合使用但上手思路差别明显。LangChain 是一个覆盖面很广的框架包含模型调用、Prompt 管理、记忆、检索、工具、链式调用等大量能力。智能体只是其中一部分适合需要高度定制的项目但学习曲线也最陡。AutoGen 是微软开源的多智能体对话框架核心思路是通过 Agent 之间的对话协作完成任务灵活性高但你需要更清楚地设计 Agent 之间的消息协议和终止条件。CrewAI 的差异在于它把“角色 目标 任务 流程”做成了非常直观的编程模型。你不需要自己设计复杂的消息路由只要描述清楚每个 Agent 是做什么的、任务之间是什么关系框架就会按设定流程执行。对于“零门槛上手”这个目标CrewAI 的抽象层是三者里最舒服的。注意选型时不要只看框架热度。先确认你的任务到底是“需要一个人完成多步骤”还是“真的需要多个角色互相配合”。很多场景先用单 Agent 多步骤跑通比直接上多智能体更稳定。2. 环境准备先把安装和密钥配好后面才不会反复踩坑2.1 Python 版本与虚拟环境CrewAI 是基于 Python 的框架依赖较多。它通常会要求 Python 3.10 及以上版本具体以你安装版本的依赖元数据为准。这里最推荐的实践是每个项目单独创建虚拟环境避免和系统 Python 或其他项目出现包版本冲突。python -m venv .venv激活虚拟环境# macOS / Linux source .venv/bin/activate # Windows PowerShell .venv\Scripts\Activate.ps1 # Windows CMD .venv\Scripts\activate.bat激活后命令行提示符前会出现(.venv)说明当前已经在虚拟环境里。2.2 安装 crewai 与可选工具包核心框架只需要一个包pip install crewai如果你需要 Agent 调用常见外部工具可以安装带 tools 的扩展版本pip install crewai[tools]这里要注意crewai[tools]安装的是一批常用工具封装并不是所有工具都开箱即用。部分工具需要额外 API Key比如搜索类工具通常要单独申请密钥。具体要看官方仓库 README 和工具文档。2.3 配置大模型 API KeyCrewAI 默认读取 OpenAI 兼容的环境变量。最常见的配置是设置模型 API Key# macOS / Linux export OPENAI_API_KEY你的密钥 # Windows CMD set OPENAI_API_KEY你的密钥如果你的模型服务是兼容 OpenAI 接口的第三方服务或本地服务还需要设置接口地址export OPENAI_BASE_URLhttps://你的模型服务地址为了方便项目内管理推荐使用.env文件配合 python-dotenv 加载这样密钥不会直接写在代码里也方便不同环境切换。pip install python-dotenv2.4 验证安装是否成功安装完成后先做一个最基础的导入验证确认框架能被正常加载pip show crewai再运行一段简单脚本import crewai from crewai import Agent, Task, Crew, Process print(crewai version:, crewai.__version__) print(import success)如果能正常输出版本号和 import success说明环境基本可用。如果提示找不到模块优先检查是否在同一个虚拟环境中执行了安装和运行命令。环境准备阶段的常见问题可以整理成下表检查项推荐做法出现问题时的表现Python 版本使用 3.10 或更高版本依赖解析失败、安装报错虚拟环境每个项目独立 venv与全局包冲突代码里 import 错版本pip 版本先升级 pip依赖元数据解析异常API Key写入环境变量或 .env调用时报 AuthenticationError模型接口地址非 OpenAI 服务需配置 base_url报连接错误或模型不存在3. 零门槛上手用两个 Agent 跑通一个最小 Crew3.1 先设计一个最小项目不需要一上来就构建复杂的多智能体系统。我们做一个最简单的“研究写作小团队”一个 Agent 负责查资料并整理结论另一个 Agent 负责把结论写成结构化的技术报告。这个项目的代码只有一个 Python 文件核心目的有三个验证 Agent 能不能按角色设定工作。验证两个任务按顺序执行时前一个任务的输出能否作为后一个任务的输入。验证 Crew 整体编排是否正常。3.2 创建 Agent、Task 和 Crew新建文件main.py写入以下内容from crewai import Agent, Task, Crew, Process researcher Agent( role资深研究员, goal围绕指定主题收集关键信息并整理成结论, backstory( 你有十年科技行业研究经验擅长从信息中找出关键趋势。 你的结论必须有依据不会凭空编造数字和事实。 ), verboseTrue, allow_delegationFalse, ) writer Agent( role技术写作专家, goal把研究结论改写成清晰、结构化的技术报告, backstory( 你是资深技术编辑擅长把复杂内容组织成读者容易理解的文档。 你的文档结构一定包括背景、正文和结论。 ), verboseTrue, allow_delegationFalse, ) research_task Task( description研究大模型在企业文档处理场景中的三个落地方向, expected_output包含三个方向的清单每个方向说明核心观点和适用场景, agentresearcher, ) writing_task Task( description基于研究任务输出撰写一份约 800 字的技术报告, expected_output结构完整的技术报告包含背景、正文和结论三段, agentwriter, ) crew Crew( agents[researcher, writer], tasks[research_task, writing_task], processProcess.sequential, verboseTrue, ) result crew.kickoff() print(result)3.3 运行与验证确认 API Key 已经配置好后直接运行python main.py运行过程中因为开启了verboseTrue控制台会输出每个 Agent 正在执行的步骤、调用模型的过程以及任务完成状态。整个流程是研究员先收到研究任务。研究员调用模型输出关于三个落地方向的清单。写作专家收到写作任务并拿到研究阶段的输出。写作专家生成最终报告。kickoff 的返回值就是最终报告内容通过 print 打印出来。由于底层模型不同最终文字内容每次可能不完全一样但结构应该稳定包含“研究结论 技术报告”两部分。3.4 最容易犯的三个入门错误第一个错误是忘记配置 API Key运行时会直接报认证失败日志里出现 authentication 相关字段。解决办法是回到环境变量检查确认 Key 已经 export并且没有拼写错误。第二个错误是角色和目标写得太宽泛。比如 role 只写“助手”goal 只写“帮助用户”。模型没有明确的职责边界输出就很容易变成空话。建议把角色写成具体职业把 goal 写成可衡量的交付物。第三个错误是 task 缺少expected_output。这个参数看起来只是描述其实它决定了 Agent 什么时候认为任务完成。没有明确期望输出时Agent 可能把一段简短内容当成已完成或者反复扩充导致输出冗长。4. 核心参数解析Agent、Task、Crew 分别怎么调4.1 Agent 的关键参数Agent 是 CrewAI 里最常调的对象常用参数如下参数作用常见写法设置不当的表现role角色定位“资深研究员”输出没有侧重点goal要达成的目标具体可衡量的目标目标过宽导致跑题backstory角色背景设定简要说明经验、风格、约束输出风格不稳定llm使用的模型默认读取环境变量模型不可用时报错tools可调用工具列表空列表或工具对象列表需要外部资料时查不到allow_delegation是否允许任务委派True / False层级流程下可能互相推诿verbose是否输出过程日志True / False难以观察运行过程max_iter单任务最大迭代次数默认值即可复杂任务可调大任务没完成就停止实际调参时优先调 role、goal、backstory 这三个文本参数。它们对输出质量的影响远大于 max_iter 这类数值参数。4.2 Task 的关键参数Task 负责定义做什么、做到什么程度、由谁做参数作用说明description任务描述写清楚输入、要求、边界和约束expected_output期望输出越具体越好决定何时算完成agent执行任务的 Agent指定后任务归属明确context上下文任务从哪些任务结果获取前置材料tools任务级工具只在当前任务生效可覆盖 Agent 级工具async_execution是否异步执行多个独立任务时可并行在顺序流程中如果你希望写作任务读取研究任务的输出推荐显式写contextwriting_task Task( description基于研究结果撰写技术报告, expected_output完整技术报告, agentwriter, context[research_task], )这样即使任务列表顺序有调整任务之间的依赖关系也是明确的不会出现写作 Agent 拿不到研究材料的情况。4.3 Crew 的关键参数Crew 是启动入口关键参数如下参数作用注意事项agentsAgent 列表列表顺序影响层级流程中的分配tasks任务列表顺序流程下按列表顺序执行process执行流程sequential 或 hierarchicalmanager_llm管理 Agent 的模型hierarchical 流程必须配置manager_agent自定义管理 Agent未配置时使用默认 Managerverbose日志级别排错阶段建议开启memory是否启用记忆启用后需要 embedding 相关配置4.4 参数配置错误的表现与调整思路有几组典型症状值得记录下来遇到时可以直接对照排查症状常见原因调整方向输出千篇一律role / goal 太宽泛缩小角色范围给出明确交付物任务没做完就停止max_iter 太小调大 max_iter或拆细任务第二个 Agent 不知道前文缺少 context显式设置 context 指向前置任务启动即报缺少 managerhierarchical 流程没配管理器配置 manager_llm 或 manager_agent两个 Agent 互相推任务allow_delegation 全开按需关闭委派明确各自职责排错时要记住一个原则先检查文案参数再检查流程参数。大多数质量问题来自角色和目标描述不清晰而不是框架本身的问题。5. 从顺序流程升级工具调用与层级协作5.1 Sequential 与 Hierarchical 怎么选顺序流程适合流程固定、任务链路清晰的场景。比如“先查资料再写报告”每一步都是确定的前后关系。它的优势是可控、可解释、成本低。层级流程需要一个 Manager Agent 来动态分配任务。适合任务拆分不固定、需要现场决策的场景。比如你只定义一个大目标让 Manager 决定应该由研究员查资料还是由数据分析师先做统计。两种流程的对比维度Sequential 顺序流程Hierarchical 层级流程执行方式按任务列表顺序执行Manager 动态分配任务适合场景流程固定、链路清晰任务划分不固定、需要调度配置复杂度低高需要 manager_llm可解释性高中委派路径可能复杂典型问题无法动态拆任务Manager 决策不稳定成本更高对于第一次上手的项目建议先用顺序流程跑通再根据需求升级。5.2 给 Agent 挂上工具本地知识库检索示例没有工具的 Agent 只能依赖模型参数里的知识。如果你的任务需要查询最新资料或业务数据库就要给 Agent 配工具。CrewAI 支持用装饰器快速封装自定义工具from crewai.tools import tool tool(本地政策知识库检索) def query_policy(keyword: str) - str: 在本地政策知识库中检索与 keyword 相关的政策条目。 # 这里替换成你自己的数据库或文档检索逻辑 return f关于「{keyword}」的政策信息示例检索结果然后在 Agent 中挂上这个工具researcher Agent( role政策研究员, goal查询并整理相关政策信息, backstory你是一名政策研究助理必须基于检索结果回答。, tools[query_policy], verboseTrue, )这里的关键点是函数名、函数文档字符串和返回结果。函数文档字符串会被模型理解决定模型在什么情况下调用这个工具返回值会被模型读入决定最终回答质量。所以工具内部最好返回结构化文本比如包含来源、时间、关键字段的格式。如果使用 crewai_tools 里的现成工具比如 SerperDevTool 这类搜索工具需要先确认它的 API Key 配置方式通常是在环境变量中设置对应密钥具体以工具文档为准。5.3 用 YAML 分离配置减少 Prompt 硬编码随着 Agent 数量增加把 role、goal、backstory 全部写在 Python 文件里会让代码越来越难维护。更推荐的做法是把 Agent 和 Task 的描述放到 YAML 文件里与 Python 逻辑分离。agents.yamlresearcher: role: 资深研究员 goal: 围绕主题收集并整理关键信息 backstory: 你有十年行业研究经验输出结论必须有依据。 writer: role: 技术写作专家 goal: 把研究结论改写成清晰的技术报告 backstory: 你是资深技术编辑擅长结构化表达。tasks.yamlresearch_task: description: 研究主题{topic}整理三个落地方向 expected_output: 包含三个方向的清单每个方向说明核心观点和适用场景 writing_task: description: 基于研究结果撰写技术报告 expected_output: 包含背景、正文和结论的技术报告然后在 Python 中加载配置并构建对象import yaml from crewai import Agent, Task, Crew, Process with open(agents.yaml, r, encodingutf-8) as f: agents_config yaml.safe_load(f) with open(tasks.yaml, r, encodingutf-8) as f: tasks_config yaml.safe_load(f) topic 开源多智能体框架 researcher Agent( roleagents_config[researcher][role], goalagents_config[researcher][goal], backstoryagents_config[researcher][backstory], ) writer Agent( roleagents_config[writer][role], goalagents_config[writer][goal], backstoryagents_config[writer][backstory], ) research_task Task( descriptiontasks_config[research_task][description].format(topictopic), expected_outputtasks_config[research_task][expected_output], agentresearcher, ) writing_task Task( descriptiontasks_config[writing_task][description], expected_outputtasks_config[writing_task][expected_output], agentwriter, context[research_task], ) crew Crew( agents[researcher, writer], tasks[research_task, writing_task], processProcess.sequential, verboseTrue, ) result crew.kickoff() print(result)这样修改文案时不用碰 Python 代码也方便对 Prompt 做版本管理。如果后续团队要复用同一套框架处理不同主题只要通过kickoff(inputs{...})传入不同变量即可。5.4 层级流程的最小配置如果你确实需要 Manager 来动态调度可以按下面的方式配置。注意必须提供manager_llmfrom crewai import Agent, Task, Crew, Process researcher Agent( role资料研究员, goal收集与主题相关的资料, backstory你擅长信息收集与整理。, ) writer Agent( role报告撰写者, goal输出结构清晰的技术报告, backstory你擅长技术文档写作。, ) task Task( description撰写一份关于开源多智能体框架的技术报告, expected_output包含背景、方案对比、结论的 Markdown 报告, ) crew Crew( agents[researcher, writer], tasks[task], processProcess.hierarchical, manager_llmgpt-4o-mini, verboseTrue, ) result crew.kickoff() print(result)在这个配置里Manager 会先分析任务再决定让 researcher 还是 writer 先执行。层级流程的好处是灵活代价是增加了一次额外模型调用而且 Manager 的决策质量直接决定整体效果。6. 常见问题与排查链路这部分从实际运行中最容易遇到的问题出发按现象、原因、检查方式和处理建议排列。6.1 安装失败或依赖版本冲突现象pip install crewai时出现依赖解析错误或者运行时报 pydantic 版本冲突。常见原因Python 版本与依赖要求不匹配或者当前环境里已有其他框架装过不同版本的 pydantic。检查方式python --version pip check pip show crewai处理建议创建全新虚拟环境后重新安装优先使用 Python 3.10 或 3.11。如果之前装过旧版本先卸载再安装最新版pip uninstall crewai -y pip install --upgrade crewai6.2 模型调用时报认证错误或模型不存在现象运行时出现 AuthenticationError、NotFoundError 或类似 HTTP 4xx 错误。常见原因API Key 没配置或配置到了错误环境。模型名在当前服务商下不存在。模型服务设置了独立 base_url但环境变量没有配置。检查方式# macOS / Linux echo $OPENAI_API_KEY # Windows CMD echo %OPENAI_API_KEY%同时检查代码里指定的模型名或者先不指定 llm让它读取默认环境变量。处理建议重新配置密钥确认模型名与所使用服务商的模型列表一致。如果是第三方兼容接口确认OPENAI_BASE_URL也配置正确。6.3 Agent 循环空转或输出不稳定现象Agent 反复执行类似步骤迭代次数很多或者同一任务每次输出差异很大。常见原因max_iter 设置太小任务还没收敛就停止。role / goal / backstory 描述不清晰模型找不到重点。任务缺少 expected_outputAgent 不知道何时完成。模型温度设置偏高输出随机性大。检查方式开启 verbose观察每个 Agent 的 action 和 thought 日志看它到底是卡在决策上还是在反复补充同一段内容。处理建议把任务拆小明确 role 和 goal给每个 Task 写清楚 expected_output。如果模型支持 temperature 参数可以适当调低以提升稳定性。6.4 层级流程中 Agent 互相委派或迟迟不结束现象hierarchical 流程下Manager 把任务派给 Agent AA 又委派给 B任务链条变长甚至反复横跳。常见原因多个 Agent 的 role 重叠allow_delegation 全部开启Manager 没有足够明确的指令来结束调度。处理建议先减少 Agent 数量保证每个 Agent 职责唯一不必要开启委派的 Agent 就关闭 allow_delegation给 Manager 提供清晰的分工说明。6.5 排查顺序清单遇到问题时建议按下面的顺序逐项排查不要一开始就怀疑框架本身确认 API Key 是否已配置且环境变量生效。确认模型名是否可用base_url 是否正确。查看 verbose 日志确认每个 Agent 执行了什么任务、调用了什么动作。把项目缩减为单 Agent 单 Task验证基础调用是否正常。检查任务间 context 是否正确传递。检查 max_iter、tools、allow_delegation 等参数是否合适。最后再考虑升级框架版本或换模型。7. 从学习环境到生产环境落地前要补齐的工作7.1 两种环境的差异用 CrewAI 在本地跑通一个 Demo 很容易但进入生产环境后需要补的东西远不止“能跑”维度学习环境生产环境密钥管理本地环境变量使用密钥管理服务按权限隔离Prompt 管理硬编码在代码里YAML 或配置中心走版本控制日志print / verbose结构化日志记录任务 ID、Token 消耗监控无任务成功率、耗时、费用统计、告警错误处理报错后重跑重试、降级、人工兜底配置回滚无Prompt 和配置版本化支持快速回滚7.2 成本控制与模型选型多 Agent 编排会比单次调用消耗更多 Token因为每个 Agent 都可能发起多次模型调用层级流程还要额外计算 Manager 的开销。生产环境建议不同 Agent 使用不同模型复杂推理用强模型简单整理用便宜模型。为 Agent 设置合理的 max_iter限制单个任务的最大迭代次数。对固定输入、固定主题的结果做缓存避免重复调用。记录每个任务和每个 Agent 的 Token 消耗建立费用基线。7.3 日志、监控与可观测性多智能体系统的排错难点在于过程不可见。建议在进入生产环境前建立基础观测能力为每次 crew.kickoff 生成一个运行 ID贯穿所有 Agent 日志。记录每个 Task 的输入、输出、耗时和 Token 数。对失败任务保留完整 Prompt 和模型响应方便复盘。对疑似“Agent 空转”的情况设置运行时长或迭代次数告警。7.4 可复用的上手清单无论你是第一次接触 CrewAI还是准备把已有 Demo 工程化都可以用这份清单自检阅读项目在 GitHub 上的 README 和官方 examples。确认 Python 版本和依赖要求。创建独立虚拟环境并安装 crewai。配置模型 API Key确认基础调用成功。先用单 Agent 单 Task 跑通一个最小任务。增加第二个 Agent 和第二个 Task并用 context 串联结果。开启 verbose阅读日志理解执行链路。把 Prompt 从代码迁移到 YAML 或配置中心。按需添加工具、memory、层级流程。生产化前补齐密钥管理、日志、监控和费用统计。多智能体并不是越复杂越好。CrewAI 的价值在于把“多人协作完成复杂任务”这件事变成了可编码的工程结构但最终效果仍然取决于你的任务拆解和 Prompt 设计。先跑通最小 Crew再逐步增加角色、工具和流程是这条路上最稳的走法。
返回列表