ReAct:推理与行动交织的提示模式

核心02-提示设计核心技法⏱ 25 分钟已审校
学习进度:

一句话定义

ReAct 模式让模型在"思考(Thought)→ 行动(Action)→ 观察(Observation)"的循环中交替进行推理与工具调用,用外部世界的真实反馈替代纯脑补。

为什么重要

纯 CoT 的推理材料只有模型参数里的先验,遇到"需要事实"的问题就会一本正经地编。ReAct 把思维链扩展成"带手的思维链":每一步行动的结果作为新观察进入上下文,后续推理建立在事实上。它是几乎所有工具型 Agent 的提示模式原型(框架层的编排属于跨站主题,本库只负责提示模式本身),也是理解 工具结果的上下文呈现:喂回什么、怎么喂 工具结果呈现和 工具调用提示:函数描述、参数设计与选择引导 工具调用提示的语境。

前置知识

直观类比

闭卷考试(纯 CoT)允许"查资料"后变成开卷考试(ReAct):考生每答一步都先翻书核对,翻到的内容(Observation)写进草稿纸,后续作答以草稿为准——分数自然更稳,代价是考试时间变长。

图示

Thought: 需要先查该订单的状态,再判断能否退款
Action:  query_order(order_id="A10293")
Observation: 状态=已签收3天, 金额=89元, 支持7天无理由
Thought: 签收在7天内 → 符合退款条件,调用退款
Action:  create_refund(order_id="A10293", reason="7天无理由")
Observation: 退款单 R5521 已创建
Thought: 任务完成
Finish: 已为您提交退款申请(单号 R5521),预计 1-3 个工作日到账。

核心概念

  • Thought(思考):模型陈述当前目标与下一步计划——可审计的决策点。
  • Action(行动):结构化的工具调用(工具名 + 参数),由外部程序执行。
  • Observation(观察):工具返回结果,回灌进上下文成为下一轮条件。
  • 停止条件(Finish):模型显式宣告完成并给出最终答案,防止无限循环。
  • 循环上限:程序侧强制的最大轮数——提示约定 + 硬限制双保险。

原理与机制

ReAct 有效的原因有三:行动结果提供了参数先验没有的事实(降低幻觉);Thought 强迫模型在行动前显式给出理由(错误决策更早暴露);观察-推理交替把长任务切成多个短续写(每步更可靠)。模式本身是纯提示的——即使 API 已有原生函数调用,"先写计划再调用"的提示结构仍然显著影响工具选择质量。

设计要点:

  1. 格式用固定标记:Thought:/Action:/Observation: 三行一组,解析器按标记切分;
  2. Observation 要整形:工具原始返回(大 JSON、HTML)必须裁剪为对当前决策有用的摘要再回灌(详见 工具结果的上下文呈现:喂回什么、怎么喂),否则几轮就把预算烧光;
  3. 失败也要回灌:工具报错是宝贵信息,约定模型收到错误后应修正参数重试或换工具,而不是沉默。

公式或模型

本节不适用——ReAct 是交互协议而非数学模型;其轮数-收益关系需在自身任务上用评估集实测。

实例或案例

案例:从"幻觉型客服"到 ReAct 客服。 症状:客服机器人被问"我的订单到哪了"时直接编造物流信息。操作步骤:① 系统提示声明可用工具清单与调用格式;② 禁止在无观察支撑时给出事实性答案(规则:R5 涉及订单状态的回答必须引用一次查询结果);③ 设置循环上限 5 轮与超时话术;④ 每轮 Observation 做字段级裁剪。系统提示骨架:

你可使用以下工具(每轮最多一个 Action):
- query_order(order_id)  查询订单状态
- create_refund(order_id, reason) 创建退款
作答规则:
R1 先用 Thought 说明计划,再给 Action;禁止跳过查询直接回答订单状态。
R2 工具返回错误时,修正参数重试 1 次;再失败则致歉并转人工。
R3 达到轮数上限未完成,回复:"该问题处理超时,已转人工。"
R4 完成时以 Finish: 输出最终答复。

排错清单:

常见误区

  • 把 ReAct 当框架功能:它是提示模式,没有框架也能用手写循环实现;反过来,用了框架不写好提示照样幻觉;
  • Observation 原样回灌:大 JSON/HTML 不裁剪,两三轮就挤爆预算并稀释关键信息;
  • 无循环上限:提示只说"完成就停",模型有概率永不宣告——程序侧硬限制必须存在。

自测题

  1. ReAct 相比纯 CoT 的本质增量是什么?

答:引入外部行动与真实观察,推理材料从参数先验扩展到事实反馈,抑制幻觉。

  1. 为什么 Observation 要裁剪后再回灌?

答:控制注意力预算(上下文窗口与注意力预算),只保留对下一步决策有用的字段,防止预算被原始返回烧光。

  1. 防止无限循环的两道保险是什么?

答:提示中的停止约定(Finish 语义 + R3 式超时话术)与程序侧的最大轮数硬限制。

与其他知识点的关系

工具结果的上下文呈现:喂回什么、怎么喂 专讲 Observation 的呈现工程;工具调用提示:函数描述、参数设计与选择引导 讲工具清单与参数的提示写法;注入防御:隔离、最小权限与输出侧防护 指出 Observation 是间接注入的主要入口——安全审查必查。

延伸阅读

  • 论文:ReAct: Synergizing Reasoning and Acting in Language Models(Yao et al., 2022)。

来源

  • ReAct: Synergizing Reasoning and Acting in Language Models (Yao et al.
  • 2022)