


明天就是五一了,祝大家劳动节快乐,最近一直出差忙项目,很多文章没时间整理,今天聊聊ReactAgent。过去一年,几乎所有做 AI 应用的团队都在谈 Agent。但一个很现实的问题是,很多系统虽然已经接上了工具调用,却依然停留在“会说很多合理的话”,而不是真正具备持续决策和行动能力。 如果要理解 Agent 为什么会成为一个独立的系统范式,那么 ReAct 是绕不过去的一环。
很多团队都在做 Agent,但并不是每个“会调工具的大模型”都能称为真正的 Agent。
ReAct Agent 之所以重要,不是因为它是一个热门术语,而是因为它第一次让大模型从“生成答案”走向“主动行动”。它不再只依赖参数记忆回答问题,而是在不确定环境中不断取证、修正和推进。ReAct Agent 的关键,不在于它会不会调用工具,而在于它是否具备“推理、行动、观察、再推理”的闭环决策能力。
如果你是技术管理者、架构师或中高级工程师,这篇文章会帮你看清 ReAct 的真正价值,以及它为什么会决定下一代 Agent 系统的工程形态。从现实案例、系统结构、工程实现和治理要求四个层面,深度拆解 ReAct Agent 为什么正在成为 Agent 系统的主流骨架。
01、ReAct Agent 正在成为 Agent 系统的主流骨架
过去一年里,Agent 几乎成了 AI 应用领域最热的词之一。
但有一个现象很有意思:很多团队一边在做 Agent,一边又在用一种非常模糊的方式理解 Agent。有人把“能调工具的大模型”叫 Agent,有人把“会自动执行流程”的应用叫 Agent,也有人把“套了一个 LangChain 外壳的问答系统”叫 Agent。
如果一定要在这些概念里找一个真正有代表性的技术结构,那么 ReAct Agent 几乎绕不过去。因为它第一次把大模型从“回答问题的系统”推进成了“能够在不确定环境中持续决策的系统”。
这两者的差别,不是会不会调用 API,也不是能不能读文件,而是系统的行为逻辑发生了根本变化。
传统问答系统更像一次性输出答案。
ReAct Agent 更像一个会办事的执行体:首先再进行提问时它不会急着回答,它会先判断你提供的信息够不够,在必要时主动去拿证据并根据新证据修正自己的下一步动作。它最终输出的,不只是语言结果,而是一个经过推理、行动、观察之后形成的准确结论。
这才是 ReAct 真正重要的地方。

02、ReatAgent现实世界的类比
假设你是一家公司的技术负责人,晚上 11 点收到报警:“核心支付链路成功率从 99.95% 掉到 92.4%,请立即排查原因。”
这时有两种“智能系统”。第一种系统:像一个会说很多话的顾问
它会很快告诉你:
它会这样行动:
UPSTREAM_TIMEOUT这个过程里,最有价值的不是“它答对了”,而是它的工作方式。它不是一开始就试图生成一个完整答案,而是不断交替执行三件事:
这就是 ReAct Agent 的核心精神。
03、ReAct 到底是什么
ReAct 这个词通常被解释成 Reason + Act。
但如果只把它理解成“推理 + 行动”,其实还不够完整。因为在工程实践里,真正形成闭环的是三段结构:Reason -> Act -> Observe
更准确地说,ReAct Agent 是一种把大模型置于循环决策结构中的执行范式。
它的基本流程是:接收用户目标并基于当前上下文进行推理,判断是否需要借助外部工具并执行工具动作,读取工具结果把结果作为新的上下文再次推理重复这个过程,直到形成足够可靠的最终答案。
所以 ReAct 的本质不是“调用工具”,而是:
让模型在不完整信息下,能够通过行动去获取信息,再用新信息继续决策。这是一个非常关键的结构转变。因为真实世界里绝大多数重要任务都不是闭卷问答。
04、为什么 ReAct 比“普通大模型 + 工具调用”更重要
很多系统已经支持 Function Calling 或 Tool Calling,于是有人会问:“既然模型本来就能调工具,那 ReAct 不就是工具调用换了个名字吗?”
还真不是。
工具调用只是一种能力。ReAct 是一种组织能力的方式。
两者的差异有点像:
工具调用:你给了一个人扳手
ReAct:你给了这个人一套排故方法论
只有扳手,没有方法论,系统还是可能乱用工具、误用工具、盲目用工具。而 ReAct 的价值在于,它把工具调用嵌入了一个连续决策循环里。也就是说,工具不是为了“展示模型能做什么”,而是服务于当前推理中的不确定性消解。
模型不是为了调工具而调工具,而是在问自己两个问题:我现在知道得够不够?如果不够,下一步最值得做的动作是什么? 这两个问题,才是 ReAct 的灵魂。
05、ReAct 的内部结构
如果从架构视角拆开来看,一个成熟的 ReAct Agent 往往不是一个“大 Prompt”,而是一个由多个职责模块组成的状态循环系统。

