ReAct 架构原理与失败场景
Agent 中推理与行动循环的工作流程与优势解析
原题:请详细解释ReAct(Reasoning and Acting)架构在智能体(Agent)中的设计思想、工作流程及其在大模型任务执行中的优势。
Prompt工程 · 字节真题
回答与解析
核心思想
ReAct 将推理决策与外部行动交替进行:模型根据当前状态选择下一步 Action,环境返回 Observation,新的观察再进入下一轮决策。工程实现可以记录简洁的计划或决策摘要,但不需要向用户暴露隐藏 Chain-of-Thought。
工作流程
- 解析任务和当前状态,生成下一步可执行计划。
- 从允许的工具集合中选择 Action,并输出满足 Schema 的参数。
- 执行工具,得到带来源、状态码和错误信息的 Observation。
- 根据观察更新状态,判断完成、继续、重试、换工具、请求确认或安全终止。
- 达到完成条件后,根据可验证的观察生成最终回答。
生产实现必须设置最大步数、时间和成本预算,检测重复状态,并对有副作用的工具增加权限、幂等和人工确认。
与其他范式的区别
- 单纯 CoT 只在模型内部生成推理文本,不会自动获得实时环境反馈。
- 单次 Tool Use 可以完成确定性调用,但不一定包含多步状态更新。
- ReAct 的价值在于让工具观察参与下一步决策,而不是把“Thought 文本可见”当作可解释性的保证。
优势与边界
ReAct 适合多步检索、数据查询和工具编排,并能在工具失败后调整计划;但它也会增加延迟、成本、循环和提示注入风险。是否提高任务完成率或降低幻觉必须在目标任务上与单次调用、固定工作流等基线对照评测,不能宣称必然显著更好。
结论:ReAct 是“决策—行动—观察”的有界反馈循环,可靠性来自真实工具结果、状态控制和安全边界。
口语版讲法(约2分钟)
- ReAct核心是边想边做,形成循环
- 工作流程:Thought-Action-Observation循环
- 优势:幻觉抑制和可解释性
- 适合多步工具调用场景
ReAct 的核心是让“当前决策、外部行动、环境观察”形成循环。模型根据当前状态选择下一步工具或结束,工具返回带状态码和来源的 observation,新的观察再进入下一轮决策。生产系统可以记录简洁的计划摘要,但不需要展示或持久化隐藏 Chain-of-Thought。
它和单次 Tool Use 的区别,是后续动作会根据前一步真实结果动态调整;和只生成推理文本的方式相比,ReAct 能把搜索、数据库和计算器等外部信息纳入状态。价值来自可验证观察,不是来自把 Thought 文本展示给用户。
例如比较两地天气,系统先调用第一座城市的天气工具,保存结构化结果,再查询第二座城市,最后依据温度、降雨和风力生成建议。若工具返回空结果、参数错误或权限拒绝,状态机会选择重试、换工具、请求澄清或安全终止。
上线时必须设置最大步数、时间和成本预算,检测重复状态,并对工具做白名单、Schema 校验、权限、幂等和副作用确认。observation 还要限制长度、隔离提示注入并保留来源。
另一个常见风险是把不可信的工具返回直接拼进下一轮提示,导致提示注入或状态污染。我会把工具结果解析成受限字段,丢弃未知指令,并用包含正常、超时、重复调用和恶意返回的回放集验证终止率、任务成功率与错误副作用。
ReAct 不保证天然减少幻觉或提升成功率,应和单次调用、固定工作流等基线比较任务完成率、错误副作用、工具成功率、循环率、延迟和成本。停止条件、失败处理和可观测状态比让模型多走几步更重要。
关键一句:ReAct 的生产难点是有界的决策、行动与观察循环,不是展示 Thought 文本。
面试官还可能这样问
- 问法 1 · 场景切入
假设你做一个智能客服,用户问“帮我查一下订单”,你得先搜索数据库,然后可能还需要调用物流API看发货状态,如果结果有异常还要再次查询。这种多步工具调用,你是怎么让模型边想边做的?
- 问法 2 · 层层追问
大模型调用外部工具,你一般怎么设计流程?……如果第一步搜索没找到结果,模型会怎么处理?……那如果它需要基于搜索结果再决定下一步动作,怎么把推理和行动串起来,而不是一次性生成所有动作?
- 问法 3 · 直球架构
解释一下ReAct架构的设计思想,就是怎么把推理和行动交织起来的?它的工作流程是怎样的?相比直接用CoT或者单独的工具调用,它主要解决了什么问题,有什么优势?