链载Ai

标题: 手撕“开源版Manus” [打印本页]

作者: 链载Ai    时间: 6 小时前
标题: 手撕“开源版Manus”

周末被Manus刷屏,看了拿到邀请码的老哥们发到网上的实测视频,确实挺炫酷,但Monica采用的饥饿营销策略让manus产品的邀请码被炒到了2万一个,家境贫寒之下找了Github上号称复现manus的项目OpenManus当做它的平替参照,做个剖析来过个瘾。

结论

体验

思考

对比项

短期方案

远期方案

设计目标

快速具备面向复杂任务的可靠交付能力

开放式探索能力和领域创造力,能带来新认知新方法

架构

追求专业能力组合的多智能体架构

1、使用分离的专门模型处理不同任务

2、每个子任务有独立的执行模块

3、通过明确的协调层管理各智能体间的通信

追求整体智能涌现的端到端模型架构

1、单一模型负责理解所有任务需求

2、通过生成代码或指令与外部工具交互

3、任务管理和执行逻辑都内置于同一模型中

优势

ROI最高:在垂域通过"LLM+小模型集群+领域知识库"进行工程化封装,即可快速具备可用性

更强的专业性:针对特定任务的专业模型可以达到更高精度

更敏捷的迭代:可以单独优化或替换某个智能体而不影响整体

可验证的流程:各智能体的职责划分明确,便于诊断问题

更强的拓展性:可以更容易地添加新功能或适应新领域

更强的一致性:全过程由同一模型处理,思考、执行、反馈、决策有更强的整体性和连贯性

更极致的效率:没有多Agent之间的通讯、启停开销

更流畅的体验:对用户请求的响应更快,更高效

突破人类经验局限的创造力:端到端模型可以涌现“反直觉但事后可解释”的决策模式,另外整体思考也会带来意想不到的解决方案

劣势

更高的复杂度:多智能体协作需要复杂的协调机制

更高的维护成本:多组件系统带来更高的维护和调试成本

更高的在线时延:多智能体间的通信可能引入额外延迟

整体性思考欠缺:分治的思路可能导致缺乏全局观和创造性

更难更新:整体模型更新周期长,针对某一单功能进行优化的成本更高

更高资源:需要更大的模型容量来包含所有功能,导致难以训练,需要探索新方法

核心流程

用户请求 → 识别任务需求→选择合适的工具(GoogleSearch、PythonExecute、etc.)→调用外部独立工具并执行 → 搜集工具结果并整合→ 决定下一步行动

用户请求 → 将所有上下文给到端到端模型 → 模型生成综合性的响应(推理、行动,etc)→ 内部执行所有功能 → 更新内部状态→ 将结果反馈到下一轮



项目获取

项目地址,供参考

https://github.com/mannaandpoem/OpenManus

以下在本机的终端(terminal)中执行

准备Python环境

condacreate-nopen_manuspython=3.12condaactivateopen_manus

获取远程项目资源

gitclonehttps://github.com/mannaandpoem/OpenManus.gitcdOpenManus

安装依赖包

pipinstall-rrequirements.txt

准备一个配置大语言模型接口的文件

cpconfig/config.example.tomlconfig/config.toml

修改文件中的三个参数为你的API参数(model、base_url、api_key)

# Global LLM configuration[llm]model="gpt-4o"base_url="https://api.openai.com/v1"api_key="sk-..."# Replace with your actual API keymax_tokens=4096temperature=0.0
# Optional configuration for specific LLM models[llm.vision]model="gpt-4o"base_url="https://api.openai.com/v1"api_key="sk-..."# Replace with your actual API key

项目实测


指令

访问知乎网站,浏览跟manus关键词相关的帖子,提炼对其的分析与评价,将结果做成小红书风格的网页文件以下是小红书风格1、吸引人的标题2、高质量的视觉3、适当的标签和关键词4、个性化

执行过程

执行过程非常慢,需要耐心等待,并且有一定的失败概率

交付结果

看起来确实有模有样的,粗看起来无论排版还是内容,让我自己写可能也不过如此,但这个表现是LLM直接赋予的,就像我上面说的,OpenManus其实更多是工程化的定义。



系统分析

流程拆解

概述

当用户输入指令(比如给它指令:"分析知乎热搜")后OpenManusOpenManus执行流程如下

