引言
在人工智能领域,大型语言模型(LLM)的出现带来了前所未有的可能性。然而,LLM 并非万能,它们会"幻觉",它们无法实时获取信息。为了弥补这些不足,ReAct 范式 应运而生,它赋予了 LLM 像人类一样"思考"(Reasoning)和"行动"(Acting)的能力,从而构建出更强大、更可靠的 ReAct Agent。
传统 LLM 的局限性:为什么需要 ReAct
想象一下,你问一个普通的 LLM:"请帮我规划一下从上海到北京的火车票,并告诉我天气情况。"
- 票务信息:LLM 可能会给出一些看似合理但实际上是虚构的票务信息,因为它无法访问实时票务系统。
- 天气信息:LLM 只能根据其训练数据回答历史天气,而无法提供实时天气。
核心问题: 传统的 LLM 缺乏与外部世界交互的能力,它们无法调用工具,也无法根据真实世界的反馈进行调整。
ReAct 范式登场:思考、行动、观察、迭代的循环
ReAct是谁提出来的?
在人工智能领域,ReAct (Reasoning and Acting)框架是由 普林斯顿大学 (Princeton University)和 谷歌研究院(Google Research,特别是 Brain 团队)的科研人员共同提出的。
该框架首次出现在 2022 年发表的论文 《ReAct: Synergizing Reasoning and Acting in Language Models》 中。其主要贡献者包括:
- 姚顺雨 (Shunyu Yao) :论文第一作者,来自普林斯顿大学。
- Jeffrey Zhao, Dian Yu, Nan Du, Izhak Shafran, Yuan Cao:来自谷歌研究院。
- Karthik Narasimhan:来自普林斯顿大学。
姚顺雨(Shunyu Yao)目前被公认为 AI Agent(人工智能体)领域的全球顶尖青年学者和领军人物之一。
小八卦:2025 年 12 月,腾讯官方确认姚顺雨已正式加盟,出任首席 AI 科学家(Chief AI Scientist),直属于 CEO/总裁办,并领导新成立的 AI Infra 部门 和大模型部门。
什么是 ReAct 范式
它的核心逻辑是一个四元组的循环:
Thought (思考) → Action (行动) → Observation (观察) → 迭代
核心组件分解:
- Thought (推理) :模型对当前任务进行分析,计划下一步要做什么(例如:"我需要查询当前的股价")。
- Action (行动) :模型决定调用哪个外部工具(Tool/Function Calling),并给出参数(例如:调用
get_stock_price(symbol="AAPL"))。 - Observation (观察) :模型接收外部工具返回的真实结果(例如:"Apple 股价为 190 美元")。
- 迭代:基于观察结果继续思考和行动,直到完成任务。

ReAct Agent:具有"手脚"的智能体
定义
ReAct Agent 就是基于 ReAct 范式构建的智能体。你可以把它想象成一个拥有大脑(LLM)和"手脚"(外部工具)的机器人。它不再仅仅是回答问题,而是能够:
- 理解并规划:解析用户意图。
- 调用工具:执行特定的外部操作。
- 处理反馈:根据工具返回的真实世界信息调整策略。
- 迭代优化:通过多轮思考-行动-观察,逐步接近最终答案
案例
这样说太干了,来点案例?😈
用户: "计算一下 2023 年 8 月 15 日,上海浦东新区有多少人会去迪士尼乐园,然后告诉我当天是否会下雨?"
- Thought: "用户想知道迪士尼客流量和天气。我需要一个获取客流量的工具和一个天气查询工具。客流量可能需要结合历史数据和节假日因素,天气是实时的。"
- Action: "调用
get_disney_attendance_estimate(date='2023-08-15', location='上海浦东新区')工具。" - Observation: "迪士尼乐园在 8 月 15 日(非周末)预计客流量为 30,000 人。"
- Thought: "我已经获取了客流量。现在需要获取天气信息。"
- Action: "调用
get_current_weather(location='上海浦东新区', date='2023-08-15')工具。" - Observation: "2023 年 8 月 15 日,上海浦东新区预计小雨。"
- Thought: "我已经获取了所有需要的信息,可以回答用户了。"
- Action: "回答用户:'根据预测,2023 年 8 月 15 日上海浦东迪士尼乐园预计客流量为 30,000 人,当天预计会有小雨。'"
深入后端开发:ReAct Agent 的实现框架
对于后端开发者来说,手动实现 ReAct 范式需要大量的提示词工程和状态管理。幸运的是,目前主流的 AI 框架都提供了对 ReAct 的开箱即用支持:
- Spring AI/Spring AI Alibaba
- Langchain4j
Spring AI Alibaba (声明式/配置式)
它更倾向于通过 Spring 的 Bean 注入和 ChatClient 来实现,其深度绑定 Spring 生态。
Java
// 典型的 Spring 风格:通过 ChatClient 绑定工具
var chatClient = chatClientBuilder
.defaultFunctions("currentWeatherTool") // 注册为 Spring Bean 的工具
.build();
// 执行时,Spring AI 内部会封装 ReAct 的循环逻辑
String response = chatClient.prompt("上海今天天气怎么样?").call().content();
LangChain4j (命令式/编排式)
它更像是一个工具箱,让你显式地构建"大脑"和"手脚"。如果你需要复杂的底层agent编排,那它更加适合你。
Java
Assistant assistant = AiServices.builder(Assistant.class)
.chatLanguageModel(model)
.tools(new WeatherTool()) // 手动绑定工具类
.chatMemory(MessageWindowChatMemory.withMaxMessages(10))
.build();
String response = assistant.chat("上海今天天气怎么样?");
对比总结
| 维度 | LangChain4j | Spring AI Alibaba |
|---|---|---|
| 生态 | 独立于框架,Quarkus/Spring 均可 | 深度绑定 Spring Boot / Cloud |
| 灵活性 | 极高,适合从底层定制 Agent 行为 | 较好,遵循"约定大于配置" |
| 上手难度 | 需要学习复杂的链/服务概念 | 只要会用 Spring,上手非常快 |
| 推荐场景 | 复杂的、非 Spring 环境的多 Agent 协作 | 现有的 Java 微服务系统增加 AI 能力 |

总结
ReAct范式很好地指导了agent如何思考并调用工具解决用户提出的问题,虽然耗费的token会多很多,但是幻觉问题得到大大缓解。这是agent开发的新的指导范式和里程碑。