跳到正文

ReAct 框架怎么用?

核心思想与工作机制,Agent 任务中对比纯推理/动作模型优势

原题:请详细介绍ReAct(Reasoning + Acting)框架的核心思想、工作机制及其在大模型代理任务中的典型应用场景,并举例说明其相较于纯推理或纯动作模型的优势。

Prompt工程 · 美团真题

30 秒回答

  1. ReAct的核心思想是推理与行动的交错协同,而非分离执行
  2. 明确阐述Thought → Action → Observation的循环机制
  3. 能对比ReAct vs CoT vs 纯Action的优劣
  4. 给出典型应用场景(如知识问答、复杂决策)

回答与解析

答案要点

  • ReAct的核心思想是推理与行动的交错协同,而非分离执行
  • 明确阐述Thought → Action → Observation的循环机制
  • 能对比ReAct vs CoT vs 纯Action的优劣
  • 给出典型应用场景(如知识问答、复杂决策)
  • 说明ReAct如何解决幻觉和工具使用问题

核心思想

ReAct = Reasoning(推理)+ Acting(行动),核心是让LLM在思考行动之间交替进行,而非先想后做或只做不想。

关键洞察:人类解决问题时,推理和行动是紧密交织的——行动获取新信息,推理指导下一步行动。

工作机制

标准循环结构(每轮迭代):

Thought(思考)→ Action(行动)→ Observation(观察)
     ↑___________________________________|
  • Thought:分析当前状态、规划下一步、评估进展
  • Action:调用工具(搜索、计算、API等)或与环境交互
  • Observation:获取行动反馈,更新上下文

示例轨迹:

Thought: 用户问2024年诺贝尔物理学奖得主,我需要搜索最新信息
Action: Search["2024 Nobel Prize in Physics winner"]
Observation: John J. Hopfield and Geoffrey Hinton...
Thought: 已获取信息,可以回答用户问题了
Action: Finish["John J. Hopfield and Geoffrey Hinton..."]

典型应用场景

场景 说明
知识问答 实时信息检索,解决知识截止问题
复杂计算 调用计算器/代码解释器完成多步运算
数据库查询 自然语言转SQL,根据结果迭代修正
多工具协作 搜索+计算+API调用组合完成任务

核心优势(对比分析)

范式 问题 ReAct如何解决
纯推理(CoT) 幻觉、知识陈旧、无法获取外部信息 通过Action主动获取真实数据
纯行动(Act) 盲目调用工具、缺乏规划、错误率高 Thought显式规划,减少无效调用
ReAct 推理指导行动,行动反馈修正推理

具体优势:

  • 可解释性:Thought轨迹形成完整决策链,便于调试
  • 容错性:Observation失败时,Thought可重新规划
  • 效率性:避免不必要的工具调用(对比ReAct论文,HotpotQA上调用次数减少)

实际实现要点

  1. Prompt设计:用few-shot示例定义Thought/Action/Observation格式
  2. 工具描述:清晰说明每个工具的输入输出
  3. 停止条件:定义Finish动作或最大迭代次数
  4. 错误处理:Observation异常时让模型自我修正

现代实现中,OpenAI/Claude的Function Calling机制本质上封装了ReAct范式,但显式ReAct仍适用于需要复杂推理链的场景。

口语版讲法(约4分钟)

  • ReAct本质:推理和行动交错协同
  • 工作机制:Thought→Action→Observation循环
  • 对比优势:CoT幻觉 vs 纯Action盲目
  • 业务场景:知识问答和复杂决策
  • 落地风险:工具描述和停止条件

这道题其实问的是,怎么让大模型在复杂任务中既能思考又能动手,而不是只动脑不动手或者只动手不动脑。ReAct框架的核心就是把推理和行动交错起来,而不是分开做。

具体说一下工作机制,它的循环是Thought→Action→Observation,然后拿Observation再去更新Thought,形成一个闭环。你可以这么理解:模型先想一下现在该干什么,然后去调一个工具或查一个数据库,拿到结果后再想下一步。比如用户问今年诺贝尔物理学奖得主是谁,模型先想我需要搜索最新信息,然后调搜索工具,拿到结果后观察一下,再组织回答。这个循环天然解决了模型的知识截止问题,因为Action能拉实时数据进来。

那它跟纯推理或者纯动作比有什么优势呢?纯推理就是Chain-of-Thought,光靠内部知识推理,容易产生Hallucination,而且知识老旧。纯动作就是Function Calling那种,模型直接调工具,但缺乏规划,可能瞎调一气。ReAct的好处是Thought指导Action,Action反馈又修正Thought,形成一个自我纠正的回路。举个例子,如果搜索返回的结果是空的或者错误的,模型在Thought阶段就能发现,然后重新规划搜索词,而不是继续往下走。

典型的应用场景我重点说两个。一个是知识问答,特别是需要实时信息或企业内部数据的那种,比如客服场景里用户问一款商品的价格和库存,模型需要先查商品库,再查库存系统,最后整合回答。另一个是复杂决策,比如企业SOP场景,用户问退款流程,模型需要先查退款政策,然后判断用户是否符合条件,再调工单系统创建退款单,每一步都要根据上一步的结果来决策。

落地的时候有几个坑要注意。前提是工具的描述要足够清晰,包括输入输出格式和错误边界,不然模型可能不知道怎么调或者调错了。还有一个常见失败场景是循环停不下来,模型一直在查数据但不输出最终答案,所以必须定义好停止条件,比如最大迭代次数或者明确的Finish动作。上线我会特别关注错误处理,比如搜索接口超时了,模型能不能优雅地重试或者换个策略,而不是直接崩掉。

其实现在很多框架把ReAct封装得更上层了,比如OpenAI的Function Calling本质上就是ReAct的变种,但显式的ReAct在需要复杂推理链的场景下还是有不可替代的优势,因为它每一步的思考都暴露出来,方便调试和审计。

所以说,我会把ReAct看成一种让模型学会‘先想后做、边做边想’的范式,它不是要替代CoT或者Function Calling,而是把它们组合起来。真正落地的时候,我更倾向于根据任务复杂度来选:简单任务用纯Function Calling就够了,复杂任务才上显式ReAct。

关键一句:显式ReAct与Function Calling的关系和取舍

面试官还可能这样问

  1. 问法 1 · 场景切入

    假设你正在做一个智能客服,用户问“帮我查一下上周的订单”,模型直接调API返回数据,但没解释为什么查这个。你感觉少了点什么?如果想让模型先想一下再动手,比如先推理出需要查订单表再调用工具,你会怎么设计?

  2. 问法 2 · 层层追问

    大模型在复杂任务中怎么避免瞎编或者乱调用工具?……如果让它先推理再行动呢?……那推理和行动之间怎么交互?比如模型想了一步,执行了一个搜索,得到结果后下一步该怎么走?你能把这个循环说清楚吗?

  3. 问法 3 · 直球架构

    请详细介绍ReAct框架的核心思想和工作机制,包括Thought、Action、Observation的循环,并对比它相比纯推理(CoT)和纯行动模型的具体优势。最好举一个实际应用场景,比如知识问答或工具调用。

同模块相关题目