1.启动系统

用户启动main.py并输入指令

系统创建一个名为OpenManus的"智能助手"实例,接受并处理用户指令

2.分析和规划

大语言模型先分析用户的指令,理解用户想要完成什么任务

再思考解决方案,制定一个详细的执行计划

最后决定每一步需要使用什么工具来完成任务

3.执行与反馈循环

选择LLM推荐的工具(比如用BrowserUseTool工具访问知乎)

执行工具操作并返回结果(比如网页内容)

LLM分析上一步的结果

LLM评估后决定下一步行动是什么(比如是重新调整planning还是执行预定的下一步)

4.处理与创建

如果获取到数据,LLM会编写python代码处理这些数据

系统执行这些代码(这里用的是PythonExecute工具)

LLM继续指导如何生成报告和可视化图表

5.保存与完成

有了结果之后视需要选择保存文件(这理由对应的文件操作工具FileSaver)

LLM确认任务完成,系统返回执行摘要,继续等待用户的下一个指令

LLM的关键作用

这里要特地说一下LLM在OpenManus中的作用,LLM 既是系统的认知核心,也是执行控制器,在整个过程中不断规划、执行、分析和适应。这种迭代方法使系统能够处理需要多个步骤、工具交互和基于中间结果的动态调整的复杂任务。LLM就像是OpenManus的"大脑",在整个过程中起到的作用非常关键

1.指挥中心

LLM接收用户指令,理解任务需求,然后规划整个执行流程。它决定需要采取哪些步骤,以什么顺序执行,以及使用哪些工具。

2.工具调度

在执行任务的过程中,LLM能够从工具箱中默认的几种可选工具(浏览器、Python执行器、文件保存器等)里面挑选最合适的工具来完成当前任务,同时还会生成执行时工具的配置参数。

{"tool_calls":[{"id":"call_9c3e5d7f8b","type":"function","function":{"name":"browser_use","arguments":{"action":"execute_js","script":"functionextractHotList(){\nconsthotItems=document.querySelectorAll('.HotList-item');\nconstresult=[];\n\nhotItems.forEach((item,index)=>{\nconsttitleElement=item.querySelector('.HotList-itemTitle');\nconstmetricElement=item.querySelector('.HotList-itemMetrics');\nconsttopicElement=item.querySelector('.HotList-itemCategory');\n\nconsttitle=titleElement?titleElement.textContent.trim():'Unknown';\nconstmetric=metricElement?metricElement.textContent.trim():'Unknown';\nconsttopic=topicElement?topicElement.textContent.trim():'Unknown';\n\nresult.push({\nindex:index+1,\ntitle:title,\nhot_metric:metric,\ntopic:topic\n});\n});\n\nreturnJSON.stringify(result,null,2);\n}\n\nextractHotList();"}}}],"content":"现在我们已经成功访问了知乎热榜页面,下一步是提取热榜数据。知乎热榜数据通常包含在特定的HTML元素中,我需要使用JavaScript来提取这些信息。我将使用browser_use工具的execute_js功能来运行JavaScript代码,提取热榜项目的标题、热度和分类等信息。"}

3.代码生成

当需要处理数据或创建可视化图表时,LLM会根据当前情况编写合适的Python代码。比如它可以根据当前的任务生成清洗数据、分析信息、生成图表和报告的python脚本(当然这个过程中可能需要安装相关的依赖包,实测有大部分安装包都需要在给出提示后手工安装)。

