ReAct 是什么?推理与行动交替运转
作者:程序员马丁
Ragent AI —— 从 0 到 1 纯手工打造企业级 Agentic RAG,拒绝 Demo 玩具!AI 时代,助你拿个offer。
上一篇咱们给比特 严选智能体画了张蓝图:八大任务、四个复杂度等级,第一版选出四个任务和五个工具。蓝图画完,你已经知道这个智能体要解决什么问题、手里有哪些家伙事儿。
但蓝图归蓝图,真要写代码,还有一个最根本的问题没回答——Agent 循环里那个想-做-看到底是个什么范式?凭什么让大模型一边想一边干就能把事办成?
这一篇,咱们正式进入第二部分《ReAct 核心》。先不敲 Java,把 ReAct(Reasoning + Acting,推理 + 行动)这个范式的来龙去脉讲透:它从哪来、为什么管用、跟纯思维链和纯工具调用有什么本质区别。概念理清楚了,下一篇才好真刀真枪地手写循环。
先看两种走极端的做法
在讲 ReAct 之前,咱们先看看两种看起来合理、但各有硬伤的方案。还是拿比特严选那个老例子:用户说“我上周买的扫地机不回充了,修不好我想退,订单号 88231”。
1. 只想不干:纯思维链
第一种做法:让大模型使劲想,一步步推理,但不给它调工具的能力。
这就是所谓的思维链(Chain of Thought,简称 CoT)——给模型一个提示,让它把推理过程一步步写出来,最后给出答案。
你把用户的问题丢给模型,它可能会这样输出:
用户想退订单 88231 的扫地机。
我需要先确认这笔订单的状态和签收时间。
假设订单是上周下的,大概 6 月 22 日左右签收。
今天大约是 6 月 29 日,刚好在七天退货窗口内。
所以用户应该可以申请退货。
最终答案:您的订单在七天退货期内,可以申请退货。请前往 APP 的售后页面提交退货申请。
看起来挺像那么回事?但仔细一看,全是编的。
它说“假设订单是上周下的,大概 6 月 22 日左右签收”——它根本没查订单系统,怎么知道是 6 月 22 日签收的?它说“今天大约是 6 月 29 日”——模型不知道今天几号,这个日期也是猜的。最终得出“可以申请退货”——前提都是假的,结论能靠谱吗?
这就是纯思维链的要害:推理链条再漂亮,一旦中间某个环节需要真实数据,它就只能靠编。这种编出来的数据看起来合理,但跟真实情况可能完全对不上。在客服场景里,用户听了你的话去申请退货,结果发现根本不在退货窗口内——这种体验比不回答还糟 。
2. 只干不想:纯工具调用
第二种做法走另一个极端:让模型直接调工具,不用想那么多,看到关键词就调对应的工具。
这种做法有时候叫 Act-only(只行动),模型的输出大概是这样:
Action: queryOrder
Input: 88231
工具返回了订单详情,然后模型接着调:
Action: applyRefund
Input: 88231
等等,中间那步呢?模型根本没判断今天是几号、签收有没有超过七天,就直接发起退款了。万一这笔订单签收已经超过七天了呢?退款请求要么被系统拒绝(好情况),要么真退了不该退的货(坏情况)。
纯工具调用的问题正好跟纯思维链反过来:它有手有脚,但脑子不转。工具倒是调了,但调之前没想清楚该不该调、调完之后没分析结果,就像一个不过脑子的客服,用户说退就退,连基本的判断都省了。
3. 问题的根源
把这两种做法摆在一起看,问题就清楚了:
| 做法 | 擅长 | 缺陷 | 在退款场景的表现 |
|---|---|---|---|
| 纯思维链(CoT) | 推理过程清晰、逻辑严密 | 没法获取真实数据,只能靠编 | 编了个签收日期,结论不可信 |
| 纯工具调用(Act-only) | 能查真实数据、能触发操作 | 不会分析结果、不会做判断 | 没判断退货条件就直接退款 |
一个只会想不会干,一个只会干不会想。你想要的是一个既会想又会干的——想一步,干一步,干完看看结果,再想下一步该怎么走。
这就是 ReAct。
ReAct 是什么
1. 一句话定义
ReAct 是 2022 年由普林斯顿大学和 Google 的研究团队提出的一种 Agent 范式,全名是 Reasoning + Acting,直译就是推理 + 行动。核心思想用一句话概括:
让大模型把推理(Thought)和行动(Action)交替进行——先想清楚下一步该干什 么,再去干,干完看结果,再想下一步。
论文标题叫《ReAct: Synergizing Reasoning and Acting in Language Models》,2022 年 10 月首次公开,后正式发表于 ICLR 2023。如果你好奇细节可以去读原文,但本篇会把核心思想讲透,不需要你啃论文。
2. Thought-Action-Observation 三元组
ReAct 的运转单元是一个三元组:Thought → Action → Observation,每转一圈就是一组。
- Thought(思考):大脑基于当前已知的一切,推理出下一步该干什么。这里的关键是大脑要把推理过程说出来,不是闷在心里直接给动作。
- Action(行动):根据思考的结论,调用一个具体的工具。
- Observation(观测):工具执行后返回的结果。这个结果会被记下来,成为下一轮思考的输入。
循环就是这三步反复转:想完了干,干完了看,看完了再想。一直转到大脑认为信息够了、任务完成了,才给出最终答复。
用比特严选退款那个例子走一遍完整的 ReAct 格式,你就明白了。
3. 退款场景的 ReAct 完整轨迹
用户消息:「我上周买的扫地机不回充了,修不好我想退。订单号 88231。」
第一圈:
Thought: 用户想退订单 88231 的扫地机。我需要先查一下这笔订单的详情,
确认商品信息和签收时间,才能判断是否符合退货条件。
Action: queryOrder
Action Input: 88231
Observation: {"orderId":"88231","product":"比特 S10 Pro 扫地机",
"orderTime":"2026-06-20","signTime":"2026-06-22","status":"已签收",
"trackingNo":"SF1234567890"}
第二圈:
Thought: 订单 88231 是比特 S10 Pro 扫地机,6 月 22 日签收,当前状态是已签收。
用户反馈商品故障,要判断能不能走质量问题退货,我需要知道今天的日期来确认是否在售后时限内。
Action: getCurrentTime
Action Input: 无
Observation: {"currentTime":"2026-06-29T14:30:00"}
第三圈:
Thought: 今天是 6 月 29 日,签收日期是 6 月 22 日,签收后第 7 天。用户反馈扫地机
无法回充且修不好,属于商品质量问题,签收 15 天内可以申请退货退款,
目前在售后时限内,符合退货条件。我现在可以帮用户发起退款申请。
Action: applyRefund
Action Input: {"orderId":"88231","reason":"商品质量问题-扫地机无法回充,用户要求退货"}
Observation: {"success":true,"refundId":"RF20260629001","message":"退款申请已提交,
预计 1-3 个工作日到账"}
最终答复:
Thought: 退款申请已经成功提交,退款单号 RF20260629001,预计 1-3 个工作日到账。
信息齐全了,可以给用户最终答复。
Final Answer: 已经帮您提交了退款申请。您的订单 88231(比特 S10 Pro 扫地机)
属于商品质量问题,符合退货退款条件,退款单号为 RF20260629001,预计 1-3 个工作日原路退回。
如有问题可以随时联系我。
三圈循环,每一圈都是 Thought → Action → Observation。注意几个关键点:
- 每一步 Thought 都在分析当前局面:第一圈想到要先查订单,第二圈想到要知道今天日期来算时限,第三圈想到条件满足可以退款。推理不是一次性的,而是每一步都在根据新信息重新思考。
- Action 是 Thought 的直接产物:大脑想到“要查订单”,紧接着就去调
queryOrder;想到“要算时限”,就去调getCurrentTime。每个行动都有明确的推理依据。 - Observation 是下一轮 Thought 的输入:查订单拿回来的签收日期,成了第二轮推理的原材料;获取的当前时间,成了第三轮判断退货条件的依据。
对比一下前面两种极端做法:纯思维链会在第一步就编一个签收日期;纯工具调用会跳过第二步和第三步的判断直接退款。ReAct 两种能力都有,推理给行动指方向,行动给推理补信息,形成了一个正反馈循环。
为什么 ReAct 管用
1. 推理为行动指路
没有 Thought 的 Action 是盲目的。
在退款场景里,如果大脑不先想一想要判断退货条件需要知道今天日期,它就不会去调 getCurrentTime,也就不会去算签收有没有超过七天。推理的价值在于:它让每一次工具调用都有目的,而不是碰运气。
打个比方,纯工具调用像一个拿着锤子到处找钉子的人——手里有什么工具就用什么,不管该不该用。有了 Thought,就像先看了设计图再动手——知道这颗钉子该敲在哪。
2. 行动为推理补信息
没有 Action 的 Thought 是空想。
模型再怎么推理,也推不出订单 88231 是 6 月 22 日签收的——这是存在订单系统里的真实数据,不是从已有信息能推导出来的。Action 的价值在于:它把真实世界的数据带回来,让推理建立在事实而不是幻觉之上。
还是那个比方:纯思维链像一个闭门造车的人——脑子转得飞快,但手头的信息全是自己编的。有了 Action,就像打开了窗户去看了一眼真实情况,推理才有了坚实的地基。
3. 交替形成正反馈
ReAct 最精妙的地方不是推理强,也不是行动强,而是两者交替运转形成了一个正反馈循环:
推理指出需要什么信息 → 行动去获取这个信息 → 获取的信息让推理更准确 → 更准确的推理指出下一步该做什么 → ...
每转一圈,大脑掌握的信息就多一点,判断就准一点,离最终目标就近一步。这就是为什么 ReAct 能处理多步骤、带条件判断的复杂任务——它不需要一上来就知道所有答案,而是一步步把答案拼出来。
下面这张图把这个正反馈画出来:
