返回顶部
热门问答 更多热门问答
技术文章 更多技术文章

CAMEL-AI Blog|OWL调用MCP Toolkit实践

[复制链接]
链载Ai 显示全部楼层 发表于 5 小时前 |阅读模式 打印 上一主题 下一主题

1.引言


OWL(Optimized Workforce Learning)是由CAMEL-AI社区开发的开源多智能体协作框架,旨在通过动态智能体交互实现复杂任务的自动化处理。其核心理念是模仿人类协作模式,将任务拆解为可执行的子步骤,并通过不同角色的智能体分工完成。自2025年3月开源以来,OWL在GAIA基准测试中以58.18的平均分位列开源框架榜首,成为AI任务自动化领域的新标杆。



MCP(Model Context Protocol)协议作为AI领域的“USB接口”,它逐渐成为了解决AI信息孤岛的通用方案,其生态圈也在日益增长。在OWL中,也支持使用MCP协议来调用其生态圈内的MCP Server,从而实现更标准化和高效的工具调用。



本文旨在介绍在OWL框架中,如何使用MCP(Model Context Protocol)更高效地调用外部工具和数据。



2.MCP概述


MCP定义与发展背景


MCP起源于2024年11月25日Anthropic发布的文章:Introducing the Model Context Protocol。



MCP(Model Context Protocol,模型上下文协议)定义了应用程序和AI模型之间交换上下文信息的方式。这使得开发者能够以一致的方式将各种数据源、工具和功能连接到AI模型(一个中间协议层),就像USB-C让不同设备能够通过相同的接口连接一样。MCP的目标是创建一个通用标准,使AI应用程序的开发和集成变得更加简单和统一。



引用一些优秀的概念可视化来帮助大家进行理解:




可以看出,MCP可以用更标准的方式来灵活的为LLM调用不同工具,更简单的可视化如下所示。基于这张图,你应该更容易理解MCP作为“中间协议层”的概念了。




那为什么要做MCP这样一个“接口”呢?是因为Anthropic希望将数据连接到模型的这个环节可以更智能,更统一。Anthropic基于这样的痛点设计了MCP,让LLM能轻松的获取数据或者调用工具,方便开发者在LLM的基础上构建智能体和复杂的工作流程。更具体的说MCP的优势在于:



生态- MCP提供很多现成的插件,你的AI可以直接使用。



统一性-不限制于特定的AI模型,任何支持MCP的模型都可以灵活切换。



数据安全-你的敏感数据留在自己的电脑上,不必全部上传。(因为MCP Server可以自行设计接口确定传输哪些数据)



MCP架构与基本原理



基本架构



接下来简单介绍下MCP的基本架构。MCP遵循客户端-服务器架构,一个宿主应用(Host)可以连接多个服务器(server),引用官方文档中的示图:



MCP Host:像Claude Desktop、IDE或AI工具等希望通过MCP访问数据的程序。



MCP Client:维持与服务器1:1连接的协议客户端。



MCP Server:轻量级程序,每个server通过标准化的MCP暴露特定功能。



本地数据源:MCP服务器可以安全访问的计算机文件、数据库和服务。



远程服务:MCP服务器可以连接的通过互联网提供的外部系统(例如通过API)



这种架构设计使得AI工具和应用程序能够以安全且标准化的方式访问各种数据源,无论是本地还是远程的,从而增强它们的功能和上下文感知能力。让我们通过一个实际场景来理解这些组件如何协同工作:


假设你正在通过Claude Desktop (Host)询问:"我桌面上有哪些文档?"



1.Host:Claude Desktop作为Host,负责接收你的提问并与Claude模型交互。



2.Client:当Claude模型决定需要访问你的文件系统时,Host中内置的MCP Client会被激活。这个Client负责与适当的MCP Server建立连接。



3.Server:在这个例子中,文件系统MCP Server会被调用。它负责执行实际的文件扫描操作,访问你的桌面目录,并返回找到的文档列表。



