ReAct 如何提升复杂任务?
AI Agent 中推理与行动交替的流程,提升复杂任务解决能力
原题:请详细介绍ReAct(Reasoning + Acting)框架的基本思想、工作流程及其在AI Agent任务中的应用,举例说明其如何通过交替推理与行动提升复杂任务的解决能力。
Prompt工程 · 美团真题
30 秒回答
- ReAct的核心思想是推理与行动的交织循环,而非先想后做或先做后想
- 三个关键组件:Thought(推理)、Action(行动)、Observation(观察)
- 相比纯CoT或纯Action,ReAct能处理需要外部信息动态获取的任务
- 通过少样本示例即可激活,无需额外训练
回答与解析
答案要点
- ReAct的核心思想是推理与行动的交织循环,而非先想后做或先做后想
- 三个关键组件:Thought(推理)、Action(行动)、Observation(观察)
- 相比纯CoT或纯Action,ReAct能处理需要外部信息动态获取的任务
- 通过少样本示例即可激活,无需额外训练
- 在HotpotQA、WebShop等任务中验证有效
核心思想
ReAct = Reasoning + Acting,打破"先推理后行动"或"只行动不推理"的局限,让LLM在推理→行动→观察→再推理的循环中动态解决复杂任务。
工作流程
Thought 1: 我需要先搜索X的信息
↓
Action 1: Search[X]
↓
Observation 1: 返回结果...
↓
Thought 2: 基于观察,我还需要查询Y
↓
Action 2: Lookup[Y]
↓
...循环直到得出最终答案
三个关键元素:
- Thought:当前状态分析、下一步计划、关键信息整合
- Action:调用工具(搜索、计算、API等)
- Observation:工具返回的外部反馈
应用示例(知识问答)
问题:"《繁花》导演还拍过哪些获得国际奖项的电影?"
| 步骤 | 内容 |
|---|---|
| Thought 1 | 需要先确认《繁花》的导演是谁 |
| Action 1 | Search["繁花 导演"] |
| Observation 1 | 王家卫 |
| Thought 2 | 需要查询王家卫获得国际奖项的电影作品 |
| Action 2 | Search["王家卫 国际奖项 电影"] |
| Observation 2 | 《花样年华》获戛纳最佳男演员... |
| Thought 3 | 已收集足够信息,可以总结答案 |
| Action 3 | Finish["《春光乍泄》《花样年华》..."] |
相比纯CoT的优势
| 方式 | 局限 | ReAct解决 |
|---|---|---|
| 纯CoT | 知识截止,幻觉 | 通过Action动态获取最新信息 |
| 纯Action | 盲目尝试,错误累积 | Thought提供系统性规划 |
实际落地要点
- 提示设计:提供2-3个高质量少样本示例,规范输出格式
- 工具封装:Action需对应可执行函数,Observation要结构化
- 终止条件:定义Finish动作或最大步数限制,防止无限循环
口语版讲法(约4分钟)
- ReAct的本质是推理与行动交替,不是先想后做或只做不想
- 工作流程:Thought→Action→Observation循环
- 相比CoT或纯Action,核心优势是动态获取外部信息
- 业务落地:知识问答中的多步搜索,避免幻觉和错误累积
- 落地前提:工具封装和终止条件设计,否则容易无限循环
面试官,这道题问的是ReAct框架,我觉得它本质上是在问:怎么让大模型在复杂任务里既能思考又能动手,而且这两件事要交替着来,不是先想完再做或者只做不想。
ReAct的核心思想就是推理和行动交织成一个循环。具体来说,它有三个组件:Thought,就是模型基于当前状态做推理,比如‘我还缺什么信息’;Action,就是调用外部工具,比如搜索、计算;Observation,就是工具返回的结果。这三个东西不断循环,直到得出最终答案。
你可以这么理解:假设我问你‘《繁花》导演还拍过哪些获国际奖项的电影’,如果你只是纯推理,你可能靠训练数据里的知识回答,但万一你的知识截止了或者记错了呢?如果你只是纯行动,比如直接搜‘导演国际奖项’,可能搜出一堆无关信息。ReAct的做法是:先想一步,‘我得先知道导演是谁’,然后搜一下,得到‘王家卫’;再想一步,‘王家卫有哪些获奖作品’,再搜一次;最后观察到结果,总结答案。这个交替的过程,让模型能动态获取外部信息,避免幻觉,也避免盲目尝试。
相比纯Chain-of-Thought,ReAct的优势是它能处理需要外部信息更新的任务,比如实时数据、多步搜索。相比纯Action,它又不会瞎撞,因为每一步都有推理指导。说白了,CoT适合单步推理、知识闭卷的场景,纯Action适合简单工具调用,而ReAct适合需要多步规划和外部交互的复杂任务。真正落地的时候,我常常会把ReAct和CoT结合起来,比如先让模型用CoT做内部推理,遇到知识盲区再切换到Action去查。
举个例子,在客服退款场景里,用户问‘我订单XXX为什么还没退款’。纯CoT模型可能说‘订单已提交,请等待’,但实际可能是物流异常或库存问题。ReAct可以这样:先想‘需要查订单状态’,然后调订单API,返回‘已签收但退款未触发’;再想‘可能是物流异常’,调物流API,发现丢件;最后决定‘触发人工介入’。这样一步步推理加行动,比直接给答案靠谱得多。
这里有个坑:ReAct的效果高度依赖工具封装质量和终止条件设计。如果工具返回的信息不结构化,或者没有定义好‘什么时候该结束’,模型可能会无限循环下去。所以我上线的时候会特别关注两点:一是给每个Action配清晰的输入输出规范,二是设最大步数限制,比如最多5步,超时就回退到纯推理。
所以整体来看,我更倾向于把ReAct看成一种‘思维框架’,而不是一个固定算法。它真正有价值的地方,不是那三个组件本身,而是它让模型学会在思考和行动之间动态切换,像个有常识的人一样解决问题。如果让我选,我会优先用ReAct处理那些需要多步搜索、验证和工具调用的任务,而不是所有场景都套用。
关键一句:ReAct落地的关键前提是工具封装质量和终止条件设计,否则容易无限循环或信息混乱。
面试官还可能这样问
- 问法 1 · 场景切入
假设你在做一个电商客服Agent,用户问‘这个手机有什么颜色?’,你打算怎么设计思考-行动流程?如果用户接着问‘那红色款和蓝色款哪个续航好?’,Agent该怎么继续推理和查询?
- 问法 2 · 层层追问
你觉得大模型做复杂任务时,是直接把推理步骤写出来好,还是让它去调工具好?……那如果既要推理又要调工具,怎么结合?……有没有想过让它们交替进行,比如推理一步、调工具、再根据结果推理下一步?
- 问法 3 · 直球架构
请介绍一下ReAct框架的核心思想和完整工作流程,包括Thought、Action、Observation的具体含义和相互关系。再举一个具体任务例子,说明它如何通过交替推理与行动来提升复杂任务的解决能力。