{"tool_calls":[{"id":"call_6b8d9e2c5a","type":"function","function":{"name":"python_execute","arguments":{"code":"importjson\nimportre\n\n#假设这是从上一步获取的热榜数据\nraw_data='''\n[{\"index\":1,\"title\":\"国务院办公厅发文促消费政策再加力\",\"hot_metric\":\"1425万热度\",\"topic\":\"财经\"},\n{\"index\":2,\"title\":\"今日春分\",\"hot_metric\":\"1001万热度\",\"topic\":\"自然\"}]\n'''\n\n#解析JSON数据\ntry:\nhot_list=json.loads(raw_data)\nprint(f\"成功加载{len(hot_list)}条热榜数据\")\n\n#处理热度数值\nforiteminhot_list:\n#提取数字部分\nif'hot_metric'initem:\nmatch=re.search(r'(\\d+(\\.\\d+)?)',item['hot_metric'])\nifmatch:\nhot_value=float(match.group(1))\n#根据单位调整值\nif'万'initem['hot_metric']:\nhot_value*=10000\nitem['hot_value']=hot_value\nelse:\nitem['hot_value']=0\n\n#统计主题分布\ntopics={}\nforiteminhot_list:\ntopic=item.get('topic','未知')\ntopics[topic]=topics.get(topic,0)+1\n\nprint(\"\\n热榜主题分布:\")\nfortopic,countinsorted(topics.items(),key=lambdax:x[1],reverse=True):\nprint(f\"{topic}:{count}条\")\n\n#按热度排序\nsorted_list=sorted(hot_list,key=lambdax:x.get('hot_value',0),reverse=True)\nprint(\"\\n按热度排序的前5条热榜:\")\nfori,iteminenumerate(sorted_list[:5]):\nprint(f\"{i+1}.{item['title']}({item['hot_metric']})\")\n\n#保存处理后的数据供后续使用\nprocessed_data={\n'raw_list':hot_list,\n'sorted_list':sorted_list,\n'topic_stats':topics\n}\nprint(\"\\n数据处理完成,已准备好用于后续分析\")\n\nexceptjson.JSONDecodeErrorase:\nprint(f\"JSON解析错误:{e}\")\nexceptExceptionase:\nprint(f\"处理数据时出错:{e}\")"}}}],"content":"现在我们已经成功提取了知乎热榜数据,下一步是清洗和处理这些数据。我需要编写Python代码来处理JSON数据,提取热度数值,标准化主题分类,并准备用于后续分析的数据结构。我将使用python_execute工具来运行数据处理代码。"}

4.过程管理

当遇到困难(如网页结构复杂、数据提取失败)时,LLM能够分析失败原因,调整策略,尝试新方法。它具有"反思"能力,可以从错误中学习并改进方案。

5.节点决策

在每一步执行后,LLM评估结果并决定下一步行动。它可以根据反馈调整计划,决定是继续执行、修改策略还是完成任务。

6.结果评估

LLM负责判断任务是否完成、结果是否符合要求。它可以生成总结报告,并决定何时结束任务执行。

流程图

这里主要关注=LLM的作用,其在项目中扮演的角色非常核心,无论是生成plan、结合工具执行act,还是根据执行结果判断是否要调整plan,这些都是由LLM承载。

plan环节的prompt

您是由OpenManus驱动的全能型AI助手,旨在解决用户提出的任何任务需求。您拥有多种工具调用能力,可高效完成编程开发、信息检索、文件处理、网页浏览等各类复杂需求。您可以通过以下工具与计算机交互: Python执行工具(PythonExecute) :运行Python代码以执行系统交互、数据处理、自动化任务等操作。 文件保存工具(FileSaver) :将重要内容和信息文件保存到本地,支持.txt、.py、.html等格式。 浏览器操控工具(BrowserUseTool) :打开、浏览和使用网页浏览器。如果需要打开本地HTML文件,必须提供文件的绝对路径。 网络信息检索工具(GoogleSearch) :执行网络信息抓取。 操作策略 : 根据用户需求,主动选择最合适的工具或工具组合。 对于复杂任务,可以将问题拆解,逐步使用不同工具解决。 在使用每个工具后,清晰解释执行结果并建议下一步操作。
现在,用户给你的任务是:最近manus很活,请你搜集相关的信息整理成一份有深度的报告,整理成图文并茂的html文件格式



系统时序图



用例图

回到开头的例子,我用这张图来演示当我们敲入命令“搜集知乎上关于manus的帖子……”之后,系统内部发生了,模块之间的调用顺序是什么、同时从图中也可以直观感受到,LLM在agent中发挥的决定性作用。





AI 时代的分布式多模态数据处理实践


在AI多模态数据处理中,企业面临海量文本、图像及音频数据的高效处理需求,本地受限于单机性能,难以满足大规模分布式计算要求。本方案介绍了基于分布式计算框架 MaxFrame,依托 MaxCompute 的海量计算资源,对多模态数据进行分布式处理、模型离线推理。






欢迎光临 链载Ai (https://www.lianzai.com/) Powered by Discuz! X3.5