OpenManus框架解析 :从抽象基类到多场景智能体变体
在大模型智能体开发领域,ReAct 模式(推理+行动)是目前工业界最主流、最成熟的智能体运行范式。绝大多数工具调用、自动化任务、场景化智能体,底层都依赖这套 Think-Act 循环机制。
本文将基于完整的类继承体系,层层拆解 BaseAgent → ReActAgent → ToolCallAgent → 场景化子类 的完整源码设计、核心能力、执行流程,帮你彻底搞懂工业级 ReAct 智能体的底层架构。
一、整体类继承架构一览
整套智能体框架采用分层抽象、逐级实现的设计,上层定义标准,下层落地场景能力,架构清晰、扩展性极强:
BaseAgent (抽象基类)
└── ReActAgent (抽象层,实现核心 Think-Act 循环)
├── ToolCallAgent (通用工具调用核心实现)
│ ├── BrowserAgent (浏览器自动化智能体)
│ ├── MCPAgent (MCP 协议外部工具智能体)
│ └── SWEAgent (软件工程专项智能体)
└── SandboxAgent 等其他场景变体
简单来说:BaseAgent 搭骨架,ReActAgent 定范式,ToolCallAgent 做通用实现,各子类适配专属业务场景。
二、底层基石:BaseAgent 基础抽象层
BaseAgent 是所有智能体的根抽象类,位于 app/agent/base.py:13,负责封装所有智能体通用的基础能力,是整个框架的底层支撑,不区分具体业务场景。
核心四大能力
|
能力模块 |
详细说明 |
|---|---|
|
状态管理 |
内置 |
|
内存记忆管理 |
依托 |
|
核心主循环 |
通过 |
|
卡死自愈检测 |
内置 |
三、核心范式:ReActAgent 抽象层
ReActAgent 是整套框架的核心灵魂,继承自 BaseAgent 且为抽象类,位于 app/agent/react.py:11。它严格定义了 ReAct 智能体的标准运行范式:先推理、后行动,将智能体行为拆解为 Think、Act 两个核心步骤。
核心源码设计
通过两个抽象方法强制子类实现推理和执行能力,通过step() 串联成完整单步逻辑:
class ReActAgent(BaseAgent, ABC):
@abstractmethod
async def think(self) -> bool:
# 思考阶段:分析上下文,决策下一步是否需要行动
...
@abstractmethod
async def act(self) -> str:
# 行动阶段:执行think阶段确定的操作,返回结果
...
async def step(self) -> str:
# 完整单步 = 推理 + 执行
should_act = await self.think()
if not should_act:
return "Thinking complete - no action needed"
return await self.act()
核心设计思想
-
Think 推理层:纯逻辑决策,基于当前对话内存、任务状态,判断是否需要调用工具、调用哪个工具、传入什么参数,返回布尔值标记是否需要执行行动
-
Act 执行层:纯动作落地,执行 Think 阶段敲定的决策,完成工具调用、命令执行、结果回写
-
Step 步进封装:标准化单步执行逻辑,由
BaseAgent.run()主循环持续驱动,形成闭环 ReAct 循环
这也是经典 ReAct(Reasoning + Acting) 模式的核心:智能体不再是单次问答,而是「推理-执行-观察-再推理」的持续迭代闭环。
四、通用落地:ToolCallAgent 核心实现
ToolCallAgent 是框架中使用率最高的实体智能体,继承自 ReActAgent,位于 app/agent/toolcall.py:18。它完整实现了工具调用场景下的 Think、Act 逻辑,是所有场景化工具智能体的父类。
1. Think 推理阶段(核心逻辑)
负责生成模型决策、解析工具调用指令,核心流程如下:
-
若配置了
next_step_prompt,自动追加至当前消息列表,补充阶段化提示信息 -
调用
LLM.ask_tool()与大模型交互,获取携带tool_calls的结构化响应 -
适配三种工具调用模式,灵活适配不同任务场景:
-
NONE:禁止工具调用,仅纯文本对话交互
-
REQUIRED:强制必须调用工具,无有效工具调用则主动抛异常,保证任务落地
-
AUTO:智能自适应,有工具调用需求则执行,无则直接返回文本回复
-
-
将模型返回的 assistant 消息(含工具调用信息)持久化存入内存
-
返回布尔值,标记是否存在待执行的工具调用,用于驱动后续 Act 阶段
2. Act 行动阶段(核心逻辑)
负责落地工具调用、归集执行结果,核心流程如下:
-
AUTO 模式下若无工具调用需求,直接返回模型文本回复
-
批量遍历所有
tool_calls,逐个调用execute_tool()执行工具 -
将所有工具执行结果封装为标准
tool_message,存入对话内存,留存完整上下文 -
拼接所有工具执行结果,作为本轮 step 的最终返回内容
3. 工具执行核心方法 execute_tool
-
校验工具调用命令格式合法性,拦截非法请求
-
通过全局
tool_map匹配对应的工具实例 -
解析校验工具入参 JSON 格式,保证参数合规
-
执行工具核心逻辑,完成对应任务操作
-
识别特殊终止工具(Terminate),自动将智能体状态置为 FINISHED,结束任务
-
标准化工具执行输出,生成统一的 observation 观测结果
4. 核心配置字段
|
字段名称 |
默认值 |
功能说明 |
|---|---|---|
|
available_tools |
CreateChatCompletion、Terminate |
智能体当前可调用的工具集合 |
|
tool_choices |
AUTO |
工具调用模式(NONE/REQUIRED/AUTO) |
|
special_tool_names |
["terminate"] |
可触发任务终止的特殊工具标识 |
|
max_steps |
30 |
单任务最大执行步数,防止无限循环 |
|
max_observe |
None |
工具观测结果最大截断长度,用于控参、避免上下文溢出 |
五、场景化子类:多专用智能体变体
框架基于 ToolCallAgent 延伸出多个垂直场景智能体,复用核心 ReAct 循环,仅适配专属工具、状态和参数,扩展性极强。
1. BrowserAgent 浏览器智能体(app/agent/browser.py:87)
-
继承自
ToolCallAgent -
专属能力:通过
BrowserContextHelper在每次推理前同步浏览器状态(URL、截图、标签页、页面元素) -
可用工具:BrowserUseTool(浏览器操作)+ Terminate
-
最大步数:20 步
-
适用场景:网页自动化、爬虫、页面操作、UI 交互测试
2. MCPAgent 外部协议智能体(app/agent/mcp.py:13)
-
继承自
ToolCallAgent -
专属能力:基于 MCP 协议对接外部工具服务器,支持 stdio、SSE 双传输方式
-
动态能力:每 5 步自动刷新工具列表,支持外部工具实时增删改,适配动态工具生态
-
最大步数:20 步
-
适用场景:对接第三方工具、远程服务、可动态扩展的工具集群
3. SWEAgent 软件工程智能体(app/agent/swe.py:10)
-
继承自
ToolCallAgent -
专属定位:专为软件工程、代码开发、问题修复场景设计
-
可用工具:Bash(命令行操作)+ StrReplaceEditor(代码编辑)+ Terminate
-
最大步数:20 步
-
适用场景:自动编码、代码调试、脚本执行、项目文件修改
六、完整全局执行流程
从用户输入到任务结束,整套智能体的完整闭环流程如下:
用户输入
│
▼
BaseAgent.run() 启动任务
│
├─ 标记智能体状态为 RUNNING
│
└─ 循环执行(未达最大步数、未终止)
│
├─ ReActAgent.step() 单步执行
│ │
│ ├─ think() 推理阶段
│ │ ├─ 构建本轮 Prompt 上下文
│ │ ├─ 调用 LLM 获取工具调用决策
│ │ ├─ 解析结构化 tool_calls
│ │ └─ 返回是否需要执行行动
│ │
│ └─ act() 执行阶段
│ ├─ 遍历所有工具调用指令
│ ├─ 逐个执行工具、获取观测结果
│ ├─ 结果写入内存上下文
│ └─ 归集返回执行结果
│
├─ is_stuck() 卡死检测,异常则注入优化策略
└─ 检测任务状态,判断是否终止
任务结束,返回最终结果
七、核心总结
1.分层设计是核心:BaseAgent 管通用生命周期,ReActAgent 管推理行动范式,ToolCallAgent 管通用工具调用,子类管场景定制,各司其职、解耦彻底。
2. ReAct 闭环是灵魂:所有智能体都遵循「Think 推理决策 → Act 落地执行」的迭代循环,完美复刻人类解决复杂任务的思考与行动逻辑。
3. 高扩展性适配多场景:基于统一父类,可快速衍生浏览器、代码工程、外部协议等垂直智能体,无需重构底层逻辑。
4. 工业级健壮性:内置状态管控、卡死自愈、步数限制、上下文管理,可稳定运行复杂长周期任务。
更多推荐

所有评论(0)