Skip to content

高频面试题

ReAct 推理范式是什么?它如何让 Agent 更可靠地完成任务?

这道题的题眼在“更可靠”三个字:ReAct 不是一种花哨输出格式,而是一套把推理、行动、观察接成闭环的错误控制机制。

适合阶段:Agent 工程 / 核心理论面核心能力:ReAct · Reasoning + Acting · Closed-loop Feedback · Traceability

面试官角度分析,想考什么

  • ReAct 是什么?和 CoT、Function Calling 差在哪?
    考你能否说清“推理和行动交替”,而不是只推理或只选一次工具。

  • 它为什么能让 Agent 更可靠?
    考机制:显式推理、环境接地、闭环纠错、轨迹可审计。

  • 失败模式和适用边界是什么?
    考工程取舍:循环、短视、观察误读;长任务可能更适合 Plan-and-Execute;现代 function calling + loop 本质仍是 ReAct。

可直接抄走的 30 秒参考答案

text
ReAct 是一种让模型交替推理和行动的范式:每一步先用 Thought 说明现在缺什么、准备做什么,再用 Action 调工具,拿到 Observation 后进入下一轮。它更可靠主要靠三点:行动前先想清楚目的;事实来自工具观察,不全靠模型记忆;工具失败或结果不对时,可以在下一轮修正。同时每一步都有轨迹,失败时能定位到是想错了、调错了,还是看错了结果。当然 ReAct 也会带来循环和成本问题,生产里要配重复检测、最大步数、证据槽位和停止条件。

面试回答详解,知其所以然

这道题的核心不是复述 Thought/Action/Observation 格式,而是解释清楚“为什么这个循环能降低错误率”。可靠性来自机制,不来自格式。

1. ReAct 是什么

ReAct 出自 2022 年论文 Synergizing Reasoning and Acting in Language Models,核心做法是让大模型交错生成两类内容:

  • Reasoning(Thought):对当前状态的分析、下一步意图和理由。
  • Acting(Action):调用外部工具获取观察(Observation)或改变环境。

经典轨迹:

text
Question: 企业版 SLA 是多少?达不到怎么赔付?
Thought 1: 需要先查企业版 SLA 数字。
Action 1: search_docs["enterprise SLA"]
Observation 1: Enterprise plan monthly uptime commitment is 99.95%.
Thought 2: SLA 数字有了,还缺赔付规则。
Action 2: search_docs["service credits"]
Observation 2: below SLA customers receive service credits...
Thought 3: 两个问题都有证据了,可以回答。
Final: 企业版 SLA 为 99.95%,未达标按服务积分赔付(引用两条证据)。

它和两个近邻概念的关键区别:

  • 与 Chain-of-Thought(CoT)不同:CoT 只在模型内部推理,结论无法被外部事实校正;ReAct 的每步推理都会被工具观察检验。
  • 与单次 function calling 不同:function calling 通常一次选工具就结束;ReAct 是多轮循环,看到观察结果后再决定下一步。

2. 为什么更可靠:四个机制

机制一:显式推理约束动作选择。 Thought 迫使模型在行动前明确"我现在缺什么信息、为什么调这个工具"。这一步把隐式的决策过程显式化,减少随手乱调工具、参数凭感觉填的问题。没有 Thought 的纯行动 Agent 容易出现"调了工具但说不清为什么"的漂移。

机制二:环境反馈接地,压制幻觉。 模型最不可靠的时刻是"凭参数记忆回答事实问题"。ReAct 把事实来源换成 Observation:答案必须来自工具返回的证据,而不是模型权重里的模糊印象。论文实验里,ReAct 在 HotpotQA 等知识密集任务上比闭卷 CoT 生成更忠实的推理链,幻觉明显更少。

机制三:闭环纠错,错误不过夜。 开环系统(一次生成、直接交付)的错误没有修正机会。ReAct 每步都是"假设 -> 验证":搜索没结果、工具报错、数据和预期不符,都会作为 Observation 回到循环里,下一步换 query、换工具或向用户澄清。错误在单步内暴露和消化,而不是累积到最后。

机制四:轨迹可审计,失败可定位。 每一步的 Thought、Action、Observation 都在 trace 里。出问题时能定位到底是动作选错、参数写错、观察无关还是过早收尾,评估和改进都有抓手。这直接对应生产里的可观测性要求。

3. 三种范式对比

  • CoT(只推理):推理连贯但闭卷,无法验证事实,知识不足时容易自信地编造。
  • Act-only(只行动):能拿到环境事实,但没有显式推理引导,动作选择随意,多步后容易失去目标。
  • ReAct(推理 + 行动):推理决定动作,观察修正推理,两个短板互补,这就是 Synergizing 的含义。
  • Plan-and-Execute(先规划):长任务更可控省 token,但计划可能过时,缺少 ReAct 每步应变的弹性。

