CrewAI 与 MCP 的深度集成——角色化 Agent 的 Skill 编排
一、CrewAI 的核心设计理念
CrewAI 是一个专注于多 Agent 协作的框架,其核心设计理念是“角色化团队协作”。在 CrewAI 中,开发者定义一组具有不同角色的 Agent,每个 Agent 有特定的职责和能力。这些 Agent 组成一个“Crew”,按照预定义的流程协作完成任务。
CrewAI 的典型使用场景包括市场分析、内容创作、客户服务、研究综述等。例如,一个市场分析 Crew 可以包含研究员 Agent、数据分析师 Agent、报告撰写 Agent。研究员收集数据,数据分析师处理数据,报告撰写Agent 生成报告。
CrewAI 的 Agent 通过“工具”获得能力。工具与 LangChain 的 BaseTool 类似,每个工具是一个函数,有名称、描述、输入模式。CrewAI 的 Agent 在执行任务时,会根据任务描述和可用工具列表,自主决定调用哪些工具以及以什么顺序调用。
这种工具调用模式与 MCP 的 Skill 调用高度契合。将 MCP Skill 作为 CrewAI 的工具,可以让 CrewAI Agent 利用整个 MCP 生态的能力。同时,CrewAI 的角色化编排能力,也可以用于组织多个 MCP Skill 完成复杂任务。
本章将探讨 CrewAI 与 MCP 的深度集成,包括角色与 Skill 权限的映射、流程编排与 Skill 编排的结合、跨Agent 的 Skill 调用追踪,以及实战案例。
二、CrewAI 的工具机制
在 CrewAI 中,Agent 通过工具与外部世界交互。工具的定义方式与 LangChain 类似。开发者定义一个 Python 函数,使用 tool 装饰器标记。装饰器可以从函数的文档字符串和类型提示中自动提取工具的名称、描述、参数模式。
Agent 在创建时,通过 tools 参数传入可用的工具列表。当 Agent 执行任务时,CrewAI 将任务描述和工具列表放入 Prompt,发送给大模型。模型决定调用哪个工具以及传入什么参数。CrewAI 执行工具调用,将结果返回给模型。模型继续推理直到任务完成。
这种机制与 MCP 的调用模型完全一致。两者都是模型决定调用什么,框架负责执行。因此,将 MCP Skill 包装为 CrewAI 工具是非常直接的。
三、适配器模式:将 MCP Skill 包装为 CrewAI 工具
最简单的集成方式是开发一个适配器函数,内部调用 MCP Skill。
适配器的工作原理
开发者定义一个异步函数,内部创建 MCP 客户端连接 Peta 网关。函数接收 skill_name 和 parameters,构造MCP Action 并发送。等待响应后返回结果。使用 CrewAI 的 tool 装饰器标记这个函数,使其成为 CrewAI 工具。
为了提高效率,可以开发一个通用适配器。适配器从 MCP Skill 规范中读取元数据,自动生成对应的 CrewAI 工具。开发者只需要指定 Skill 名称,适配器自动处理参数验证和结果转换。
适配器的优势
适配器模式实现简单,MCP 生态中的现有 Skill 可以零修改被 CrewAI Agent 使用。开发者不需要理解 CrewAI 的工具定义细节。适配器代码量小,易于维护。
适配器的局限
适配器模式每次调用都需要创建 MCP 客户端连接,开销较大。可以使用连接池复用。流式调用、进度通知等高级功能难以实现。
四、原生集成:CrewAI 直接支持 MCP Skill
更好的集成方式是让 CrewAI 原生支持 MCP Skill。这意味着 CrewAI 内部增加 MCP 工具加载器。
MCP 工具加载器
CrewAI 增加一个 MCP 工具加载器。加载器连接到 Peta 网关,从 Skill 注册表中读取可用的 Skill 列表。对于每个 Skill,加载器自动创建一个 CrewAI 工具对象,使用 Skill 规范中的元数据填充工具的名称、描述、参数模式。
当 Skill 列表发生变化时,加载器可以自动同步。Agent 在创建时,只需要指定加载器,不需要手动列出所有工具。
MCP 调用执行器
当 CrewAI Agent 决定调用一个 MCP Skill 时,执行器直接构造 MCP Action,通过 MCP 协议发送,处理响应。执行器支持同步调用和异步调用。执行器将 MCP 的错误码映射为 CrewAI 的异常类型。
五、角色与 Skill 权限的映射
CrewAI 的核心价值之一是角色化。不同角色的 Agent 应该有不同的 Skill 权限。
角色声明
每个 Agent 在创建时声明自己的角色,例如 researcher、analyst、writer。角色信息可以放在 Agent 的配置中,或者通过 MCP Context 传递。
基于角色的 Skill 授权
Peta 的策略引擎支持基于角色的访问控制。管理员可以在 Peta Console 中定义策略,指定哪些角色可以调用哪些 Skill。例如,researcher 角色可以调用数据采集 Skill,但不能调用数据写入 Skill。analyst 角色可以调用数据处理 Skill,但不能调用数据删除 Skill。
当 CrewAI Agent 发起调用时,Peta 网关从 Context 中读取角色信息,与策略进行匹配。只有授权的调用才会被允许。
动态角色切换
在某些场景下,Agent 的角色可能需要动态变化。例如,一个 Agent 在任务的不同阶段扮演不同角色。CrewAI 可以通过更新 Agent 配置来实现角色切换。Peta 网关在每次调用时读取最新的角色信息。
六、流程编排与 Skill 编排的结合
CrewAI 的流程编排能力是其区别于其他框架的重要特性。开发者可以定义 Agent 的执行顺序和协作方式。
顺序执行
最常用的编排模式是顺序执行。Agent A 执行完成后,Agent B 开始执行。Agent B 可以使用 Agent A 的输出作为输入。当 Agent 的能力来自 MCP Skill 时,这种编排同样适用。
例如,创建一个市场分析 Crew。研究员 Agent 调用数据采集 Skill,收集市场数据。数据分析师 Agent 调用数据处理 Skill,分析数据。报告撰写 Agent 调用报告生成 Skill,生成最终报告。每个步骤的输出作为下一步的输入。
层次执行
在层次执行中,有一个主 Agent 负责任务分解和调度,子 Agent 执行具体任务。主 Agent 可以调用任务分解Skill,将复杂任务拆分为子任务。子任务分配给对应的子 Agent 执行。
协作执行
多个 Agent 可以并行执行独立的任务。例如,同时调用多个数据源采集 Skill,然后汇总结果。CrewAI 的异步执行能力可以充分利用 MCP 网关的并发处理能力。
七、跨 Agent 的 Skill 调用追踪
在多 Agent 系统中,一个用户请求可能触发多个 Agent 的多个 Skill 调用。端到端追踪至关重要。
Trace ID 传递
当 Agent A 调用 Agent B 时,Trace ID 需要从 A 传递到 B。CrewAI 的任务机制可以扩展,在任务上下文中包含Trace ID。Agent B 在调用 Skill 时,将 Trace ID 放入 MCP Action 的 Context 中。
调用链可视化
Peta 的审计日志记录了每个 Skill 调用的 Trace ID 和 Span ID。通过聚合这些日志,可以还原完整的调用链。管理员可以看到用户请求触发了哪些 Agent,每个 Agent 调用了哪些 Skill,每个 Skill 的耗时和状态。调用链视图让整个系统的行为清晰可见。
性能瓶颈定位
当跨 Agent 调用链出现性能问题时,调用链可视化可以帮助快速定位瓶颈。是 Agent A 的推理慢了,还是Agent B 调用的 Skill 慢了?调用链视图可以让问题一目了然。
八、Peta 与 CrewAI 的集成实践
Peta 提供了与 CrewAI 集成的官方支持。
安装与配置
开发者可以通过 pip 安装 crewai-mcp 扩展包。配置中指定 Peta 网关地址和认证凭证。MCP 工具加载器自动发现可用的 Skill。
代码示例示意
开发者创建 MCP 客户端连接到 Peta 网关。创建 MCP 工具加载器,从网关加载 Skill 列表。创建多个 Agent,每个 Agent 指定角色和工具列表,工具列表来自加载器。创建 Crew,定义执行流程。执行 Crew,Agent 自动调用 MCP Skill。
角色配置
在 Agent 配置中指定角色。Peta 的 MCP 工具加载器可以根据角色过滤可用的 Skill。例如,researcher 角色只能看到数据采集相关的 Skill。
性能数据
在 Peta 的内部测试中,使用 MCP Skill 的 CrewAI 系统比使用本地工具的基线系统,开发时间减少约百分之七十,因为可以直接复用现有 Skill。
九、典型实战案例:市场分析报告生成
系统设计
创建三个 Agent。研究员 Agent,角色为 researcher,负责收集市场数据。数据分析师 Agent,角色为analyst,负责处理和分析数据。报告撰写 Agent,角色为 writer,负责生成报告。
Skill 配置
研究员 Agent 可调用的 Skill 包括 web_scraper、api_data_fetcher、news_collector。数据分析师 Agent 可调用的 Skill 包括 data_cleaner、statistics_calculator、trend_analyzer。报告撰写 Agent 可调用的 Skill 包括report_generator、chart_creator、pdf_exporter。
执行流程
用户输入“生成一份关于电动汽车市场的分析报告”。研究员 Agent 调用 web_scraper 和 news_collector,收集市场新闻和竞争对手信息。数据分析师 Agent 调用 data_cleaner 清洗数据,调用 statistics_calculator 计算市场份额,调用 trend_analyzer 识别趋势。报告撰写 Agent 调用 report_generator 生成报告草稿,调用chart_creator 生成图表,调用 pdf_exporter 导出 PDF。最终报告返回给用户。
集成效果
Skill 可以被不同角色的 Agent 复用。策略引擎确保研究员无法调用数据分析 Skill,数据分析师无法调用报告生成 Skill。完整调用链记录在审计日志中,便于后续分析。
十、小结
本章的核心结论可以总结为以下几点。
第一,CrewAI 的核心是角色化团队协作。Agent 通过工具获得能力,工具机制与 MCP Skill 高度契合。
第二,适配器模式可以快速将 MCP Skill 包装为 CrewAI 工具,适合快速验证。
第三,原生集成让 CrewAI 直接支持 MCP Skill,包括自动加载、同步异步调用、角色化权限控制。
第四,角色与 Skill 权限的映射通过 Peta 的策略引擎实现。不同角色的 Agent 拥有不同的 Skill 访问权限。
第五,CrewAI 的流程编排能力可以与 Skill 编排结合,支持顺序执行、层次执行、协作执行。
第六,跨 Agent 的 Skill 调用追踪通过 Trace ID 传递实现,Peta 审计日志支持完整的调用链可视化,让系统行为清晰可见。
第七,Peta 提供了官方集成,支持角色化 Agent 的 Skill 编排,实战案例显示开发效率显著提升。
在下一章,我们将讨论 Spring AI 与 MCP 的深度集成——Java 生态中的 MCP 实践。
更多推荐


所有评论(0)