在大模型智能体开发领域,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,负责封装所有智能体通用的基础能力,是整个框架的底层支撑,不区分具体业务场景。

核心四大能力

能力模块

详细说明

状态管理

内置 AgentState 状态机,严格管控智能体生命周期:IDLE(空闲)→ RUNNING(运行中)→ FINISHED(完成)/ ERROR(异常)通过 state_context 上下文管理器,保证状态切换安全、线程可控

内存记忆管理

依托 Memory 对象统一管理全局消息历史,update_memory() 支持 user/system/assistant/tool 四种角色消息的录入与更新,完整留存对话与工具执行上下文

核心主循环

通过 run() 方法实现智能体主循环,持续调用 step() 单步执行,直至达到最大步数 max_steps 或状态切换为完成/异常,自动终止任务

卡死自愈检测

内置 is_stuck()卡死检测机制,识别连续重复的模型回复,超出阈值后自动注入策略优化提示,解决智能体循环卡死、无效重试问题

三、核心范式: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 推理阶段(核心逻辑)

负责生成模型决策、解析工具调用指令,核心流程如下:

  1. 若配置了 next_step_prompt,自动追加至当前消息列表,补充阶段化提示信息

  2. 调用 LLM.ask_tool() 与大模型交互,获取携带 tool_calls 的结构化响应

  3. 适配三种工具调用模式,灵活适配不同任务场景:

    1. NONE:禁止工具调用,仅纯文本对话交互

    2. REQUIRED:强制必须调用工具,无有效工具调用则主动抛异常,保证任务落地

    3. AUTO:智能自适应,有工具调用需求则执行,无则直接返回文本回复

  4. 将模型返回的 assistant 消息(含工具调用信息)持久化存入内存

  5. 返回布尔值,标记是否存在待执行的工具调用,用于驱动后续 Act 阶段

2. Act 行动阶段(核心逻辑)

负责落地工具调用、归集执行结果,核心流程如下:

  1. AUTO 模式下若无工具调用需求,直接返回模型文本回复

  2. 批量遍历所有 tool_calls,逐个调用 execute_tool() 执行工具

  3. 将所有工具执行结果封装为标准 tool_message,存入对话内存,留存完整上下文

  4. 拼接所有工具执行结果,作为本轮 step 的最终返回内容

3. 工具执行核心方法 execute_tool

  1. 校验工具调用命令格式合法性,拦截非法请求

  2. 通过全局 tool_map 匹配对应的工具实例

  3. 解析校验工具入参 JSON 格式,保证参数合规

  4. 执行工具核心逻辑,完成对应任务操作

  5. 识别特殊终止工具(Terminate),自动将智能体状态置为 FINISHED,结束任务

  6. 标准化工具执行输出,生成统一的 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. 工业级健壮性:内置状态管控、卡死自愈、步数限制、上下文管理,可稳定运行复杂长周期任务。

Logo

AtomGit AI 社区提供模型库、数据集、Agent、Token等资源

更多推荐