整个流程是这样的:你的问题→ Claude Desktop (Host) → Claude模型→需要文件信息→ MCP Client连接→文件系统MCP Server →执行操作→返回结果→ Claude生成回答→显示在Claude Desktop上。



这种架构设计使得Claude可以在不同场景下灵活调用各种工具和数据源,而开发者只需专注于开发对应的MCP Server,无需关心Host和Client的实现细节。



在架构设计上,官方文档中提供了详尽的概念讲解与解析,可通过以下链接跳转了解:


https://modelcontextprotocol.io/docs/concepts/architecture



3.OWL框架简介



OWL框架架构概览



OWL(Optimized Workforce Learning)是由CAMEL-AI社区开发的开源多智能体协作框架,旨在通过动态智能体交互实现复杂任务的自动化处理。其核心理念是模仿人类协作模式,将任务拆解为可执行的子步骤,并通过不同角色的智能体分工完成。自2025年3月开源以来,OWL在GAIA基准测试中以58.18的平均分位列开源框架榜首,成为AI任务自动化领域的新标杆。




核心特性



1.动态协作引擎



a.智能体角色机制:采用双角色协作框架,包含规划智能体(planning_agent)和执行智能体(web_agent)。规划智能体负责任务拆解与策略制定,执行智能体通过工具调用完成具体操作。


b.实时决策优化:基于部分可观测马尔可夫决策过程(POMDP),动态调整执行路径以应对网页内容变化。



2.多模态处理能力



a.跨模态整合:支持图像分类、语音识别、视频关键帧提取,可解析Word、Excel、PDF、PPT等文件并保留原始结构。


b.浏览器自动化:集成Playwright框架,模拟真实用户行为,包括页面滚动、点击操作、表单填写和文件下载。



3.工具链生态系统



a.核心工具包:包含BrowserToolkit(网页交互)和CodeExecutionToolkit(Python沙箱),适用于数据抓取和自动化测试。


b.学术研究工具包:提供ArxivToolkit(论文检索)和SemanticScholarToolkit(语义分析),支持文献综述和研究趋势分析。


c.数据分析工具包:集成NetworkXToolkit(图分析)和SymPyToolkit(符号计算),用于社交网络建模与数学建模。


d.生产工具包:包含ExcelToolkit(表格处理)和NotionToolkit(知识管理),服务于报表生成和企业知识库构建。



CAMEL-AI框架介绍