论文里还有个容易被追问的细节:在部分纯推理基准上,ReAct 的 pass@1 不一定高于 CoT,因为工具结果会引入噪声和中断;但 CoT 和 ReAct 结合(用 CoT 提示 ReAct,或对两者结果做多数投票)通常最好。这说明 ReAct 的优势是"接地和忠实",不是"全方位碾压推理"。

4. 可靠性不是免费的:失败模式与护栏

ReAct 自身会失败,生产里必须加工程护栏:

  • 死循环:同一 query 反复调用。护栏:动作签名重复检测、max steps、预算上限。
  • 思考幻觉:Thought 编造观察里没有的结论。护栏:最终答案必须绑定 evidence id,无法引用则拒答或追问。
  • 观察误读:工具返回无关结果仍当证据用。护栏:观察带相关性分数,低分触发换 query。
  • 过早收尾:证据不齐就 Final。护栏:把问题拆成必填证据槽位(required evidence slots),槽位不满足不允许结束。
  • 短视与成本:每步都重新思考,长任务 token 成本高且容易漂移。护栏:外层换 Plan-and-Execute,局部节点保留 ReAct。

记住一个原则:模型负责提出下一步,代码负责校验、拦截和兜底。停止条件必须写在循环外层,不能指望模型每次都自觉。

5. ReAct 在现代 Agent 中的位置

今天的生产 Agent 表面上不叫 ReAct,但骨架就是它:

  • 结构化 function calling 代替了文本解析的 Action。
  • Agent Loop(感知 -> 决策 -> 执行 -> 观察更新)是 ReAct 循环的状态机化。
  • Claude、OpenAI 等模型的"思考再调工具"行为,Thought/Action 交替的工业化版本,只是推理内容不一定逐字暴露。

面试里可以主动说:ReAct 是理解所有工具型 Agent 的最小模型,其他模式都是对它的分层扩展——Plan-and-Execute 加规划层,Reflexion 加跨轮反思层,多 Agent 加协作层。

面试官追问3个问题

追问一:ReAct 和 CoT 各自适合什么场景?为什么论文里两者结合最好?

  • 考察点:是否理解两种范式的能力边界,而不是站队。
  • 回答方向:CoT 适合模型已有足够知识、主要靠推理链就能解决的问题;ReAct 适合需要外部事实或环境交互的任务。结合好的原因是互补:CoT 提供推理深度,ReAct 提供事实接地,投票或提示融合能同时压低幻觉和推理错误。

追问二:Thought 应该暴露给用户吗?

  • 考察点:是否了解 chain-of-thought 的产品化和安全边界。
  • 回答方向:不建议逐字暴露完整内部推理,可能包含不稳猜测、敏感信息或提示词细节。用户可见的是结论、引用和简短理由;系统侧保存结构化 trace(步骤、动作、参数、观察 id)供调试和审计。

追问三:ReAct Agent 打转怎么发现和阻止?

  • 考察点:工程护栏意识。
  • 回答方向:对动作做规范化签名(工具名 + 排序后参数),同一签名超过阈值判定卡死;配合 max steps、token 预算、超时。触发后不是直接杀掉,而是注入提示让模型换策略、改写 query 或升级给用户。停止条件由外层代码执行,不依赖模型自觉。

扩展知识

论文实验的核心结论

ReAct 论文在四类任务上做了验证:知识问答(HotpotQA、Fever)、模拟决策(ALFWorld)、网页任务(WebShop)。几个值得记住的结论:

  • ReAct 生成的推理链比 CoT 更可解释、幻觉更少,因为论断有观察支撑。
  • 在知识密集任务上,ReAct 单独使用时有时不如 CoT-SC(自一致性投票),因为工具检索会引入噪声;两者结合(用 ReAct 提示或合并投票)通常取得最好结果。
  • 在需要与环境交互的任务(ALFWorld、WebShop)上,ReAct 明显优于纯推理基线,因为这类任务没有观察就没法做对。

从 ReAct 到现代 Agent Loop

text
ReAct 文本格式 -> 结构化 function calling -> Agent Loop 状态机
     -> 外层规划/ 反思 / 多 Agent 编排

演化中每个环节解决的问题:结构化输出解决文本解析脆弱;Agent Loop 解决状态管理和停止条件;规划层解决长任务短视;反思层解决跨轮次经验回写。ReAct 没有被淘汰,而是被分层吸收了。

和 Reflexion、Self-Correction 的分工

  • ReAct:episode 内的实时纠错,观察反馈在当前任务里消化。
  • Reflexion:episode 间的反思,把失败原因写成语言反馈,指导下一次尝试。
  • Self-Correction:更广义的检测与回滚机制,可以用在 ReAct 循环内部。

面试里能说清"实时闭环"和"跨轮反思"的层次差异,是加分点。

基于 MIT 协议开源