ReAct 框架怎么实现推理+行动?
Agent 中 ReAct 工作机制与实现流程,结合搜索工具举例
原题:请详细解释ReAct(Reasoning + Acting)框架的基本思想、工作机制及其在大模型代理(Agent)中的应用,包括它如何结合推理与外部操作来提升任务完成能力,并举例说明其实现流程。
Prompt工程 · 美团真题
30 秒回答
- ReAct的核心思想是将推理(Reasoning)和行动(Acting)交织进行,而非分离执行
- 能清晰说明Thought → Action → Observation的循环机制
- 理解ReAct相比纯推理或纯行动的优势(减少幻觉、增强可解释性)
- 能结合具体场景(如搜索、计算、数据库查询)描述完整执行流程
回答与解析
答案要点
- ReAct的核心思想是将推理(Reasoning)和行动(Acting)交织进行,而非分离执行
- 能清晰说明Thought → Action → Observation的循环机制
- 理解ReAct相比纯推理或纯行动的优势(减少幻觉、增强可解释性)
- 能结合具体场景(如搜索、计算、数据库查询)描述完整执行流程
- 提及实际实现中的关键细节(如prompt设计、停止条件、工具描述)
核心思想
ReAct = Reasoning(推理)+ Acting(行动),关键突破是让模型交替进行"思考"和"行动",而非先想后做或只做不想。
传统方式的问题:
- 纯CoT:只推理不行动,知识过时或不足时产生幻觉
- 纯Action:盲目调用工具,缺乏规划导致效率低
ReAct让模型每步都显式输出思考过程,再决定下一步行动。
工作机制:循环三要素
Thought(思考)→ Action(行动)→ Observation(观察)→ 循环...
| 元素 | 作用 | 示例 |
|---|---|---|
| Thought | 分析当前状态、制定计划、反思错误 | "我需要先查北京天气,再推荐穿搭" |
| Action | 调用外部工具(搜索、计算、API) | search("北京今日天气") |
| Observation | 获取工具返回的客观结果 | "晴,25°C,微风" |
循环终止条件:得到最终答案,或达到最大步数。
应用示例:复杂问答
任务:"2024年诺贝尔物理学奖得主是谁?他因什么研究获奖?"
执行流程:
- Thought:这个问题需要最新信息,我的知识可能不全,先搜索确认
- Action:
search("2024诺贝尔物理学奖得主") - Observation:返回"John J. Hopfield和Geoffrey E. Hinton,因机器学习与神经网络的基础性发现和发明"
- Thought:已确认得主,但需要更详细的研究背景,分别搜索两人的贡献
- Action:
search("Hopfield Hinton 具体研究贡献") - Observation:返回Hopfield网络和玻尔兹曼机器的详细说明
- Thought:信息已足够,可以综合回答
- Final Answer:...
关键实现细节
Prompt设计:
你是智能助手,按以下格式思考并行动:
Thought: [你的分析]
Action: [工具名, 参数]
Observation: [工具返回,由系统自动填充]
...(重复直到解决问题)
优势:
- 可解释性:完整轨迹可追溯
- 错误恢复:某步失败可从Thought调整策略
- 动态规划:根据观察实时调整,非固定流程
典型应用:LangChain的AgentExecutor、AutoGPT、各类客服/数据分析Agent。
口语版讲法(约4分钟)
- ReAct本质是让模型边想边做,不是先想再做
- 循环三要素:Thought→Action→Observation
- 对比纯推理和纯行动的边界
- 业务场景:客服退款流程
- 落地前提和风险
- 工程师取舍:可解释性优先
这道题问的是ReAct框架,我觉得它本质上是问大模型怎么把思考和行动结合起来,不是单一地推理或者单一地调用工具。ReAct的核心就是让模型交替进行推理和行动,用Thought、Action、Observation这个循环来推进任务。你可以这么理解,它不像传统方法那样先想好再去做,而是想一步做一步,做完看结果再想下一步。
具体说一下工作机制。ReAct有三个要素循环:Thought、Action、Observation。Thought是模型显式输出思考,比如分析当前状态、制定下一步计划;Action是调用外部工具,比如搜索、计算、API;Observation是工具返回的客观结果。这个循环一直持续,直到模型给出最终答案,或者达到最大步数。
这里有个边界问题。纯推理比如 Chain-of-Thought,只靠模型内部知识,如果知识过时或者不足,容易产生幻觉。纯行动比如直接调工具,没有规划,效率低还容易走偏。ReAct把两者结合起来,用思考指导行动,用观察修正思考,所以比单独用哪个都好。但真正落地的时候,我一般不会只用ReAct,还会结合RAG或者微调。比如RAG适合知识密集型任务,ReAct适合需要多步推理和工具调用的场景,很多时候是两者一起上,先用RAG检索知识,再用ReAct做推理和行动。
举个例子,客服退款场景。用户说“我买了个商品,订单号是12345,但没收到货,我要退款”。模型先Thought:用户要退款,我需要查订单状态和物流信息。然后Action:查询订单系统,返回订单已发货、物流显示签收。Observation:物流签收了但用户说没收到,可能是异常。接着Thought:这可能是配送问题,需要进一步核实,或者走理赔流程。再Action:调用客服工单系统创建异常单。最后Observation:系统返回工单ID,模型综合信息给出最终答案。这样每一步都有思考轨迹,可解释性很强。
落地的时候有几个前提和风险。前提是工具接口要稳定,返回结果要结构化,不然Observation解析会出错。风险是步数太多会导致延迟高,而且如果模型思考不够准确,可能会在错误路径上绕圈。常见失败场景是工具调用失败后模型没有重试机制,或者Observation信息不足导致模型瞎猜。上线我会特别关注最大步数限制和超时处理,还有错误恢复逻辑,比如Action失败后重新思考其他方案。
另外,ReAct的Prompt设计也很关键,需要明确告诉模型输出格式,比如Thought、Action、Observation各占一行,不然模型容易混。这个Prompt设计其实和Function Calling有联系,我倾向于把工具描述写得足够清晰,让模型知道什么时候该用什么工具。
所以总结一下,我更倾向把ReAct看作一种让模型行为可解释、可干预的框架,而不是一个黑盒。它牺牲了一点效率,换来了更好的可控性和可追溯性,这在客服、金融、医疗这些对合规要求高的场景里特别重要。
关键一句:ReAct的Prompt设计和Function Calling的关系
面试官还可能这样问
- 问法 1 · 场景切入
假设你在做一个智能客服,用户问“今天的订单状态”,你查到了,但用户接着问“那昨天那笔退款呢?”。传统方法可能直接搜,但ReAct会先想“用户刚问了今天订单,现在问昨天退款,我需要先确认用户身份”,再查。你能讲讲这个“先想再做”的机制具体怎么运作吗?
- 问法 2 · 层层追问
你平时怎么让模型调用工具?……是直接调吗?那如果模型工具调用错了怎么纠偏?……有没有一种方式让模型每一步都先分析再行动,比如先想“我需要查什么”再调用?这就是ReAct的核心,你能展开说说它的循环过程吗?
- 问法 3 · 直球架构
请解释ReAct框架:它的基本思想是什么?工作机制里Thought、Action、Observation怎么循环?为什么比纯CoT或纯工具调用更好?举一个具体例子,比如搜索加计算的任务,描述完整流程。