Reflexion 是一种"语言强化学习"框架——不通过梯度更新模型权重,而是让 LLM Agent 通过语言形式的自我反思从失败中学习,将试错经验保存为文本记忆,在后续尝试中做出更好的决策。
ReAct、SayCan、Toolformer、HuggingGPT 等方法虽然展示了 LLM 作为决策核心的可行性,但面临一个根本问题:
人类通过反思失败来快速学习——不是调整大脑神经元的权重,而是通过语言形式的自我对话:"我上次做错了什么?下次应该如何改进?"
Reflexion 正是模仿这种机制——用语言反馈替代梯度更新。
核心创新!将稀疏的二元/标量奖励信号转化为丰富的语言反馈:
当前轨迹历史 τ = [a₀, o₀, ..., aᵢ, oᵢ]
类似人类对近期细节的记忆
Self-Reflection 生成的经验总结
滑动窗口限制(通常 Ω = 1-3 条经验)
类似人类从多次尝试中提炼的教训
| 任务 | 数据集 | 基线方法 | 评估信号 |
|---|---|---|---|
| 决策 | ALFWorld (134 环境) | ReAct | 二元成功/失败 + 启发式/GPT 评估 |
| 推理 | HotPotQA (100 题) | CoT / ReAct | 精确匹配答案评分 |
| 编程 | HumanEval / MBPP / LeetcodeHard | GPT-4 | 自生成单元测试 + 编译器 |
关键优势:eligible for pass@1——不依赖隐藏测试用例,完全自包含
典型错误模式:Agent 以为自己拿到了物品(幻觉),继续执行长轨迹,无法回溯。Reflexion 通过反思将长失败轨迹蒸馏为经验,彻底消除这类错误。
| 方法 | CoT only | CoT + Reflexion | ReAct only | ReAct + Reflexion |
|---|---|---|---|---|
| 成功率 | 无提升 | 显著提升 | 无提升 | 显著提升 |
关键发现:基线方法在后续尝试中完全无法提升(temperature=0.7),而 Reflexion 持续改进。
| 方法 | CoT (GT) | + EPM | + EPM + Reflexion |
|---|---|---|---|
| 性能 | 基线 | + 一定提升 | + 8% 绝对提升 |
结论:纯精炼(refinement-only)不如自我反思引导的精炼(self-reflection-guided refinement)。用第一人称写下的语言解释比单纯保留轨迹更有效。
| 基准 + 语言 | 前 SOTA | GPT-4 | Reflexion |
|---|---|---|---|
| HumanEval (Python) | 65.8 (CodeT + GPT-3.5) | 80.1 | 91.0 +10.9% |
| HumanEval (Rust) | — | 60.0 | 68.0 +8% |
| MBPP (Python) | 67.7 (CodeT + Codex) | 80.1 | 77.1 |
| MBPP (Rust) | — | 70.9 | 75.4 +4.5% |
| Leetcode Hard (Python) | — | 7.5 | 15.0 2× |
这是首个在 HumanEval 上突破 90% pass@1 的方法,超越了当时最强的 GPT-4(80%)。Reflexion 不是更强大的模型,而是更好的使用方式——同样的 GPT-4,通过自我反思循环,性能提升 11 个百分点。
Reflexion 在 MBPP Python 上略逊于 GPT-4 基线(77.1% vs 80.1%)。原因是:
| 方法 | 测试生成 | Self-Reflection | Pass@1 |
|---|---|---|---|
| Base model | ❌ | ❌ | 60% |
| 无测试生成 | ❌ | ✅ | 52% ↓ |
| 无 Self-Reflection | ✅ | ❌ | 60% 无提升 |
| Reflexion(完整) | ✅ | ✅ | 68% ↑ |
关键结论:无 Self-Reflection 的盲目试错在复杂任务(如 Rust)上完全无效。测试生成和代码编译能捕获语法/逻辑错误,但修复不反映这些提示——必须有语言形式的反思引导。
| 模型 | CoT (GT) 基线 | + Reflexion | 提升 |
|---|---|---|---|
| text-davinci-003 | 60% | 77% | +17% |
| gpt-3.5-turbo | 57% | 71% | +14% |
| GPT-4 | 68% | 80% | +12% |
| 模型 | ReAct 基线 | + Reflexion | 提升 |
|---|---|---|---|
| text-davinci-003 | 30% | 55% | +25% |
| gpt-3.5-turbo | 26% | 38% | +12% |
| GPT-4 | 39% | 51% | +12% |
StarChat-Beta(较小模型)的 Reflexion 与基线无差异(26% vs 26%)。
Self-Reflection 是强模型的涌现能力——模型必须足够大才能生成有用的自我纠正。
Reflexion 在 WebShop(电商网站导航)上完全失败:
Reflexion 本质上是策略优化,可能陷入非最优局部最小值:
| 方法 | Self-refine | Hidden constraints | Decision making | Binary reward | Memory |
|---|---|---|---|---|---|
| Self-Refine | ✅ | ✅ | ✅ | ❌ | ❌ |
| Beam search (Xie et al.) | ❌ | ✅ | ✅ | ❌ | ❌ |
| Reflexion | ✅ | ✅ | ✅ | ✅ | ✅ |
| 方法 | Test execution | Debugging | Self-generated tests | Multi-language | Self-reflection |
|---|---|---|---|---|---|
| AlphaCode | ✅ | ❌ | ❌ | ✅ | ❌ |
| CodeT | ✅ | ❌ | ✅ | ❌ | ❌ |
| Self-Debugging | ✅ | ✅ | ❌ | ❌ | ❌ |
| CodeRL | ✅ | ✅ | ❌ | ❌ | ❌ |
| Reflexion | ✅ | ✅ | ✅ | ✅ | ✅ |
Reflexion 将传统 RL 的标量奖励转化为语言形式的梯度信号。这不是比喻——语言反馈确实提供了具体的改进方向("我应该在找杯子之前先找台灯"),比 "Reward = 0" 更有信息量。
Reflexion 证明了不更新模型权重也能实现有效学习。这对于无法微调的闭源模型(如 GPT-4)意义重大——通过上下文学习 + 记忆,同样可以实现策略改进。
传统 RL 的黑盒策略难以诊断。Reflexion 的反思轨迹是人类可读的自然语言,可以:
Reflexion 启发了大量后续工作:
单轮推理+行动
无记忆,无学习
"思考 → 行动 → 观察" 一轮结束
多轮迭代+反思
长期记忆,持续学习
"尝试 → 失败 → 反思 → 再尝试"
Reflexion 不是替代 ReAct,而是增强 ReAct:
Reflexion 是首个通过语言反馈实现强化学习的通用框架。它不更新模型权重,而是让 LLM Agent 通过自我反思从失败中学习,将经验保存为文本记忆,在后续尝试中做出更好的决策。
最核心的贡献:
"Reflexion converts binary or scalar feedback from the environment into verbal feedback in the form of a textual summary, which is then added as additional context for the LLM agent in the next episode."
"This self-reflective feedback acts as a 'semantic' gradient signal by providing the agent with a concrete direction to improve upon."