【SpringAI】ReAct:让大模型学会 “边想边做”
摘要:ReAct框架通过"思考→行动→观察"的闭环机制,使大语言模型具备主动解决问题的能力。该框架突破传统LLM的被动应答模式,支持调用外部工具获取实时信息,在复杂任务中实现动态决策。相比仅专注内部推理的CoT技术,ReAct强调与环境的交互能力,适用于需要实时信息检索和工具调用的场景。工程实现需关注工具标准化、上下文管理、循环控制等关键点,已有OpenManus等项目提供参考
目录
在大语言模型(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 Alibaba
https://java2ai.com/docs/frameworks/agent-framework/tutorials/agents

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

更多推荐


所有评论(0)