1. Goal 层:目标输入
这层接收用户意图,比如:帮我排查线上故障;帮我分析这家公司近三个月舆情;帮我在代码仓库里定位性能瓶颈。这一层看起来简单,但它决定了后续推理边界和任务约束。
2. Reasoning 层:推理节点
这是 ReAct 的决策中枢。
它要回答的不是“最终答案是什么”,而是当前信息够不够?是否需要工具?如果需要应该调用哪个工具?当前最有价值的下一步动作是什么?
注意,这一层最关键的产出并不总是自然语言答案,很多时候是一个结构化决策:need_tool = true;tool_name = search_logs;tool_args = {...}有时候可能还会是python或js脚本。
3. Action 层:动作执行器
这里是真正的外部能力执行层,负责工具注册、参数校验、权限控制、超时控制、重试机制、执行审计等功能。
从工程角度看,Action 层并不“聪明”,但极其重要。因为一旦这个层不稳定,整个 Agent 系统就会表现得像一个很会说话但不会办事的人。
4. Observation 层:观察加工器
工具返回的原始结果通常很粗糙,例如日志太长、搜索结果太噪、API字段太多、文件内容太碎等。Observation 层的作用,是把“工具输出”整理成“可供下一轮推理消费的观察结果”。
换句话说,它是把外部世界翻译回模型世界。
5. State 层:状态管理
成熟的 ReAct Agent 一定有状态,不然它只是“多轮聊天”。
典型状态包括:当前轮次最大迭代次数、已调用过哪些工具、已获得哪些观察结果、当前阶段、当前错误数、中间答案草稿、是否需要摘要压缩、是否等待人工审批等。
状态管理决定了这个系统是一个“流程中的实体”,而不只是一次次无关联的模型调用。
6. Termination 层:停止条件
ReAct 如果没有清晰停止条件,很容易陷入两个极端:过早停止,答案不可靠;过度循环,成本和延迟失控。
所以它通常需要明确的终止逻辑,比如:已拿到足够证据、已生成最终答案、达到最大轮次、工具连续失败过多、用户主动中断等。
这层经常被忽略,但实际上它直接决定系统的线上可用性。
06、模型标准答案判断原理
系统凭什么认为“现在这个答案已经够好了,够对了,够符合用户意图了”?这件事本质上不能靠一个绝对真值判断,因为大模型通常拿不到“标准答案”。
所以在 Agent 里,最终答案是否满足本质上不是“真正确认”,而是基于目标、证据、约束和停止策略做出的收敛判断。模型并不是“知道答案一定正确了”才停止。
它通常是判断:
所以,Agent 的停止更像:
“我现在已经有足够高的把握,可以交付一个对当前任务来说合格的答案。”不是数学证明式的“绝对正确”,而是任务工程里的“足够完成”。
最终答案“满足用户”这件事,实际上有 3 层:
1. 语义满足
也就是有没有回答用户真正的问题。
比如用户问:
“帮我判断是不是数据库导致的”
“帮我给出是否值得上线的建议”
“帮我定位最可能的瓶颈”
那一个合格答案不能只是堆事实,而要真的回应这个请求。也就是说系统要判断:有没有答到用户关心的那个决策点、有没有跑题、有没有把“分析材料”变成“用户要的输出”。
2. 证据满足
也就是结论有没有足够依据。
证据是否充分这个判断,本质上属于 Observation 之后、重新进入 Reasoning 之前的决策关口。
你可以把它理解成 ReAct 闭环里的一个“收口判断器”:如果证据还不够系统就不能结束,而是要继续回到 Reasoning,决定下一步还要查什么、做什么、验证什么。如果证据已经够了系统就可以停止继续调工具,进入 Final Answer,输出结论。
它在整个流程里的位置
一条典型链路是:
用户问题 -> Reasoning -> Action -> Observation -> 证据是否充分? -> Final Answer / 再次 Reasoning
所以它不是最开始的环节,也不是单独的工具层,而是观察结果出来之后的阶段性判断。
它起到的作用有 4 个:
1、决定要不要继续循环。这是它最直接的作用。 ReAct不是无限转圈的,必须有一个地方判断:“现在够不够回答了?”
2、防止过早下结论。如果没有这个判断,系统可能拿到一点信息就急着回答,结论会很飘。有了它,系统会先问自己:这个观察结果能不能真正支撑结论?
3、防止无休止查证。反过来,如果没有这个判断,系统也可能一直搜、一直查、一直补证据,成本失控。所以它也负责“该停的时候停”。
4、把 Agent 从工具调用器变成证据驱动系统。工具调用本身不高级,关键在于系统能不能判断:“我现在手里的证据,是否足以支撑一个可靠输出?” 这一步让整个系统从“会调工具”升级成“会基于证据收敛”。
再用一个现实例子说透
比如用户问:
“帮我判断最近支付成功率下降,是不是数据库导致的?”
系统可能这样走:Reasoning 先判断:不能直接回答,要先看关键指标。Action 查错误码分布、数据库 RT、下游超时情况。
Observation 发现:数据库 RT 正常下游支付网关超时飙升错误码集中在 UPSTREAM_TIMEOUT
证据是否充分? 这时系统要判断:这些证据够不够说明“不是数据库主因”?还要不要继续查线程池、连接池、重试策略?
如果系统判断:“已经足够回答主问题了” 就进入 Final Answer。
如果系统判断:“还不能完全排除本地放大效应” 就继续回到 Reasoning,再查本地重试或线程池。
所以这一步本质上是在回答:
“我现在是该继续查,还是已经可以负责任地下结论了?”
从工程实现上,它通常依赖哪些信息来判断
常见依据有:当前观察结果是否直接命中问题核心、是否已经拿到关键证据、是否仍存在高不确定性、是否出现互相矛盾的证据、当前轮次是否接近上限、用户问题要求的是“初步判断”还是“高置信结论”。
所以它不是一个简单的布尔值,而是一个带策略的判断节点。
3. 任务满足
也就是输出是否达到了当前任务定义的完成标准。比如同样是“分析支付成功率下降”:
如果用户只要初步判断,那给出高概率原因 + 不确定点,可能就够了。
如果用户要事故复盘,那还得包含证据链、影响范围、下一步建议。
如果用户要提交给管理层,那还要更结构化、更稳健。
所以“满足”不是固定的,它依赖任务标准。
后面这里我会单独出一篇文章详细讨论。
关注公众号【阳光宅猿】回复【AIGC】领取最新AI人工智能学习资料,包含RAG、Agent、深度学习、模型微调等多种最新技术文档等你来选!!
关注公众号【阳光宅猿】回复【加群】进入大模型技术交流群一起学习成长!!!
07、从系统设计看,ReAct 解决了哪几个根问题
1. 它解决了“模型只能闭门造车”的问题
单轮问答模型最大的限制在于:它只能基于参数记忆和已有上下文回答问题。但很多任务的答案不在模型里,而在外部环境里,比如在数据库里、在日志里、在搜索结果里、在代码仓库里、在 API 响应里、在企业知识库里。
ReAct 的价值,就是让模型承认自己不知道,然后主动去外部环境取证。这一步,直接把模型从“知识生成器”推向了“环境交互决策器”。
2. 它降低了幻觉的概率
模型最容易幻觉的时候,是它不得不在信息不足的情况下硬补答案。ReAct 给了模型一个更健康的默认动作:不是猜,而是查。
当然,这并不意味着 ReAct 没有幻觉。它仍然可能误判、误调工具、误解释结果。
但它至少让系统有机会把“凭空编造”替换成“证据驱动的迭代推理”。从工程风险角度看,这已经是非常重要的改善。
3. 它把复杂任务拆成了可控的局部决策
面对复杂任务时,系统一次性规划全局常常会出问题:计划太理想化、细节假设不成立、中途环境变化、早期错误会一路传染到后续步骤。
ReAct 的优势在于它不强求一开始就全知全能。
它允许系统以小步迭代方式推进,每次只做一个局部最优决策,然后根据反馈修正路线。这让系统的鲁棒性往往好于“一次性规划到底”的静态方案。
4. 它让执行过程具备可解释性
一个只输出最终答案的模型,本质上是黑盒。
而 ReAct 至少天然具备过程结构:为什么先查这个?为什么调用了这个工具?工具返回了什么?为什么下一步转向另一个动作等
这对于管理者、架构师、安全审计和线上问题追溯都非常关键。在企业级系统里,“能解释自己怎么得出结论”往往和“能不能答对”一样重要。
08、ReAct Agent 的局限
讲 ReAct 时,如果只讲它有多强,文章就不够成熟。真正做系统的人,应该更关心它的边界。
1. 它擅长局部决策,不天然擅长全局规划
ReAct 的优势是动态推进,但劣势也恰恰来自这里。因为它每次只决定下一步,所以它可能在局部上很聪明,但在全局上不够经济。
比如一个复杂研究任务,ReAct 可能会不断搜索、不断读取、不断补证据,但没有先建立总体研究框架。这会导致:任务路径绕远信息收集过量token 消耗过大局部动作看似合理,整体效率却不高
这也是为什么很多成熟系统会把 ReAct 和 Plan-Execute 分开设计。
2. 它容易出现循环失控
如果状态控制和停止条件设计不好,ReAct 很容易反复在相似问题上打转:重复搜索、重复问同类问题、对同一条证据多次确认、在“还要不要继续查”这件事上迟疑不决。
从系统成本看,这是非常危险的。因为它不是“答错一次”,而是“每一轮都继续烧资源”。
3. 它的上限高度依赖工具系统
ReAct 再强,也不能凭空获得证据。如果工具系统有问题,Agent 上限就会非常低:搜索结果差、数据库接口慢、日志检索不精准、权限隔离不清、文件读取不可控。
所以很多团队最后会发现,自己做的不是 Agent,而是在重做一套“可被 Agent 使用的操作系统接口层”。这个判断并不夸张。
4. 它对观测、治理和安全提出更高要求
一旦系统能行动,就意味着它能产生后果。
于是你不得不考虑:哪些工具允许自动执行?哪些动作必须人工审批?如何记录每一步调用链?如何回放执行过程?如何做失败恢复?如何限制高风险工具的权限边界?
这也是为什么真正的 Agent 工程,核心难点常常不在模型,而在治理。
09、哪些技术可以实现 ReAct Agent
如果把 ReAct 看成一种结构,而不是某个框架的专有名词,那么能实现它的技术路线其实很多。
1. 最底层方式:手写循环
这是最原始也最灵活的实现方法。你可以用任意后端语言自己实现一个循环:调用模型、判断模型是否要求工具调用、解析工具参数、执行工具、把结果回填消息上下文、再次调用模型、直到结束
常见语言包括:Python、Java、TypeScript、Go
这种方式的优点是控制力极强,缺点是所有状态管理、错误处理、可观测性都要自己补。
2. 基于 Tool Calling / Function Calling 能力
大模型原生的工具调用能力是 ReAct 最重要的基础设施之一。
常见提供方式包括:OpenAI Tool Calling / Function Calling、Anthropic Tools、Gemini Function Calling、Qwen、DeepSeek 等兼容 OpenAI 风格协议的能力。
这些能力负责解决“模型如何表达它想调用哪个工具、需要什么参数”。但只靠 Tool Calling 仍然不够,因为它只是动作触发机制,不是完整的 Agent 运行机制。
3. 基于 Agent 框架
这是目前很多团队最常见的实现方式。
典型框架有:LangChain、LangGraph、LlamaIndex、Semantic Kernel、Spring AI、Spring AI Alibaba Graph、AutoGen、Haystack Agents
其中比较值得注意的是图式编排框架,比如 LangGraph 或基于 StateGraph 的实现。
因为 ReAct 天然适合被建模成一张图:推理节点、工具执行节点、观察节点、摘要节点、终止节点(正常终止和超限/兜底终止)。
一旦进入图式建模,系统会变得更容易控制,也更容易插入日志、审批、回放和容错逻辑。
4. 基于工作流 / 状态机 / 图引擎
从工程成熟度看,我其实更推荐把 ReAct 看成“状态图上的智能节点系统”,而不是“Prompt 驱动的技巧”。
因为当系统进入生产环境后,你迟早会遇到这些问题:要不要支持中断恢复?要不要支持人工批准后继续执行?要不要持久化中间状态?要不要为不同 Agent 配不同图?要不要记录每个节点的耗时和 token 消耗?
一旦这些问题出现,图引擎和状态机的价值会快速上升。
10、真正的 ReAct 系统通常长什么样
一个能上线的 ReAct Agent,通常不只是“模型 + 工具”。它背后往往还需要一整套配套系统:
1. Tool Registry
统一注册工具,向模型暴露受控的能力集合。
2. Tool Guard / Permission Layer
决定哪些工具可自动执行,哪些必须审批,哪些完全禁止。
3. Streaming Layer
把执行过程流式返回给前端,让用户知道系统正在做什么。
4. Memory / State Persistence
保存上下文、阶段状态、中间结果,支持长任务和恢复执行。
5. Retry / Timeout / Circuit Breaker
处理工具失败、慢调用和异常依赖,避免 Agent 因一个外部系统抖动就彻底失控。
6. Trace / Audit / Usage Metrics
记录:每一轮推理每一次工具调用每一个状态跳转token 消耗最终结论形成过程
7. Human in the Loop
对于写文件、执行命令、修改数据、调用高风险外部系统等动作,允许人工审批再继续。
说得直白一点:
一个成熟的 ReAct Agent,本质上是“大模型决策中枢 + 受控执行系统 + 可观测治理系统”的组合体。
11、从“Prompt 驱动”走向“Graph 驱动
这是一个很值得讲透的趋势。
在 Agent 的早期阶段,很多团队喜欢用 Prompt 把一切塞进去:你应该先分析、如果需要就调用工具、调完工具再总结、不要无限循环、达到条件就停止。
这种方式在 Demo 阶段没问题,但一旦系统复杂起来,问题就会暴露:控制逻辑全在 Prompt 里,难调试状态不清晰,难恢复失败路径混乱,难治理很多规则只能“希望模型遵守”。
而图驱动方式的核心优势在于:节点职责明确、跳转条件明确、状态键明确、生命周期明确、异常处理位置明确。
也就是说,它把“希望模型自己懂流程”改成了“系统显式定义流程,模型只负责其中的智能判断”。
这是 Agent 系统从玩具走向工程化的关键一步。
12、最后回到本质:ReAct 为什么重要
ReAct 重要,不是因为它听起来新,也不是因为它和某个框架绑定。它重要,是因为它重新定义了大模型系统与世界的关系。过去的大模型系统,本质上是在“生成答案”。
而 ReAct Agent 开始让系统进入另一种状态:承认自身信息不完备、主动采取行动获取证据、基于新证据持续修正判断、在循环中逼近更可靠的结论。
这意味着 AI 系统第一次不只是“会说”,而是开始“会办事”。从技术史角度看,这不是一个小修小补的变化,而是一种系统范式的迁移。
也正因如此,未来真正有竞争力的 Agent 平台,比拼的很可能不再只是模型参数,而是:谁的状态机更稳?谁的工具系统更强?谁的治理能力更完整?谁能把智能判断和工程控制结合得更好?
说到底,ReAct Agent 不是一个花哨概念。
它是一套让智能系统从“回答者”进化为“行动者”的基础结构。
而这,才是 Agent 时代真正值得长期投入的地方。