真实面经题目 · 原创解析

ReAct 的思考-行动-观察循环如何驱动 Agent 工具调用,和普通 CoT 有什么区别?

这题考的是候选人是否理解 ReAct 把模型推理和外部行动交织起来:模型不是一次性输出答案,而是在思考、选择工具、观察结果、继续推理的闭环中逐步完成任务;它和普通 CoT 的关键区别是能通过工具调用改变外部状态并用真实观察修正推理。

出现于:腾讯 · 后端开发

60 秒回答模板

ReAct 可以理解为 Reasoning and Acting 的 Agent 控制范式。普通 CoT 更像让模型在内部写出一段推理过程,然后直接给答案;ReAct 则把任务拆成多轮“思考、行动、观察”的循环:模型先根据用户目标和当前上下文判断下一步要做什么,输出一个工具调用或动作;运行时执行这个工具,比如搜索、查数据库、调用业务 API、读文件或提交表单;工具返回观察结果后,模型再基于真实结果继续推理,决定下一步调用哪个工具,直到满足停止条件并生成最终答案。工程上 ReAct 的价值是让 Agent 能处理需要外部信息、状态变化和多步决策的任务,而不只靠模型记忆。和普通 CoT 相比,它更强调可执行动作、工具 schema、观察反馈、错误恢复和循环控制。落地时要设计工具白名单、参数校验、权限边界、最大步数、超时、幂等、审计日志和人工确认,防止模型陷入循环、误用工具或执行危险操作。

考点 循环结构是核心
难度 真实面经题
回答目标 让候选人能清楚解释 ReAct 的思考、行动、观察闭环,区分它和普通 CoT,说明工具调用运行时如何落地,并覆盖可靠性、安全和评估要点。

深入解析

01

ReAct 是推理加行动

ReAct 的核心不是让模型多想几句,而是让推理结果可以转化为外部动作。模型根据当前任务形成下一步计划,选择一个工具并给出参数,系统执行后把观察结果放回上下文,模型再继续决策。这使 Agent 能利用实时数据和业务系统。

02

循环由三类状态驱动

思考阶段判断目标、缺口和下一步;行动阶段调用工具或执行命令;观察阶段接收工具结果、错误、空结果或权限反馈。下一轮不是从原问题重新开始,而是把观察作为新证据,修正之前的假设和计划。

03

工具调用需要结构化接口

工程系统不会让模型随便输出自然语言动作,而是提供函数名、参数 schema、描述、权限和返回格式。模型选择工具时必须生成可校验的结构化参数,运行时负责验证、执行、捕获异常并把结果摘要回传给模型。

04

和普通 CoT 的本质差异

普通 CoT 主要是内部推理增强,无法主动获得新事实,也不能改变外部系统状态。ReAct 则允许模型边推理边查证、边执行边修正,所以适合信息不完整、需要查库、调用服务、操作系统或多步工作流的问题。

05

观察结果约束下一步

工具返回的数据可能证明上一轮假设错误,也可能暴露参数不完整、资源不存在、权限不足或外部服务失败。好的 ReAct Agent 会根据观察结果选择重试、换工具、缩小查询、请求确认或停止,而不是机械继续调用同一个工具。

06

停止条件必须明确

ReAct 循环如果没有边界,容易陷入反复搜索、反复调用或无意义修正。系统应设置最大步数、最大工具调用次数、总超时、成本预算、完成判定和失败出口。当已经有足够证据回答时,要停止工具调用并输出最终结果。

07

可靠性依赖运行时护栏

真实业务 Agent 需要工具权限控制、参数校验、幂等键、危险操作二次确认、敏感数据脱敏、审计日志和沙箱隔离。模型负责决策,但运行时负责执行边界,不能把安全性完全交给提示词。

08

评估要覆盖过程质量

评估 ReAct 不能只看最终答案,还要看是否选对工具、参数是否正确、调用次数是否合理、是否能从错误中恢复、是否遵守权限和是否按时停止。过程日志是调试和改进 Agent 的核心资产。

易错点

  • 把 ReAct 说成普通 CoT 的另一个名字,忽略行动和观察。
  • 只描述提示词格式,不讲工具 schema、运行时执行和结果回传。
  • 让模型自然语言描述要调用什么工具,却没有结构化参数校验。
  • 没有最大步数、超时和成本预算,导致 Agent 可能无限循环。
  • 把工具安全完全交给模型自觉,不做权限、确认、审计和幂等。
  • 工具失败后只会重复调用同一个参数,不根据观察结果修正策略。
  • 把内部推理原样展示给用户,混淆过程日志和最终答案。
  • 只看最终答案正确,不评估工具选择、调用效率和错误恢复能力。

面试官追问

ReAct 和 function calling 是什么关系?

Function calling 是模型输出结构化工具调用的一种接口能力,ReAct 是更高层的控制模式。ReAct 可以用 function calling 来实现行动阶段,但还需要观察回传、循环控制、停止条件和错误恢复。

ReAct 里的 thought 应该暴露给用户吗?

一般不需要暴露完整内部推理。产品上可以展示简洁的进度、调用了什么工具、查到了什么结果和最终依据,但不应把冗长的内部思考直接作为用户内容。

工具调用失败时 Agent 应该怎么处理?

先区分参数错误、空结果、权限不足、超时和服务异常。参数错误可以修正后重试,空结果可以换查询方式,权限不足应停止或请求授权,服务异常要有限次退避重试,超过预算后给出明确失败原因。

如何避免 Agent 乱调危险工具?

工具要分权限等级,危险操作默认需要用户确认或审批;参数要做白名单和业务校验;执行要有幂等和回滚设计;审计日志要记录谁发起、模型选择了什么、参数是什么、结果是什么。

ReAct 适合哪些后端场景?

适合需要多步查证和操作的场景,比如运维诊断、客服工单处理、数据查询、代码库分析、知识库问答和内部流程自动化。不适合简单固定规则接口,因为那类问题用普通服务编排更稳定、更便宜。