目录

一、什么是 ReAct?

二、ReAct 的核心工作原理

1. 核心流程拆解

2. 直观流程图

三、与 CoT(思维链)的本质区别

四、ReAct Prompt 模板示例

五、工程实现要点


在大语言模型(LLM)的发展浪潮中,如何让模型从 “被动回答” 升级为 “主动解决问题”,成为了构建下一代 AI 智能体的核心挑战。ReAct(Reasoning and Acting)框架正是这一方向的关键突破,它通过融合推理与行动,让大模型能够像人类一样 “边思考边行动”,高效解决复杂任务。


一、什么是 ReAct?

ReAct 是Reasoning and Acting的缩写,是一种基于大语言模型的智能体框架。它的核心思想是让模型在生成回答时,交替输出 “思考” 和 “行动” 步骤,通过与外部环境的动态交互,逐步逼近并完成复杂任务。

与传统 LLM“输入→直接输出” 的黑盒模式不同,ReAct 打破了这一限制,让模型能够:

  • 主动规划下一步行动
  • 调用外部工具获取实时信息
  • 根据反馈调整策略
  • 最终输出可靠答案

二、ReAct 的核心工作原理

ReAct 的本质是一个 **思考→行动→观察 的迭代闭环 **,这个循环会不断重复,直到任务完成或满足终止条件。

1. 核心流程拆解

  • 思考(Thought)模型首先通过自然语言生成思考过程,明确当前任务状态、是否需要工具、需要什么工具、以及输入什么参数。这一步相当于人类的 “决策规划”。

  • 行动(Action)根据上一步的思考,模型选择并执行具体操作,例如调用搜索引擎、请求 API、与环境交互等,并输出结构化的指令。

  • 观察(Observation)行动执行后,系统将返回的结果(如 API 响应、搜索结果)反馈给模型,这一步称为 “观察”,为下一步思考提供新的信息。

  • 循环迭代模型将 “观察” 结果附加到上下文中,在新的上下文中继续 “思考→行动→观察” 的循环,直到判断任务完成,输出最终答案。

2. 直观流程图

(图来自面试鸭)

三、与 CoT(思维链)的本质区别

ReAct 和 CoT(Chain-of-Thought,思维链)都是增强 LLM 推理能力的重要技术,但它们的核心定位和能力边界截然不同:

特性 ReAct CoT
核心定位 融合推理与行动,强调与外部环境交互 专注于内部推理过程,不依赖外部交互
行动能力 支持调用工具、API、搜索引擎等外部能力 仅在模型内部进行推理,无外部行动
信息来源 可获取实时、动态的外部信息 仅依赖模型训练时的静态知识
适用场景 信息检索、复杂决策、任务自动化等需要外部交互的任务 数学计算、逻辑推理、文本生成等纯推理任务
可解释性 高,思考和行动步骤清晰可见 中,推理过程可见,但缺乏行动反馈

简单来说,CoT 让模型 “想得多”,而 ReAct 让模型 “做得多”。


四、ReAct Prompt 模板示例

要让 LLM 遵循 ReAct 框架,需要精心设计 Prompt,明确告知模型 “思考→行动→观察” 的规则。以下是一个通用的 Prompt 模板示例:

你是一个强大的AI助手,现在你需要解决用户的问题。请严格按照以下步骤进行:

1. **思考(Thought)**:分析当前问题,明确你需要做什么,是否需要调用工具,以及调用什么工具。
2. **行动(Action)**:根据思考,调用指定的工具,并输出工具名称和参数。
   - 可用工具:
     - search: 用于网络搜索,参数为query(字符串)
     - calculate: 用于数学计算,参数为expression(字符串)
3. **观察(Observation)**:等待工具返回结果,然后根据结果继续思考。
4. 重复步骤1-3,直到你可以直接回答用户的问题。

用户问题:{用户问题}

当模型接收到这个 Prompt 后,就会生成类似以下的输出:

Thought: 用户想知道2026年3月4日北京的天气,我需要调用search工具查询实时天气信息。
Action: search("2026年3月4日北京天气")
Observation: 北京,2026-03-04,晴,-2°C~8°C,北风3-4级
Thought: 我已经获取到了北京明天的天气信息,可以直接回答用户了。
Final Answer: 北京明天(2026-03-04)天气晴,气温-2°C~8°C,北风3-4级。

其实也有更直观的,比如现在AI IDE不是很火麻,像trae给你写代码的过程其实也是符合ReAct的

五、工程实现要点

在实际工程中落地 ReAct 框架,需要关注以下几个关键要点:

  • 工具封装与标准化

    • 对所有外部工具(API、数据库、搜索引擎等)进行统一封装,提供标准化的调用接口和参数格式。
    • 明确每个工具的功能、输入输出、错误码,便于模型理解和使用。
  • 记忆与上下文管理

    • 维护一个历史对话缓冲区,存储所有的 “思考→行动→观察” 记录,作为模型的短期记忆。
    • 当上下文过长时,采用摘要、过滤等策略进行压缩,避免超出模型的上下文窗口限制。
  • 终止条件与循环控制

    • 设定明确的终止条件,例如:模型输出 “Final Answer”、达到最大迭代次数、或连续多次行动失败。
    • 实现循环不收敛的兜底策略,如强制终止并提示用户 “任务无法完成”。
  • 错误处理与自我修正

    • 当工具调用失败或返回异常结果时,模型应能识别错误,并在 “思考” 阶段调整策略,重新尝试。
    • 对常见错误(如参数错误、网络超时)进行预定义,引导模型进行针对性修正。

如果是从0实现并且想了解原理的可以参考一个类似的项目:OpenManus,在Github就可以搜到,里面的设计实现都很精妙。

如果是用于快速开始可以直接使用SpringAI alibaba的Agent的框架,开箱即用

Agents | Spring AI Alibabahttps://java2ai.com/docs/frameworks/agent-framework/tutorials/agents

感兴趣的宝子可以关注一波,后续会更新更多有用的知识!!!

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