Manus开源复刻框架OWL,测评和使用教程来了!

Manus开源复刻框架OWL,测评和使用教程来了!

Manus开源复刻框架OWL,测评和使用教程来了! Manus开源复刻框架OWL,测评和使用教程来了! Modified March 12, 2025 No access 0bc3nuaceaaa5eal276nl5tva3odejwqaiqa.f10002.mp4 00:00 No access 0bc3qaabcaaa3yaldronzftvbagdcgaaaeia.f10002.mp4 00:00 再来看另一个 case,在这个 case 中我们希望 OWL 给我们制定一个长沙的三天旅游方案: No access 0bc3h4abkaaaiealpuonxrtvap6dcu7qafia.f10002.mp4 00:00 可以发现这一次,OWL 并没有使用 WebToolkit ,而是走了另一套流程,它使用了 Google 搜索的 API 来检索到了 6 条内容,然后从中筛选出来了 3 条结果。 初步检索 筛选的结果 检索到足够的结果之后,会将这些结果的 url 交给我们的 DocumentProcessingToolkit 来处理,该工具包集成了 Firecrawl 及 Chunkr 等处理工具,可以对 url 进行内容解析。 最后再将整个过程的内容总结成我们最后的旅游攻略: 作为在长沙上过学的我来说,这份攻略还是相当实用的 体验感受 通过多个案例的实际测试,OWL 展现出令人惊喜的多模态处理能力和智能体协作机制,尤其是它会自主去关闭一些阻碍的页面,这点真的令我感到很兴奋!因为之后再体验 Manus 的时候,在遇到相同的情况 Manus 会直接退出该界面,换另一个方式,哪怕我们在 prompt 要求他必须要在某个网站上进行搜索。 OWL 会根据你的任务自主去决定最快捷的方式来完成。并且整体的流程也给了我们很大的想象空间。比如是不是未来可以代替人类进行一些图片标注任务,可以省去大量人工成本。 对于 WebToolkit 的实现也非常的巧妙,它实现了两个 Agent 的协作机制: PlanningAgent :负责"战略"层面,提供整体规划,而 WebAgent 负责"战术"层面,执行具体操作。整体的协作流程也非常像人类由大脑先思考然后下达指令,人体再去执行的过程。 但其实我们可以感受到,有的情况下,直接使用一些 API 来完成任务实际上会比使用 WebToolkit 速度快很多,但 WebToolkit 的优势在于能做的事情更加的多(如操作未开放接口的网站),并且对于多模态的支持可能更加丰富。 OWL 另外强大的地方在于对各种工具包的集成与适配做的非常好,包括各种搜索工具、文档处理工具、视频、图像、音频理解工具等等。这使得 OWL 在应对各种情况都显得游刃有余。 使用教程 说了这么多,小伙伴一定也迫不及待想要一块来体验一下我们的 OWL 吧!下面,笔者将带着大家一起配置好我们需要的环境。 先我们下载与好 owl 的源码并且配置好我们的环境。 Code block Plain Text git clone https://github.com/camel ai/owl.git cd owl 设置虚拟环境 Code block Plain Text 使用 Conda(推荐): conda create n owl python=3.11 conda activate owl Code block Plain Text 使用 venv(备用): python m venv owl env Windows 系统 owl env\Scripts\activate Unix 或 MacOS 系统source owl env/bin/activate 安装依赖: Code block Plain Text python m pip install r requirements.txt playwright install 对于模型的设置可以参考笔者的配置,其中模型的选择都使用 Qwen 系列模型,其中需要注意的是 WebAgent 必须使用多模态模型,因为会接收到图片的输入,关于 API 的申请一并放在下方: 快速体验(只需要配置 QWEN API KEY 即可) Code block Plain Text from dotenv import load dotenvload dotenv()from camel.models import ModelFactoryfrom camel.toolkits import WebToolkit,SearchToolkit,FunctionToolfrom camel.types import ModelPlatformType,ModelTypefrom loguru import loggerfrom utils import OwlRolePlaying, run societyimport osqwen api key = '你申请到的API'def construct society(question: str) OwlRolePlaying: r"""Construct the society based on the question.""" user role name = "user" assistant role name = "assistant" user model = ModelFactory.create( model platform=ModelPlatformType.QWEN, model type="qwen max", model config dict={"temperature": 0}, api key=qwen api key, ) assistant model = ModelFactory.create( model platform=ModelPlatformType.QWEN, model type="qwen max", model config dict={"temperature": 0}, api key=qwen api key, ) search model = ModelFactory.create( model platform=ModelPlatformType.QWEN, model type="qwen max", model config dict={"temperature": 0}, api key=qwen api key, ) planning model = ModelFactory.create( model platform=ModelPlatformType.QWEN, model type="qwen max", model config dict={"temperature": 0}, api key=qwen api key, ) web model = ModelFactory.create( model platform=ModelPlatformType.QWEN, model type="qwen vl plus latest", model config dict={"temperature": 0}, api key=qwen api key, ) tools list = [ WebToolkit( headless=False, web agent model=web model, planning agent model=planning model, output language='中文' ).get tools(), ] user role name = 'user' user agent kwargs = dict(model=user model) assistant role name = 'assistant' assistant agent kwargs = dict(model=assistant model, tools=tools list) task kwargs = { 'task prompt': question, 'with task specify': False, 'output language': '中文', } society = OwlRolePlaying( task kwargs, user role name=user role name, user agent kwargs=user agent kwargs, assistant role name=assistant role name, assistant agent kwargs=assistant agent kwargs, ) return society Example casequestion = "在百度热搜上,查看第一条新闻,然后给我一个总结报告"society = construct society(question)answer, chat history, token count = run society(society)logger.success(f"Answer: {answer}") 完整功能的配置(需要配置更多的 API KEY) Code block Plain Text from dotenv import load dotenvload dotenv()from camel.models import ModelFactoryfrom camel.toolkits import ( WebToolkit, DocumentProcessingToolkit, VideoAnalysisToolkit, AudioAnalysisToolkit, CodeExecutionToolkit, ImageAnalysisToolkit, SearchToolkit, ExcelToolkit, FunctionTool )from camel.types import ModelPlatformTypefrom camel.configs import QwenConfigfrom loguru import loggerfrom utils import OwlRolePlaying, run societyimport osqwen api key = '你申请到的API'def construct society(question: str) OwlRolePlaying: r"""Construct the society based on the question.""" user role name = "user" assistant role name = "assistant" user model = ModelFactory.create( model platform=ModelPlatformType.QWEN, model type="qwen max", model config dict={"temperature": 0}, api key=qwen api key, ) assistant model = ModelFactory.create( model platform=ModelPlatformType.QWEN, model type="qwen max", model config dict={"temperature": 0}, api key=qwen api key, ) search model = ModelFactory.create( model platform=ModelPlatformType.QWEN, model type="qwen max", model config dict={"temperature": 0}, api key=qwen api key, ) planning model = ModelFactory.create( model platform=ModelPlatformType.QWEN, model type="qwen max", model config dict={"temperature": 0}, api key=qwen api key, ) web model = ModelFactory.create( model platform=ModelPlatformType.QWEN, model type="qwen vl plus latest", model config dict={"temperature": 0}, api key=qwen api key, ) multimodal model = ModelFactory.create( model platform=ModelPlatformType.QWEN, model type="qwen vl plus latest", model config dict={"temperature": 0}, api key=qwen api key, ) tools list = [ WebToolkit( headless=False, web agent model=web model, planning agent model=planning model ).get tools(), DocumentProcessingToolkit().get tools(), VideoAnalysisToolkit(model=multimodal model).get tools(), This requires multimodal model AudioAnalysisToolkit().get tools(), This requires OpenAI Key CodeExecutionToolkit().get tools(), ImageAnalysisToolkit(model=multimodal model).get tools(), This requires multimodal model SearchToolkit(model=search model).get tools(), FunctionTool(SearchToolkit(model=search model).search duckduckgo),如果没有Google相关api可以用duckduckgo代替 ExcelToolkit().get tools() ] user role name = 'user' user agent kwargs = dict(model=user model) assistant role name = 'assistant' assistant agent kwargs = dict(model=assistant model, tools=tools list) task kwargs = { 'task prompt': question, 'with task specify': False, 'output language': '中文', } society = OwlRolePlaying( task kwargs, user role name=user role name, user agent kwargs=user agent kwargs, assistant role name=assistant role name, assistant agent kwargs=assistant agent kwargs, ) return society Example casequestion = "在百度热搜上,查看第一条新闻,然后给我一个总结报告"society = construct society(question)answer, chat history, token count = run society(society)logger.success(f"Answer: {answer}") 其中使用到的 API 在以下网站可以申请到 QWEN API KEY : 🔗:https://help.aliyun.com/zh/model studio/new free quota 使用 API 调用大模型需要 API 密钥,这里我们以 Qwen 为例,您可以从百炼平台获取 API KEY 可选模型范围 在阿里云百炼的 模型库 ( https://bailian.console.aliyun.com/model market /model market )中选择 推理 API Inference ,里面的模型都可以选择。 之后在./owl目录下新建一个.env文件,可以参考 .env template ( https://github.com/camel ai/owl/blob/main/owl/.env template ),在里面配置好相关的 KEY,如果只想快速体验我们的第一个案例,则只需要配置 QWEN API KEY ,如果想体验相对完整的功能,需要配置 QWEN API KEY 、 CHUNKR API KEY 、 FIRECRAWL API KEY 、 GOOGLE API KEY 、 SEARCH ENGINE ID (如果没有 GOOGLE 相关 API 可以使用 duckduckgo来代替,参考上文的快速体验)。 No access 0bc3nuaceaaa5eal276nl5tva3odejwqaiqa.f10002.mp4 00:00 No access 0bc3nuaceaaa5eal276nl5tva3odejwqaiqa.f10002.mp4 00:00 No access 0bc3qaabcaaa3yaldronzftvbagdcgaaaeia.f10002.mp4 00:00 No access 0bc3qaabcaaa3yaldronzftvbagdcgaaaeia.f10002.mp4 00:00 再来看另一个 case,在这个 case 中我们希望 OWL 给我们制定一个长沙的三天旅游方案: No access 0bc3h4abkaaaiealpuonxrtvap6dcu7qafia.f10002.mp4 00:00 No access 0bc3h4abkaaaiealpuonxrtvap6dcu7qafia.f10002.mp4 00:00 可以发现这一次,OWL 并没有使用 WebToolkit ,而是走了另一套流程,它使用了 Google 搜索的 API 来检索到了 6 条内容,然后从中筛选出来了 3 条结果。 初步检索 筛选的结果 检索到足够的结果之后,会将这些结果的 url 交给我们的 DocumentProcessingToolkit 来处理,该工具包集成了 Firecrawl 及 Chunkr 等处理工具,可以对 url 进行内容解析。 最后再将整个过程的内容总结成我们最后的旅游攻略: 作为在长沙上过学的我来说,这份攻略还是相当实用的 体验感受 通过多个案例的实际测试,OWL 展现出令人惊喜的多模态处理能力和智能体协作机制,尤其是它会自主去关闭一些阻碍的页面,这点真的令我感到很兴奋!因为之后再体验 Manus 的时候,在遇到相同的情况 Manus 会直接退出该界面,换另一个方式,哪怕我们在 prompt 要求他必须要在某个网站上进行搜索。 OWL 会根据你的任务自主去决定最快捷的方式来完成。并且整体的流程也给了我们很大的想象空间。比如是不是未来可以代替人类进行一些图片标注任务,可以省去大量人工成本。 对于 WebToolkit 的实现也非常的巧妙,它实现了两个 Agent 的协作机制: PlanningAgent :负责"战略"层面,提供整体规划,而 WebAgent 负责"战术"层面,执行具体操作。整体的协作流程也非常像人类由大脑先思考然后下达指令,人体再去执行的过程。 但其实我们可以感受到,有的情况下,直接使用一些 API 来完成任务实际上会比使用 WebToolkit 速度快很多,但 WebToolkit 的优势在于能做的事情更加的多(如操作未开放接口的网站),并且对于多模态的支持可能更加丰富。 OWL 另外强大的地方在于对各种工具包的集成与适配做的非常好,包括各种搜索工具、文档处理工具、视频、图像、音频理解工具等等。这使得 OWL 在应对各种情况都显得游刃有余。 使用教程 说了这么多,小伙伴一定也迫不及待想要一块来体验一下我们的 OWL 吧!下面,笔者将带着大家一起配置好我们需要的环境。 先我们下载与好 owl 的源码并且配置好我们的环境。 设置虚拟环境 安装依赖: 对于模型的设置可以参考笔者的配置,其中模型的选择都使用 Qwen 系列模型,其中需要注意的是 WebAgent 必须使用多模态模型,因为会接收到图片的输入,关于 API 的申请一并放在下方: 快速体验(只需要配置 QWEN API KEY 即可) 完整功能的配置(需要配置更多的 API KEY) 其中使用到的 API 在以下网站可以申请到 QWEN API KEY : 🔗:https://help.aliyun.com/zh/model studio/new free quota 使用 API 调用大模型需要 API 密钥,这里我们以 Qwen 为例,您可以从百炼平台获取 API KEY 可选模型范围 在阿里云百炼的 模型库 ( https://bailian.console.aliyun.com/model market /model market )中选择 推理 API Inference ,里面的模型都可以选择。 之后在./owl目录下新建一个.env文件,可以参考 .env template ( https://github.com/camel ai/owl/blob/main/owl/.env template ),在里面配置好相关的 KEY,如果只想快速体验我们的第一个案例,则只需要配置 QWEN API KEY ,如果想体验相对完整的功能,需要配置 QWEN API KEY 、 CHUNKR API KEY 、 FIRECRAWL API KEY 、 GOOGLE API KEY 、 SEARCH ENGINE ID (如果没有 GOOGLE 相关 API 可以使用 duckduckgo来代替,参考上文的快速体验)。 一切都配置好之后我们就可以运行啦: Datawhale 多智能体教程、CAMEL、OWL 开源地址: • 教程地址: https://github.com/datawhalechina/handy multi agent • CAMEL: https://github.com/camel ai/camel • OWL: https://github.com/camel ai/owl 一起“ 点 赞 ”三连 ↓ 🔗 原文链接: https://mp.weixin.qq.com/s/lvs2y2Zn... https://mp.weixin.qq.com/s/lvs2y2Zn... ⏰ 发布时间:2025 03 09 22:48:15 (UTC+8) 作者:孙韬 Datawhale 最近 AI 圈最炸的瓜,毫无疑问是—— Manus。 前天我们邀请了 OWL 和 OpenManus 团队为大家带来了 全网首个 Manus 开源复现直播 ,直播回放在视频号。 全网首个 Manus 开源复现直播 今天为大家带来 Manus 开源复刻框架 OWL 的实测体验及技术拆解。 OWL 项目地址: https://github.com/camel ai/owl 🦉 OWL 是什么? 🦉 OWL 是一个基于 CAMEL AI 框架 ( https://github.com/camel ai/camel )的多智能体协作的尖端框架,它突破了任务自动化的界限,在其官方的介绍中表示: "我们的愿景是彻底改变 AI 代理协作解决实际任务的方式。通过利用动态代理交互,OWL 可以在不同领域实现更自然、更高效和更强大的任务自动化。" 目前 OWL 在 GAIA 基准测试中取得 58.18 平均分,在开源框架中排名第一。 这里是一个演示 demo: 其实如果大家看过 Manus 的演示视频就可以发现,因为一些任务现在的大模型没有办法一次性全都处理完,Manus 在完成我们提出的问题的时候会首先对任务进行任务拆分,之后形成一个 TODO.md 用来记录自己已经完成的进度。 在 OWL 中,也是类似的思想,OWL 整个流程基于 CAMEL 框架中 RolePlaying 方法,RolePlaying 是 CAMEL 框架的独特合作式智能体框架。该框架通过预定义的提示词为不同的智能体创建唯一的初始设置。 在 RolePlaying 中 User 角色负责将讲任务拆解,并且每次给出一个指令到 Assistant 角色,Assistant 角色负责实施指令,在这个过程中 Assistant 角色可以使用各种我们给它配置好的工具,比如获取实时信息(如天气、新闻)的工具、计算的工具以及在 OWL 中定义的一些特定的工具(包括控制 web 页面的工具、处理文件、表格、图像等工具)。 下面我们先来看一个 case,我的问题是 "帮我在小红书上找一些3.8女神节适合送妈妈的礼物" : 可以发现在运行过程中,我们的 agent 首先调用了 WebToolkit , WebToolkit 实际上是一个封装了智能体的一个工具,其中包括一个 planning agent 和一个 web agent 。在浏览器模拟交互任务开始时, planning agent 会首先给出一个详细的规划,这个规划之后会被用于指导 web agent 选择具体的执行动作。 那么我们的 agent 是怎么实现控制我们的浏览器的呢,首先任务明确之后,我们首先会跳转到一个网站,该网站是由 start url 来决定的,该参数是可以由用户指定,也可以是 agent 在自我规划中提出的。跳转到网站之后,我们的 WebToolkit 会将当前的页面截图保存下来,并且给其中的元素都打上标签。 该步骤的实现方法如下: 1. 交互元素通过 JavaScript 脚本获取: 2. add set of mark 函数负责在截图上绘制标记: 3. draw roi 函数负责实际绘制: 该函数会在元素周围绘制彩色矩形边框,为每个元素分配数字 ID 标签,最后在元素上方绘制带背景的标签,如下图所示。 生成的带标签的页面(该页面存储在./tmp目录里)就是我们 web agent 将要接收到图片输入啦,之后 web agent 会根据图片和指令来进行下一步动作。要了解 web agent 的工作逻辑,我们需要先了解一下 planning agent 是如何工作的,下面是它的提示词: 这里定义了 planning agent 的基本角色:一个帮助用户规划复杂任务的代理,专注于需要多步骤浏览器交互的任务。 planning agent 在初始规划阶段使用以下提示: 这个提示要求 planning agent : • 重述任务 • 提供详细的解决方案计划 • 考虑部分可观察马尔可夫决策过程的特性(网页只能部分观察) 在任务执行过程中, planning agent 可能需要根据新情况调整计划: 其中 {task prompt} 就是我们提供的原始任务输入: "帮我在小红书上找一些3.8女神节适合送妈妈的礼物" 。 {detailed plan} 则是上一次生成的规划内容, {self.history window} 默认为5,也就是说 planning agent 会动态地结合最近地一些信息来进行下一步规划。在prompt中要求了 planning agent 要使用结构化的输出。生成的规划内容会传输给 web agent 来帮助它完成任务 。 接下来,我们可以来看一下 web agent 的提示词来进一步了解它的工作逻辑。 使用一个简洁的系统提示定义了 web agent 的基本角色:一个帮助用户浏览网页的代理,能够利用预定义的浏览器工具完成用户目标。 之后如果 agent 认为需要进行操作电脑,就使用我们给它配备的 browser simulation 方法,该方法会循环地去观察我们的网页, web agent 在每次观察网页时会收到以下格式的提示: json {{ "obse

在 小宇宙note 阅读完整内容