Reflexion:语言 Agent 的语言强化学习

原文:Reflexion: Language Agents with Verbal Reinforcement Learning
作者:Noah Shinn 等
发表:NeurIPS 2023
翻译整理:2026-06-16


核心问题

传统强化学习需要更新模型权重——成本高、周期长、需要大量训练数据。

Reflexion 提出的问题:能不能让 Agent 通过「语言反思」而非「权重更新」来从错误中学习?

答案:可以。


核心机制

Reflexion 框架让语言模型通过语言强化进行学习,核心流程如下:

第 1 轮
  Agent 执行任务
    ↓
  接收环境反馈(数值分数 or 自然语言描述)
    ↓
  [反思步骤] Agent 用自然语言分析失败原因,生成"反思文本"
    ↓
  反思文本存入【情景记忆缓冲区(Episodic Memory Buffer)】

第 2 轮
  加载历史反思文本(注入上下文)
    ↓
  Agent 基于反思文本执行任务(避免上次错误)
    ↓
  ... 循环迭代

关键点:这是通过上下文注入积累经验,而不是梯度下降更新权重。两者根本不同。


三个核心组件

组件 1:Actor(行动者)

执行实际任务的 LLM,接受任务输入,产生行动或输出。可以是任何语言模型(GPT-4、Claude 等)。

组件 2:Evaluator(评估者)

对 Actor 的输出进行评分,提供反馈信号。反馈形式灵活:

  • 数值分数:如代码测试通过率(0/1 或百分比)
  • 自然语言:如「这段代码有逻辑错误,条件判断反了」

组件 3:Self-Reflection(自我反思)

接收 Evaluator 的反馈,生成语言反思文本,存入记忆缓冲区。这是 Reflexion 最关键的创新。

反思文本示例

上一次尝试失败了,因为我在处理边界情况时没有考虑空列表的情况。
下次需要在函数开始时先检查列表是否为空,再进行排序操作。

情景记忆缓冲区的设计

缓冲区存储历次反思文本,在下一轮任务开始时注入上下文。

滑动窗口机制:由于上下文长度有限,缓冲区通常只保留最近 1-3 条反思(滑动窗口)。更早的反思被丢弃,只保留最新的经验教训。

设计权衡

  • 保留太少:容易遗忘早期经验,重犯旧错误
  • 保留太多:上下文被反思文本占满,挤压任务本身的空间

实践中 1-3 条是较好的平衡点。


适用的反馈类型

Reflexion 对反馈类型高度灵活:

反馈来源示例
代码测试单元测试通过/失败
环境信号游戏得分、任务完成状态
外部评估模型另一个 LLM 评估输出质量
人工反馈用户标注输出是否正确

实验结果

论文在三类任务上验证了 Reflexion:

任务类型验证场景
顺序决策多步骤游戏环境
代码生成HumanEval 编程基准
语言推理多步推理问题

所有任务上,Reflexion 相比不使用反思机制的基线均有显著提升。

论文报告的数字(注意:该数字在对抗性验证中未通过独立核实,仅供参考):

在 HumanEval 编程基准上报告了 91% pass@1,论文称超越 GPT-4 基线(80%)。

验证建议:不依赖具体数字,而关注「反思机制带来提升」这一方向性结论——该结论本身已被多轮验证确认。


与传统强化学习的对比

维度传统 RLReflexion
学习方式梯度下降更新权重语言反思注入上下文
计算成本高(需要训练)低(只是推理)
数据需求大量少(自产反思)
可解释性低(权重变化不透明)高(反思文本可读)
适用范围固定任务任意语言任务
持久性永久(模型权重)临时(上下文窗口)

核心优势:Reflexion 是一种轻量级的自我改进机制,无需任何微调基础设施即可让 Agent 从错误中学习。


局限性

  1. 记忆不持久:反思文本存在上下文中,会话结束即消失。要跨会话保持记忆,需要配合外部存储
  2. 自我强化错误风险:如果 Agent 对失败原因判断错误,错误的反思会被存入缓冲区,强化错误行为
  3. 上下文容量限制:长任务中,反思文本和任务内容争夺有限的上下文空间

核心价值

Reflexion 证明了一个重要命题:语言模型可以通过语言本身进行自我改进,不需要更新参数

这为构建「能从失败中学习的 Agent」提供了一条工程上可行的轻量路径,是目前最被广泛引用的 Agent 自我改进机制之一。