莫度编程网

技术文章干货、编程学习教程与开发工具分享

OpenManus代码解读

一、3月份的Agent时间线

2025年3月注定了是AI Agent技术史上的重要月份:

3月6日:Manus发布,火爆全网,并引发争议。

3月7日:OpenManus仅用3小时复刻了Manus,并将代码开源,将Agent的热度推上了高潮。

3月12日:OpenAI开源了其Agents SDK与Responses API。

3月21日:字节跳动开源了其Agent代码Agent TARS(UI-TARS)。

3月26日:DeepSeek支持了Function Call,以便支持Agent访问。

于是有人说:2025年将是AI Agent的元年,AI Agent将是未来3年最大的创业机会,未来3年将会诞生出无数的AI Agent产品。


二、AI Agent是什么?能解决什么问题?

AI Agent也叫人工智能代理,是一种具备自主感知、规划决策和执行能力的智能实体,能够通过大语言模型(LLM)和工具调用,主动解决复杂任务。

传统AI需用户逐条指令(如ChatGPT问答),而Agent能自主规划并执行多步骤任务(如从文档提取数据并生成报告)。

可以看到,AI Agent的两个关键词是:自主规划、执行多步骤任务。


三、两个AI Agent的开源实现

我接下来用两篇文章给大家解读两个开源Agent的具体代码实现:

一个是火爆全网的开源Agent:OpenManus,本文解读。

代码:git clone git@
github.com:mannaandpoem/OpenManus.git

另一个是transformers库中的Agent:下篇文章解读。

如果你做过Transformer架构的大模型,那你对transformers库一定不陌生,因为它成为了Transformer架构的事实标准,很多大模型的实现都依赖它。因此,transformers库中的Agent代码实现,也是很值得一读的。

代码:git clone git@
github.com:huggingface/transformers.git


四、OpenManus的代码结构

首先从整体上了解一下OpenManus的代码结构。

关键目录:

目录

说明

app/flow/

借助大语言模型将任务拆解为多个具体可执行步骤的任务规划模块。

app/agent/

实现了一系列Agent,每个Agent可执行一个具体步骤的操作。

app/tool/

实现了一系列工具,Agent的操作主要通过调用这些工具实现。

app/prompt/

访问大语言模型的提示词模板。

关键文件:

文件

说明

app/llm.py

将访问大语言模型的请求封装为3种方式:

1、带着文本去询问大语言模型。

2、带着文本+图片去询问大语言模型。

3、带着本地支持的工具去询问大语言模型。

main.py

启动单个Agent代理(不包含任务规划)。

具体是启动Manus类型的代理。

run_flow.py

启动多个Agent代理(包含任务规划)。

先将任务划分为多个具体的可执行步骤,对每一个可执行步骤,生成一个Manus类型的代理实例,用这个代理实例去完成本步骤的操作。

目录结构示意图:


五、OpenManus的启动入口与整体工作流程

main.py:启动单个Agent代理(不包含任务规划)。

仅仅是创建并执行了一个Manus类型的实例,来完成一个单一的操作。

Manus类型的实例,后面会介绍。


run_flow.py:启动多个Agent代理(包含任务规划)。

先将任务划分为多个具体的可执行步骤,对每一个可执行步骤,生成一个Manus类型的代理实例,用这个代理实例去完成本步骤的操作。


六、OpenManus的任务规划

首先通过调用大语言模型的接口,将任务拆解为一个个具体的执行步骤。

再遍历每一个具体的执行步骤,为步骤生成一个Manus类型的代理实例,通过这个Manus代理实例,完成本步骤的操作。


调用大语言模型的函数是self.llm.ask_tool,其将本地支持的工具集(Web搜索、执行Python代码、文件修改等)跟着请求一起发送给大语言模型,这样大语言模型就知道有哪些工具可以用。

之后大语言模型通过response.tool_calls数组返回了完成任务的具体步骤,及每一个步骤需要调用哪些工具,调用工具时需要填写什么参数。

于是就完成了任务的规划和拆解。


虽然代码实现了多种类型的Agent,但真正在用的却只有Manus类型的Agent,这应该是因为OpenManus的代码还在不断修改中,还不完善的缘故吧。

executor.run就是在执行Manus类型的实例,可以看到执行实例时,将下一步的提示词传进去了,方便Agent请求大语言模型。

Manus类型的Agent目前支持使用的工具有,后面会介绍。


七、OpenManus与大语言模型的接口

app/llm.py文件的LLM类将大语言模型的访问方式封装成了3个函数:

函数

作用

使用场景

ask

仅通过文本询问大语言模型

任务的所有步骤都完成后,通过这个接口让大语言模型做个总结

ask_with_images

通过文本+图像的方式询问大语言模型

未使用

ask_tool

带着本地支持的工具去询问大语言模型,如何用这些工具来完成指定的任务。

这是Agent询问大语言模型的主要方式

这3个接口均是通过标准接口询问大语言模型,只是填写的参数不同:

self.client.chat.completions.create


八、OpenManus的代理类型

实例使用的代理类型是Manus,它的父类是BrowserAgent,再往上一层的父类是ToolCallAgent,再往上一层的父类是ReActAgent,再往上一层的父类是BaseModel。

代理类型

代理作用

说明

BaseModel

代理类基类

虚类

ReActAgent

推理行动代理基类

虚类

ToolCallAgent

工具调用代理基类

虚类

支持的工具有:

CreateChatCompletion

Terminate

PlanningAgent

任务规划代理

支持的工具有:

PlanningTool

Terminate

本代理并没有实际使用,实际进行任务规划的是PlanningFlow类

SWEAgent

软件工程代理

支持的工具有:

Bash

StrReplaceEditor

Terminate

本代理并没有实际使用,实际执行代码的代理是Manus

BrowserAgent

浏览器代理

Manus代理的父类,

支持的工具有:

BrowserUseTool

Terminate

Manus

Manus主代理

支持的工具有:

PythonExecute

BrowserUseTool

StrReplaceEditor

Terminate


九、OpenManus的工具类型

工具类型

工具作用

说明

CreateChatCompletion

多轮对话工具


WebSearch

网络搜索工具

被BrowserUseTool工具使用

BrowserUseTool

浏览器自动化工具


PythonExecute

Python代码执行工具


Bash

Bash代码执行工具


Terminal

交互式命令行工具

未使用

PlanningTool

任务规划工具


StrReplaceEditor

文本内容编辑工具


FileSaver

文件保存工具

未使用

Terminate

任务终止条件判断工具



十、OpenManus代码总结

可以看到,OpenManus的代码抽象得很好,实现也很简单。

虽然有不少类实现了,却并没有使用,这应该是因为OpenManus的代码还在编写中,还没有最终定稿,但这并不影响我们阅读和理解它的代码。

Agent确实会是AI的下一个风口和热点,接下来几年会有大量Agent的出现,对于程序员来讲,通过阅读OpenManus的源代码,可以让我们更好地理解AI Agent的实现原理,帮助我们更好地跟进AI Agent的技术趋势。


关注我,下篇文章解读transformers库中的Agent代码实现。


欢迎关注微信公众号:志宏说算法AI

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言

    Powered By Z-BlogPHP 1.7.4

    蜀ICP备2024111239号-43