信息汇总:
https://zhuanlan.zhihu.com/p/1897429266813125945
二、基础知识:
Open Manus 实现的是一种 Reactor 模式的单 Agent 系统。理解 Reactor 模式对于理解 Open Manus 的工作原理至关重要。
Reactor 模式包含两个核心要素:
(推理)和
(行动)。其基本流程如下:
-
用户输入 (Query): 用户提出一个问题或指令。
-
模型思考 (Think): 模型对用户输入进行推理,确定需要执行的操作。
-
行动执行 (Action/Function Call/Tool Call): 模型选择一个工具或函数,并提供相应的参数。
-
环境/观察 (Environment/Observation): 执行选定的行动,并将结果反馈给模型。
-
最终答案 (Final Answer): 模型基于思考、行动和观察结果,生成最终的答复。
该过程可以循环进行,直到模型认为任务完成并给出最终答案。
三、Open Manus 架构与运行模式
Open Manus 目前有两种运行模式:
-
python main(单 Agent 模式): 只有一个 Manus Agent,负责接收用户输入、选择工具、执行操作并返回结果。 -
python run_flow(双 Agent 模式): 包含两个 Agent:
- Planning Agent: 负责生成任务清单 (Checklist),将复杂任务分解为多个子任务。
- Manus Agent: 负责执行 Planning Agent 生成的每个子任务。
3.1 单 Agent 模式 (python main)
用户输入直接传递给 Manus Agent,Agent 决定调用哪些工具(如 Python 代码执行、Google 搜索等),执行工具后将结果返回给 Manus Agent,最终生成并返回结果给用户。
3.2 双 Agent 模式 (python run_flow)
-
用户输入传递给 Planning Agent。
-
Planning Agent 生成一个任务清单 (Checklist),包含多个待办事项。
-
针对 Checklist 中的每个任务:
- Manus Agent 执行任务。
- Manus Agent 将执行结果返回给 Planning Agent。
- Planning Agent 更新 Checklist,标记已完成的任务。
- 所有任务完成后,Planning Agent 将最终结果返回给用户。
四、代码结构与模块分析
Open Manus 项目主要包含以下几个部分:
4.1 main.py 和 run_flow.py
main.py: 单 Agent 模式的入口。run_flow.py: 双 Agent 模式的入口。
4.2 open_Manus 目录
agents: 定义了各种 Agent,其中最重要的是:MamusAgent: 继承自ToolCallingAgent,是单 Agent 模式下的主要 Agent。PlanningAgent: 用于双 Agent 模式,负责任务规划。flows: 包含双 Agent 模式 (run_flow.py) 的相关逻辑,单 Agent 模式下不使用。prompts: 定义了每个 Agent 的提示信息,包括:- System Prompt: 描述 Agent 的角色和职责。
- Next Step Prompt (User Instruction): 指示 Agent 下一步要做什么。
tools: 定义了 Agent 可以使用的各种工具,例如:python_code_executor.py: 执行 Python 代码。google_search.py: 进行 Google 搜索。browser.py: 模拟浏览器操作。file_writer.py: 保存文件。finish.py: 终止流程。
每个 Agent 可以使用不同的工具组合。Manus Agent 可以使用上述五个工具。
五、代码执行流程 (以 main.py 为例)
5.1 初始化
- 创建
ManusAgent对象。 - Agent 对象包含:
prompt: Agent 的提示信息。allowed_tools: Agent 可以使用的工具列表。
5.2 循环执行
-
接收用户输入: 等待用户输入下一条指令。
-
Agent.Run: 调用 Agent 的
run方法。
run方法内部调用step方法。
- Step: 执行单个步骤,包括:
- Think: 模型思考,决定下一步行动。
- 获取 Next Step Prompt (用户指令)。
- 结合 System Prompt。
- 调用
client.chat.completions.createAPI (底层使用
) 生成思考结果 (Action/Function Call)。
- Act: 根据思考结果执行相应的工具。
- 解析思考结果中的 JSON 或 Function Call 信息。
- 调用相应的工具函数。
- 将工具执行结果 (Observation) 记录下来。
- 更新记忆 (Update Memory): 将思考结果和工具执行结果添加到 Agent 的历史消息 (History Message) 中。
-
判断是否终止: 如果模型认为任务已完成,则调用
finish.py终止流程。 -
返回结果: 将最终结果返回给用户。
-
循环: 回到步骤 1,等待下一条指令。
5.3 ToolCallingAgent 与 ReactAgent
ManusAgent继承自ToolCallingAgent。ToolCallingAgent实现了 React 模式的具体逻辑。ReactAgent定义了基本的run和step方法,实现 Think-Act-Observe 的循环过程。
5.4 工具执行 (execute_tool)
- 解析 Action/Function Call 中的 JSON 数据。
- 根据解析结果调用相应的工具函数。
- 将工具执行结果作为 Observation 返回。
- 将 Observation 添加到 Agent 的历史消息中。
六、双 Agent 模式 (run_flow.py) 流程简述
-
初始化 Planning Agent: 创建
PlanningAgent对象。 -
生成 Checklist: Planning Agent 根据用户输入生成任务清单。
-
循环执行 Checklist 中的每个任务:
- 获取当前步骤 (Step)。
- 确定执行者 (Executor),始终为
ManusAgent。 ManusAgent执行任务,使用其可用的工具。ManusAgent将执行结果返回给PlanningAgent。PlanningAgent更新 Checklist 和状态。
-
判断是否终止: 如果
ManusAgent认为任务完成,则触发终止流程。 -
返回结果:
PlanningAgent将最终结果返回给用户。
双 Agent 模式需要模型具备较强的规划能力。
总结
Open Manus 项目提供了一个学习和研究基于 LLM 的 Agent 系统的良好范例。其代码结构清晰,模块化设计良好,易于理解和扩展。通过对 Open Manus 源代码的深入分析,可以掌握 Reactor 模式、Agent 设计、工具调用等关键概念,并了解如何构建一个基于 LLM 的智能 Agent 系统。
一些特色:
