先给结论
ReAct 改写的是一步内的策略表示,Reflexion 改写的是一次失败后的上下文。前者把语言推理并入动作空间,后者把评估信号转写为可读、可复用的 episodic memory。
ReAct
题名:ReAct: Synergizing Reasoning and Acting in Language Models
作者:Shunyu Yao 等
身份:2022 年首次发布 arXiv,ICLR 2023 正式论文。v3 为 camera ready。
一句话:交替生成 Thought、Action,并接收 Observation,使 reasoning 与 acting 在同一 trajectory 内相互纠正。
五个容易混淆的能力
| 能力 | ReAct | Reflexion | 在材质任务中的含义 |
|---|---|---|---|
| trajectory-level reasoning / action | 核心。Thought 与 Action 在同一次尝试中交错。 | 由 Actor 承担,Actor 可为 ReAct 或 CoT。 | 选节点、连边、设参数、渲染、读反馈的单次构图过程。 |
| environment observation | 每个外部 Action 后返回 Observation,用于下一步推理。 | Evaluator 可读取整条 trajectory 与任务反馈。 | 编译状态、renderer 输出、图像差异、节点错误与资源约束。 |
| verbal reflection | 没有独立的失败后反思模块。Thought 是在线推理。 | 核心。将稀疏 reward 与轨迹放大为具体语言经验。 | “法线高频不足,下一次先分离尺度并增加微表面支路”。 |
| episodic memory | 当前 context 中保留过程轨迹,本质是短期上下文。 | 显式长期记忆。论文通常保留最近 1 至 3 条 reflection。 | 跨 attempt 保存失败原因与修改原则,而非整段原始日志。 |
| 跨尝试改进 | 原始方法不以跨 episode 学习为核心,重新采样不等于学习。 | 核心。下一次 policy 条件化于 memory,模型权重不更新。 | 同一参考图像进行多轮“构图、渲染、诊断、重试”。 |
ReAct:单次尝试内的闭环
动机与 significance
CoT 能形成多步推理,却只能在模型内部知识上静态展开,容易累积事实幻觉。Act-only 能与外部环境交互,却缺少高层目标分解、进度追踪与异常恢复。ReAct 的贡献不是新网络结构,而是一种 prompting paradigm:让语言模型在同一序列中显式生成推理轨迹与环境动作。
它的重要性在于把“外部世界”写回 context。动作获取的事实约束下一步推理,推理又决定下一次检索或操作,从而形成 reason to act 与 act to reason 的双向耦合。原文与附录见 完整 HTML。
问题定义与数学建模
在时间步 (t),环境给出 observation (o_t\in\mathcal{O}),agent 根据上下文 (c_t) 选择 action (a_t\in\mathcal{A}):
ReAct 将动作空间扩展为领域动作与语言空间的并集:
若 (hat a_t\in\mathcal{L}),它是 Thought,不改变外部环境,也不触发 observation,而是直接更新 context:
这里的 Thought 不是 reward,也不是训练标签意义上的 latent state。它是可读的语言动作,用于目标分解、事实提取、进度追踪、检索改写和异常处理。
算法、输入与输出
知识任务使用 dense Thought,基本交替为 Thought、Action、Observation。长时序决策任务使用 sparse Thought,由模型自己决定何时思考,避免每个低层动作都产生冗长推理。
训练与推理
主结果属于冻结模型的少样本推理。主模型为 PaLM-540B。HotpotQA 使用 6 个手工 ReAct exemplar,FEVER 使用 3 个。ALFWorld 每个任务类型人工标注 3 条轨迹,并以其中 2 条的 6 种排列构造 6 套 prompt。WebShop 是 one-shot。主实验采用 greedy decoding。
补充 fine-tuning。作者用 ReAct 自动生成且答案正确的 3,000 条 trajectory 对 PaLM-8B 与 PaLM-62B 做训练。batch size 为 64。ReAct 与 Act 在两种模型上均训练 4,000 steps;Standard 与 CoT 在 8B 上训练 2,000 steps,在 62B 上训练 1,000 steps。论文没有公开学习率、优化器与硬件,因此复现时应标记为未报告。
知识任务的 action space 与终止条件
search[entity] 返回对应 Wikipedia 页首 5 句,若无精确页面则返回前 5 个相似实体。lookup[string] 依次返回当前页面中包含字符串的句子。finish[answer] 提交答案并终止。HotpotQA 最多 7 steps,FEVER 最多 5 steps;超限时可回退到 CoT-SC。
CoT-SC 混合策略
CoT-SC 在 temperature 0.7 下采样 21 条 CoT trajectory,以多数答案为输出。ReAct 超步数则回退到 CoT-SC;当 CoT-SC 多数答案出现次数少于 (n/2) 时,回退到 ReAct。它证明内在知识与外部知识互补,而不是证明 ReAct 在所有问题上都优于 CoT。
论文未报告或难以复现的细节
PaLM 权重不可公开获取。fine-tuning 的学习率、优化器、训练硬件与精确 wall time 未报告。官方仓库主要复现 GPT-3 prompting,并公开 notebook、prompt 和环境封装,不能等价复现 PaLM 主结果。
Reflexion:跨尝试的语言策略更新
动机与 significance
传统 RL 用大量交互和梯度更新参数。对闭源或超大 LLM 而言,成本高且常不可行。Reflexion 将二元或标量反馈转换为第一人称语言经验,存入长期 memory,让下一次尝试在相同模型权重下改变行为。作者把这种经验称为 semantic gradient,但它是类比,不是真正可微梯度。
模块与形式化
系统由 Actor (M_a)、Evaluator (M_e)、Self-Reflection (M_{sr}) 和 memory (mem) 构成。策略参数化为模型与记忆的组合:
第 (t) 次尝试生成 trajectory ( au_t),Evaluator 产生 reward (r_t),Self-Reflection 再产生语言经验 (sr_t):
论文实现将 (mem) 限制为最近 (Omega) 条经验,通常 (Omega\in\{1,2,3\})。trajectory history 是短期记忆,reflection buffer 是跨 trial 的长期记忆。
Algorithm 1 的准确读法
- Actor 与环境交互,生成初始 trajectory。
- Evaluator 判断成功与否或给出标量 reward。
- Self-Reflection 阅读 trajectory、reward 与已有 memory,输出具体改进经验。
- 将经验写入有容量限制的 memory,重置环境并开始下一 trial。
- 直到通过或达到最大 trials。
不同任务中的 Evaluator
| 任务 | Actor | Evaluator / feedback | memory | prompt |
|---|---|---|---|---|
| ALFWorld | ReAct,GPT-3 | 环境完成信号;重复同一 action 与 response 超过 3 次,或 action 数超过 30 时触发反思;另测 LLM binary classifier | 最近 3 条 | 2 条领域 few-shot trajectory |
| HotpotQA | CoT、CoT 加 ground-truth context、ReAct | exact match 产生 binary success | 3 条 | CoT 6-shot,ReAct 2-shot,reflection 2-shot |
| Programming | GPT-4 生成与修改代码 | 自生成测试、AST 过滤、编译器或解释器日志;测试最多 6 个 | 1 条 | 严格 function-body instruction;主代码生成 zero-shot |
训练与推理
论文不更新 LLM 权重,不执行梯度训练。所谓 verbal reinforcement learning 完全发生在推理时,通过环境试错、语言反思与 memory 更新改变后续条件分布。ALFWorld 最多 12 个连续 trial;HotpotQA 对失败样本重试,直到同一问题连续失败 3 次;编程任务在内部测试未通过时迭代。
官方仓库提供 ALFWorld、HotpotQA、programming 与 WebShop 的代码及论文运行日志,但依赖当时的 GPT-3 / GPT-4 API。仓库明确提醒 API 可用性与费用会影响复现。见 官方仓库说明。
实验与结果对读
ReAct:四个 benchmark
| 方法 | HotpotQA | FEVER |
|---|---|---|
| Standard | 28.7 | 57.1 |
| CoT | 29.4 | 56.3 |
| CoT-SC | 33.4 | 60.4 |
| Act | 25.7 | 58.9 |
| ReAct | 27.4 | 60.9 |
| CoT-SC → ReAct | 34.2 | 64.6 |
| ReAct → CoT-SC | 35.1 | 62.0 |
| Supervised SoTA | 67.5 | 89.5 |
ReAct 并不稳定优于 CoT。它在 FEVER 更强,在 HotpotQA 略弱。混合策略才是 prompting 中的最佳方案,同时距任务专用监督模型仍很远。
| 环境 | 方法 | 指标 | 结果 |
|---|---|---|---|
| ALFWorld | Act best of 6 | overall success | 45% |
| ALFWorld | ReAct average | overall success | 57% |
| ALFWorld | ReAct best of 6 | overall success | 71% |
| ALFWorld | ReAct-IM best of 6 | overall success | 53% |
| ALFWorld | BUTLER best of 8 | overall success | 37% |
| WebShop | Act | score / SR | 62.3 / 30.1 |
| WebShop | ReAct | score / SR | 66.6 / 40.0 |
| WebShop | IL + RL | score / SR | 62.4 / 28.7 |
| WebShop | Human expert | score / SR | 82.1 / 59.6 |
ReAct failure analysis
作者人工检查 200 条 HotpotQA trajectory。成功样本中,ReAct 的事实或推理幻觉为 6%,CoT 为 14%。失败样本中,ReAct 的 reasoning error 为 47%,无效 search result 为 23%;CoT 的 hallucination 占失败的 56%。这说明 grounding 降低事实幻觉,却会引入工具检索失败与结构约束。
Reflexion:跨 trial 的收益
ALFWorld 在 134 个任务上评测。ReAct 加 Reflexion 使用简单 heuristic 完成 130 个任务,并在 12 trials 中持续改善;ReAct-only 在第 6 至 7 trial 后停止增长。HotpotQA 每个实验抽取 100 个 distractor 问题。baseline 在 temperature 0.7 的重复尝试中没有解决任何首轮失败问题,而 Reflexion 产生系统性提升。
| Actor 与模型 | Baseline | Reflexion | 绝对提升 |
|---|---|---|---|
| CoT (GT) + text-davinci-003 | 0.60 | 0.77 | +0.17 |
| CoT (GT) + gpt-3.5-turbo | 0.57 | 0.71 | +0.14 |
| CoT (GT) + GPT-4 | 0.68 | 0.80 | +0.12 |
| ReAct + text-davinci-003 | 0.30 | 0.55 | +0.25 |
| ReAct + gpt-3.5-turbo | 0.26 | 0.38 | +0.12 |
| ReAct + GPT-4 | 0.39 | 0.51 | +0.12 |
| Benchmark | 此前 SoTA | GPT-4 baseline | Reflexion |
|---|---|---|---|
| HumanEval Python | 65.8 | 80.1 | 91.0 |
| HumanEval Rust | 未报告 | 60.0 | 68.0 |
| MBPP Python | 67.7 | 80.1 | 77.1 |
| MBPP Rust | 未报告 | 70.9 | 75.4 |
| Leetcode Hard Python | 未报告 | 7.5 | 15.0 |
消融真正说明了什么
| 方法 | 测试生成 | 自反思 | Pass@1 |
|---|---|---|---|
| Base | 否 | 否 | 0.60 |
| 仅自反思 | 否 | 是 | 0.52 |
| 仅测试反馈 | 是 | 否 | 0.60 |
| Reflexion | 是 | 是 | 0.68 |
反思不是无条件有效。没有可靠 evaluator 时,反思会对正确代码做有害修改;只有测试反馈但不进行语言 credit assignment,也没有超过 baseline。HotpotQA 的 memory ablation 还显示,self-reflection 比仅加入最近一次 trajectory 的 episodic memory 再高 8 个百分点。
关键 Figure / Table 导读
以下为基于原图 caption 与正文的单文件结构化重绘,不复制论文位图。编号沿用论文。
ReAct Figure 1
Reason only
Question → Thought chain → Answer
信息全部来自参数知识。优点是推理形式自由,弱点是事实无法被外部验证,错误会沿链传播。
Reason + Act
Question → Thought → Search → Observation → Thought → Finish
Observation 把真实环境证据写回 trajectory。Figure 1 同时展示 QA 与 ALFWorld,强调通用接口而非某个特定工具。
ReAct Figure 3
展示模型尺度、prompting 与 fine-tuning 的关系。小模型仅靠 few-shot 很难模仿复杂 ReAct 格式,但用 3,000 条正确 trajectory fine-tune 后,PaLM-8B ReAct 超过所有 PaLM-62B prompting 方法,PaLM-62B fine-tuned ReAct 超过全部 PaLM-540B prompting 方法。原图未在文本版提供全部精确柱值,因此此处不补写无法核实的数值。
Reflexion Figure 2
Reflexion Figure 3 与 Figure 4
Figure 3 是 134 个 ALFWorld task 的累计解决曲线,并分析失败原因。Figure 4 比较 HotpotQA 中 ReAct、CoT 与 CoT (GT) 的 Reflexion 收益,同时包含 memory ablation。两图最有价值的不是终点分数,而是 baseline 重试停滞、Reflexion 随经验积累继续提高的曲线形状。
局限、失败模式与锐评
ReAct
- 主模型 PaLM-540B 不公开,主结果不可完全复现。
- 依赖少量人工轨迹,prompt 选择可影响 ALFWorld 结果,论文报告 best of 6 也会放大选择优势。
- 结构化交错提升 grounding,却降低自由推理能力,并出现重复 Thought / Action loop。
- 无效检索占 ReAct 失败的 23%,工具质量成为系统瓶颈。
- 可解释 trace 不等于忠实反映内部因果过程,只能说“可检查”。
Reflexion
- “verbal RL”不更新权重,没有传统 RL 的收敛或策略改进保证。
- Evaluator 错误会成为错误 semantic gradient,且 memory 会持续放大它。
- 只保留最近 1 至 3 条 reflection 是工程折中,不是经过充分验证的最佳记忆结构。
- WebShop 四轮无改善,说明局部反思无法替代多样化探索。
- 多次 trial 增加调用成本,而论文没有系统报告 token、费用与 latency。
落到 renderer-in-the-loop procedural material agent
以下框架是当前课题的研究表示,不是 ReAct 或 Reflexion 论文的原始贡献:
三条研究线的准确对应
| 研究线 | 优化对象 | ReAct / Reflexion 提供什么 | 不应混淆什么 |
|---|---|---|---|
| Procedural Material Generation | 程序化材质图 (G) 与其参数 | 提供可闭环搜索与修正的 agent 机制 | 两篇论文没有材质图表示、renderer 或材质指标 |
| Context Optimization | 输入给 agent 的 (C),包括视觉分解、约束、历史与工具状态 | ReAct 展示 observation 如何进入当前 context;Reflexion 展示反馈如何压缩为跨 trial context | 单纯写更长 prompt 不等于 context optimization |
| Agent | 行动策略与搜索过程 | ReAct 是内环控制;Reflexion 是外环经验更新 | 重复调用模型但不保存可用经验,不是 Reflexion |
建议的双环架构
ReAct 内环 action space
建议将动作限制为 typed API:add_node(type)、connect(src, dst, slot)、set_param(node, key, value)、render(view, maps)、inspect_graph()、finish()。Observation 至少包含编译错误、节点图摘要、各通道渲染、图像指标与预算状态。
Reflexion 外环 memory
不要保存泛化的“继续优化”。Reflection 应固定为四字段:失败证据、归因尺度、应修改的图结构、下一次禁止重复的操作。示例:宏观砖缝位置已对齐,但 roughness 高频缺失;原因是同一噪声同时承担高度与粗糙度;下一次保留宏观 height 分支,新增独立 micro-noise 进入 roughness;禁止整体提高对比度。
Evaluator 设计
材质 evaluator 应是多目标而非单一 CLIP 相似度:
其中结构项评估大尺度布局与重复规律,appearance 项评估参考图像一致性,physical 项检查法线、粗糙度与高度的合理性,compile 项是硬约束,budget 项惩罚节点数、渲染时长与无效 action。权重需要在开发集上确定,不能由论文直接给出。
可发表的实验设计
最小 2 × 2 × 2 因子实验
| 因子 | 对照 | 处理 | 回答的问题 |
|---|---|---|---|
| Context | 原始图像加通用 instruction | Context Optimizer 生成 (C^{\ast}) | 视觉分解是否改善图搜索起点 |
| Inner loop | 一次性生成完整节点图 | ReAct 式工具与渲染闭环 | observation 是否改善单次轨迹 |
| Outer loop | 独立 retry 或最近 trajectory | Reflexion 式语言经验 memory | 跨尝试提升是否来自反思而非更多采样 |
必须报告的指标
建议同时报告 first-attempt success、best-of-k、cumulative success by trial、reward AUC、每次成功的 renderer calls、token cost、wall time、graph validity、节点数、参数可编辑性,以及分尺度的结构与外观指标。仅报告 best-of-k 会掩盖 agent 的学习效率。
关键消融
- 完整 reflection 对比只保存上一次 trajectory。
- 语言 reflection 对比直接保存标量 reward 与像素差图。
- 全局单分数对比尺度分解 evaluator。
- 最近 1、3、全部 memory 对比检索式 memory。
- 同一 Actor 下独立 retry 对比携带 memory 的 retry。
- oracle evaluator 对比自动 evaluator,测量 evaluator false positive 对性能的影响。
References
- Yao, S. et al. ReAct: Synergizing Reasoning and Acting in Language Models. ICLR 2023. arXiv v3 为 camera ready。
- ReAct authors. Official project page. 论文、示例与代码入口。
- Yao, S. et al. Official ReAct repository. GPT-3 notebooks、prompts 与环境封装。
- Shinn, N. et al. Reflexion: Language Agents with Verbal Reinforcement Learning. NeurIPS 2023 official proceedings.
- Shinn, N. et al. Reflexion arXiv record. 正文与 appendix。
- Shinn, N. et al. Official Reflexion repository. 代码、运行日志与数据。
- Yang, Z. et al. HotpotQA. EMNLP 2018.
- Thorne, J. et al. FEVER. NAACL 2018.
- Shridhar, M. et al. ALFWorld. ICLR 2021.
- Yao, S. et al. WebShop. NeurIPS 2022.
- Chen, M. et al. HumanEval. 2021.
- Austin, J. et al. Mostly Basic Python Problems. 2021.
证据分级:带“论文事实”的内容来自原文、附录或官方代码;“综合对照”是对两篇论文机制的并列解释;“课题建议”是面向程序化材质研究的迁移设计,不属于原论文贡献。无法从公开资料核实的数值均明确标为未报告。