跳到正文

ReAct 框架核心思想与流程

Reasoning+Acting 如何提升大模型代理任务效果

原题:请详细介绍ReAct(Reasoning + Acting)框架的核心思想、工作流程及其在大模型代理任务中的应用优势。

Prompt工程 · 美团真题

30 秒回答

  1. ReAct的核心思想是交错进行推理(Thought)和行动(Action),形成"思考-行动-观察"的循环
  2. 与CoT和Act-only基线相比的优势(可解释性、幻觉缓解、交互能力)
  3. 具体的工作流程(Thought → Action → Observation → ... → Finish)
  4. 实际应用中的典型场景(知识密集型推理、工具调用、多步决策)

回答与解析

答案要点

  • ReAct的核心思想是交错进行推理(Thought)和行动(Action),形成"思考-行动-观察"的循环
  • 与CoT和Act-only基线相比的优势(可解释性、幻觉缓解、交互能力)
  • 具体的工作流程(Thought → Action → Observation → ... → Finish)
  • 实际应用中的典型场景(知识密集型推理、工具调用、多步决策)

核心思想

ReAct将**推理(Reasoning)行动(Acting)**交织在一起,让模型在完成任务时既能"思考"又能"行动",形成类似人类的认知循环。

传统方法的局限:

  • CoT(纯推理):只动脑不动手,无法获取外部信息
  • Act-only(纯行动):缺乏推理规划,容易走弯路或陷入死循环

工作流程

Thought → Action → Observation → [循环] → Finish
组件 作用 示例
Thought 分析当前状态,制定下一步计划 "我需要先查北京今天的天气"
Action 执行具体操作(调用工具) Search[北京天气]
Observation 接收外部反馈结果 "北京今日晴,25°C"
Finish 综合信息给出最终答案 "建议穿短袖,适合出行"

应用优势

  1. 可解释性强:推理过程显性化,便于调试和审计
  2. 幻觉缓解:关键事实通过工具查询,减少编造
  3. 动态纠错:观察结果不理想时可调整策略重新推理
  4. 知识外延:突破参数知识限制,实时获取信息

典型应用场景

  • 知识问答:HotpotQA等多跳推理任务
  • 工具编排:API组合调用(如订机票→查酒店→规划路线)
  • 交互决策:Web导航、数据库操作等需要环境反馈的任务

实际落地时,通常通过**少样本示例(few-shot)**引导模型生成规范的Thought-Action格式,配合停止词控制解析流程。

口语版讲法(约4分钟)

  • ReAct本质是让大模型在思考与行动之间切换,形成闭环
  • 工作流程就是思考-行动-观察的循环,重点在格式控制
  • 比CoT和纯行动的优势在于可解释、防幻觉、能纠错
  • 真实业务场景:客服退款流程的多步决策
  • 落地前提是模型指令跟随能力够好,否则容易跑偏

这道题问的是ReAct框架,其实核心就一句话:让大模型在推理和行动之间来回切换,形成一个闭环。它不是单纯的想,也不是单纯的干,而是边想边干,边干边想。

我先说一下工作流程,你可以理解成一个循环:先思考当前要做什么,然后执行一个动作,接着观察结果,再根据结果继续思考,直到任务结束。具体到格式上,就是Thought、Action、Observation这三个组件反复出现,最后用Finish收尾。比如我让模型查一个城市的天气,它会先想“我需要查北京天气”,然后调用搜索工具,看到结果说“北京晴25度”,再想“那就可以回答用户了”,最后给出建议。

这个框架相比纯推理的Chain-of-Thought和纯行动的Act-only,优势很明显。先说可解释性,每一步思考都写出来了,调试和审计非常方便。再一个就是缓解Hallucination,关键事实通过工具查,不是模型瞎编的,准确率高很多。还有就是动态纠错,如果观察结果不理想,比如搜索没找到,它可以调整策略重新搜索,而不是一条路走到黑。

我举个真实的业务场景,客服退款流程。用户说“我买的东西坏了,要退款”,模型不能直接说“好的已退款”,它得先思考:用户有没有订单号?没有的话,得让用户提供。然后调用订单查询工具,查到订单状态是已签收,再调用退款接口。每一步都有观察结果,比如订单不存在就提示用户检查,退款失败就重试或转人工。这种多步决策场景,ReAct比单纯用Function Calling写死流程要灵活得多,因为模型能根据中间结果动态调整。

但这里有个坑,落地的时候前提条件很关键。ReAct的效果高度依赖模型的指令跟随能力和格式稳定性。如果模型生成的Thought和Action格式不规范,解析器就解析不出来,整个流程就断了。常见失败场景是模型在Action里写了一大段话而不是一个工具调用,或者Thought和Action混在一起。所以上线前我会特别关注少样本示例的质量,把格式写死,配合停止词控制解析,比如用“Observation:”作为停止词,确保模型不会自己往下编观察结果。

另外还有一个延伸点,ReAct的推理过程虽然可解释,但思考链太长会导致累积误差,前面一步推理错,后面全跟着错。所以我在实际项目中会考虑结合Self-Refine或者Reflexion,让模型自己回顾之前的步骤,发现错误就回溯修正。

所以总的来说,我会把ReAct看作一个让模型“边做边想”的框架,特别适合需要多步工具调用的场景。但它的前提是模型本身能力够强,指令跟随稳定。我更倾向在推理密集型任务上用ReAct,在简单问答上直接用CoT可能更高效,两者不是替代关系,而是互补。

关键一句:ReAct的思考链过长时容易累积误差,可以结合Self-Refine或Reflexion让模型回溯修正。

面试官还可能这样问

  1. 问法 1 · 场景切入

    假设你正在做一个智能客服,用户问“帮我查一下订单”,然后你调用了查询工具,但结果说订单不存在。接下来你该怎么处理?是直接告诉用户,还是再想想?

  2. 问法 2 · 层层追问

    让大模型调用工具完成任务,你一般怎么设计它的行为?……那如果工具返回的结果和预期不符,模型能自己调整吗?……怎么让它一边想一边做、还能根据观察修正?

  3. 问法 3 · 直球架构

    讲讲ReAct框架的核心思想和流程吧。它怎么把推理和行动结合起来的?相比CoT或纯Action,优势在哪里?具体怎么在agent里落地?

同模块相关题目