CAMEL(https://github.com/camel-ai/camel)是一个开源的多智能体框架,专为构建基于大型语言模型(LLM)的智能体交互系统设计。这个框架的核心思想是通过角色扮演和结构化对话机制,使智能体之间能够进行高效、灵活的协作。无论是在复杂的任务环境中,还是在多智能体共同解决问题的场景中,CAMEL都能够提供强大的支持。



核心特性


1.多智能体系统支持


角色扮演框架:通过引入角色扮演的机制,智能体能够根据不同的角色和任务需求进行协作。这种方式不仅提高了智能体间的互动效率,也使得每个智能体能够根据自身的能力和任务定位,做出最优化的决策。



工作流系统:CAMEL提供了一个强大的工作流管理系统,支持多智能体联合解决复杂任务。这不仅提高了智能体的协作效率,还能够确保各个智能体能够在不同的任务中合理分工。


高级协作功能:在一些更加复杂的场景下,CAMEL能够处理高级协作需求,包括多方利益的协调和信息的动态调整,使得系统能够在复杂的环境中自我优化。



2.全面的工具集成


模型平台支持:CAMEL框架支持与超过20个主流的语言模型平台进行集成,如OpenAI的GPT系列、Llama3、Ollama等。这为开发者提供了更多选择,也保证了系统能够根据任务需求选择合适的模型进行处理。



外部工具集成:除了内置的模型平台,CAMEL还允许与其他外部工具进行集成,如搜索引擎、GitHub、谷歌地图等,这使得框架能够跨越多个领域,满足不同应用场景下的需求。



定制功能:框架内置了记忆和提示组件的定制功能,开发者可以根据具体的应用场景自定义智能体的工作方式和交互策略。这些定制化功能为智能体的自主学习和任务处理提供了更多的灵活性。



CAMEL框架的出现,为多智能体系统的研发提供了一个非常强大的工具。无论是在多智能体协作,还是在复杂任务的解决上,它都能够提供高效、灵活的支持。同时,框架的设计原则也使得它具备了良好的可进化性和可扩展性,非常适合用于大规模、长期运行的应用场景。随着技术的不断发展,CAMEL将继续在智能体协作领域发挥着重要作用,推动大型语言模型的更深层次应用。



4.MCPOWL框架中的应用案例



DEMO演示



我想要一份关于Andrew Ng的学术报告,包括他的研究方向、发表的论文(至少3篇)、所在机构等,然后以Markdown格式整理报告并保存到我的桌面。



程序启动与运行



1.配置好owl库所需要的依赖

(参考https://github.com/camel-ai/owl的Installation



2.安装MCP Server



a.MCP文件系统服务(需要提前安装好Node.js和npm)



i.安装MCP服务


npx-y@smithery/cliinstall@wonderwhy-er/desktop-commander--clientclaudenpx@wonderwhy-er/desktop-commandersetup


ii.填写配置文件



找到配置文件位置owl/mcp_servers_config.json:


{"desktop-commander":{"command":"npx","args":["-y","@wonderwhy-er/desktop-commander"]}}


b.MCP playwright服务



i.安装MCP服务



npminstall-g@executeautomation/playwright-mcp-servernpxplaywrightinstall-deps


ii.填写配置文件



{"mcpServers":{"playwright":{"command":"npx","args":["-y","@executeautomation/playwright-mcp-server"]}}}


c.MCP fetch服务(可选,检索效果更好)



i.安装MCP服务



pipinstallmcp-server-fetch


ii.填写配置文件



"mcpServers":{"fetch":{"command":"python","args":["-m","mcp_server_fetch"]}}


完整配置文件如下:



{"mcpServers":{"desktop-commander":{"command":"npx","args":["-y","@wonderwhy-er/desktop-commander"]},"playwright":{"command":"npx","args":["-y","@executeautomation/playwright-mcp-server"]}}}


3.运行run_mcp.py脚本



pythonexamples/run_mcp.py


关键代码示例与讲解



MCP客户端初始化及连接



相关源代码


config_path=Path(__file__).parent/"mcp_servers_config.json"mcp_toolkit=MCPToolkit(config_path=str(config_path))awaitmcp_toolkit.connect()

在这段代码中,我们首先定义了配置文件的路径,然后通过MCPToolkit初始化连接,接着使用异步connect方法建立与工具集的连接。



代码关键点



1.加载配置路径


config_path=Path(__file__).parent/"mcp_servers_config.json"

这里使用了Path(__file__).parent来获取当前脚本所在的目录,并将其与配置文件名称拼接。这样做的好处是使得路径的管理更加灵活且跨平台,避免了硬编码的路径问题。



2.创建工具管理器


mcp_toolkit=MCPToolkit(config_path=str(config_path))

MCPToolkit是用来管理所有工具集的类。通过传入配置路径,我们为工具管理器提供了配置文件,告诉它如何加载和连接到远程的服务。



3.建立连接


awaitmcp_toolkit.connect()

这一行通过await等待异步连接的建立。connect()是一个异步方法,用于与指定的工具集进行连接。这种方式避免了同步I/O阻塞,确保了程序的高效性。



请求、结果处理流程


相关源代码


question=("I'dlikeaacademicreportaboutAndrewNg,includinghisresearch""direction,publishedpapers(Atleast3),institutions,etc.""ThenorganizethereportinMarkdownformatandsaveittomydesktop")tools=[*mcp_toolkit.get_tools()]society=awaitconstruct_society(question,tools)answer,chat_history,token_count=awaitrun_society(society)print(f"\033[94mAnswer:{answer}\033[0m")

接下来,代码展示了从请求构造到结果处理的完整流程,涵盖了问题输入、工具获取、智能体环境构建、任务执行以及最终结果的输出。



代码关键点



1.构造请求参数



question=("I'dlikeaacademicreportaboutAndrewNg,includinghisresearch""direction,publishedpapers(Atleast3),institutions,etc.""ThenorganizethereportinMarkdownformatandsaveittomydesktop")

这里定义了一个清晰的问题字符串,指定了报告的内容、格式和保存要求。这种结构化的字符串帮助系统明确任务要求,确保后续步骤的准确性。



2.获取工具集



tools=[*mcp_toolkit.get_tools()]

在连接上下文中,我们通过mcp_toolkit.get_tools()获取所有可用的工具,并将其存储到tools列表中。这些工具将用于任务执行阶段,帮助智能体完成任务。



3.构造多智能体环境



society=awaitconstruct_society(question,tools)

construct_society是一个异步函数,它返回一个包含多个智能体的环境(OwlRolePlaying)。这里的关键步骤包括:


○使用ModelFactory.create创建用户和助手角色的模型实例。


○将工具集分配给助手角色,允许它们在任务过程中执行实际的工具操作。



4.运行智能体对话



answer,chat_history,token_count=awaitrun_society(society)

run_society触发了智能体之间的对话,智能体将基于问题和工具集进行交互,最终返回答案、聊天历史和令牌计数。这一步是整个请求处理的核心,展示了如何通过多智能体协作得到最终答案。



5.输出结果



print(f"\033[94mAnswer:{answer}\033[0m")


最终,我们使用ANSI颜色代码输出答案,将其高亮为蓝色,方便用户快速识别结果。这种输出方式使得终端的展示更为直观,增强了用户体验。这一部分代码展示了从用户问题输入到工具选择、智能体对话构建,再到结果输出的全流程。通过这些步骤,我们能够理解每个环节如何协同工作,共同完成任务。



更多MCP工具检索及使用方案



CAMEL-AI MCP工具集成平台:https://www.camel-ai.org/mcp,在我们的平台上,你可以找到MCP支持的各种插件。本教程中我们仅使用了其中的三种工具。接下来,我们将介绍如何使用Fetch工具作为示例,演示如何将一个插件集成到我们的环境中。



进入CAMEL-AI.org 官网



接下来,我们将介绍如何使用Fetch工具作为示例,演示如何将一个插件集成到我们的环境中。



点击Anthropic 找到Fetch 工具



访问工具页面:进入MCP平台后,点击Fetch工具,进入下一个页面。在这个页面中,你可以看到一些使用示例以及与Fetch相关的其他MCP工具包。



查看GitHub仓库:在页面上,我们会找到该工具的GitHub仓库链接,点击后进入仓库的README页面。这个页面会详细介绍该工具的使用方法和配置步骤。




安装和配置:根据README文件中的教程,通常需要执行两步操作:


安装:你可以通过pip install命令安装Fetch工具。



配置:安装完成后,接下来需要在我们的owl/mcp_servers_config.json配置文件中找到"mcpServers":{}部分,添加fetch插件的相关配置。完成配置后,插件就可以自动加载并在环境中使用。




通过这样的配置和集成,你就可以轻松地将新工具集成到你的MCP环境中,进行自动化调用,提升系统的功能和效率。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

链载AI是专业的生成式人工智能教程平台。提供Stable Diffusion、Midjourney AI绘画教程,Suno AI音乐生成指南,以及Runway、Pika等AI视频制作与动画生成实战案例。从提示词编写到参数调整,手把手助您从入门到精通。
  • 官方手机版

  • 微信公众号

  • 商务合作

  • Powered by Discuz! X3.5 | Copyright © 2025-2025. | 链载Ai
  • 桂ICP备2024021734号 | 营业执照 | |广西笔趣文化传媒有限公司|| QQ