一、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