大型语言模型 (LLM) 正在突破聊天机器人的限制。我们越来越多地看到它们为自主智能体提供支持,这些智能体可以与软件交互、玩游戏、浏览网页以完成复杂目标。但有个问题: 当这些智能体犯错时,它们如何学会不再重蹈覆辙?
在人工智能领域,传统的答案是强化学习 (RL) ——一种试错过程,智能体因良好行为而获得奖励,因不良行为受到惩罚。然而,将传统的强化学习应用于庞大的大型语言模型,过程极其缓慢且计算成本高昂,通常需要历时数月的训练并消耗巨大的 GPU 资源来微调数十亿个参数。因此,如今大多数 LLM 智能体只能依靠提示词中少量精心设计的示例进行学习。
如果有一种更好的方法呢?
如果智能体几乎可以即时地从错误中学习,而无需任何昂贵的重新训练呢?
这正是这篇引人入胜的新论文——《Reflexion: 通过语言强化学习的语言智能体》背后的核心思想。研究人员提出了一个框架,其中 LLM 智能体不仅仅是尝试、失败、再重试,而是尝试、失败,停下来思考失败的原因,然后依靠这种自我反思来指导下一次尝试。
这个简单而强大的**“语言强化”**理念带来了惊人的成果。在一个具有挑战性的编码基准测试中,一个 Reflexion 智能体取得了 91% 的 pass@1 准确率,大幅超越 GPT-4 的 80% 得分。
让我们深入探讨。
从经验中学习的难题
想象一下,你让一个由 LLM 驱动的智能体在文本冒险游戏中执行一个任务,比如:
任务: “把平底锅洗干净,然后放到台面上。”
智能体可能会生成:
> take pan from stoveburner
观察: 没有任何反应。> clean pan with sink
观察: 没有任何反应。
智能体失败了。一个标准智能体可能只会用一种略有不同的随机方法再试一次,可能还会重复同样的错误。它收到一个直接的“失败”信号,但在信号分配 (credit assignment) 上存在困难——即弄清长序列中哪一步导致了失败。
在这个例子中,智能体幻觉出平底锅在炉子上,但实际上并没有。最后的“失败”信号并没有告诉它,它最初的假设就是错的。
传统的强化学习会通过运行成千上万甚至数百万次试验来解决这个问题,逐步将模型的内部权重从错误选择上偏移。但 Reflexion 提出: 我们能否更高效地做到这一点,像人类一样?
在人类失败时,我们常常会反思:
“啊,我明白了——平底锅不在炉子上。下次,我应该先环顾四周找到平底锅。”
Reflexion 的设计正是为了赋予 LLM 智能体这种能力。
图 1: Reflexion 在决策、编程和推理任务中的示例。每个示例都展示了任务是如何被尝试、评估,并提炼成有价值、可复用的反思。
Reflexion 框架: 一个三位一体的思维模型
作者将 Reflexion 设计成一个模块化系统,由三个基于 LLM 的组件循环运作:
- Actor (行动者) – 执行者
- Evaluator (评估者) – 批评者
- Self-Reflection model (自我反思模型) – 思考者
整个过程的核心是记忆,它让智能体能够在多次尝试中不断进步。
图 2: Reflexion 架构及其迭代式强化算法。
1. Actor —— 执行者
Actor 与环境进行交互。它是一个被提示生成文本和动作以解决任务的 LLM,比如在网页导航场景中点击按钮或编写 Python 代码。Actor 的决策基于当前状态以及来自先前尝试的记忆。团队利用了如 思维链 (Chain-of-Thought, CoT) 和 ReAct 等先进的提示策略来促进推理和规划。
2. Evaluator —— 批评者
当 Actor 完成一次尝试后,Evaluator 会对其表现进行打分。根据不同任务,Evaluator 可能采用:
- 精确匹配: 最终答案是否与标准答案一致? (问答任务)
- 启发式方法: 在决策环境中检测循环或过多步骤。
- 基于 LLM 的判断: 提示另一个 LLM 来评估输出质量。
- 单元测试: 针对一套检查项运行生成的代码 (编程任务) 。
输出以简单的成功/失败或标量分数表示。
3. 自我反思模型 —— 思考者
当一次尝试失败时,Reflexion 会调用自我反思模型。这个 LLM 会看到:
- Actor 的轨迹 (短期记忆)
- 评估信号
- 过往的反思 (长期记忆)
它会生成一段简洁、自然的语言摘要,解释问题出在哪里并建议如何改进。
例如:
“我试图从炉子上拿起平底锅,但那里并没有平底锅。这导致了失败的操作。下次,我应该先探索房间,找到平底锅后再进行交互。”
记忆与学习循环
这些反思会存储在长期记忆缓冲区中。
循环过程如下:
- 第
t
次尝试 – Actor 使用指令 + 记忆创建轨迹τ_t
- 评估 – Evaluator 对
τ_t
进行评分 →r_t
- 反思 – 如果失败,自我反思模型生成
sr_t
- 更新记忆 – 将
sr_t
添加到记忆 (保留最近 1–3 条) - 重复 – Actor 在更新后的上下文下再次尝试
经过几轮尝试,Actor 就能学会更有效的新策略——而无需调整权重。
对 Reflexion 的实证检验
研究人员在三个领域测试了 Reflexion:
(1) 序列决策,(2) 推理,(3) 编程。
1. 序列决策: ALFWorld
ALFWorld 是一套基于文本的模拟环境,智能体在其中完成家务任务,如移动物品或清洁物体。基线智能体使用 ReAct。
图 3: Reflexion 在 ALFWorld 中显著提升了成功率,并几乎消除了“幻觉”导致的失败模式。
基线 ReAct 模型成功率停留在约 75%,且始终无法解决一些任务;而 Reflexion 智能体在 12 轮尝试后攀升至 97% 成功率。
自我反思能够诊断出诸如*“我以为我拿到了刀,其实并没有”*这样的错误,大幅减少了幻觉现象。
2. 推理: HotPotQA
HotPotQA 要求在维基百科内容基础上进行多跳推理。团队在 CoT 和 ReAct 智能体上都测试了 Reflexion。
图 4: 在所有设置中,Reflexion 智能体都能持续改进,而基线模型则原地踏步。
关键发现:** 基线模型在后续尝试中从未解决任何先前失败的任务。** 而 Reflexion 智能体则稳步学习。
消融研究表明,仅提供上次失败轨迹 (情景记忆) 带来的提升甚微,而引入显式的自我反思则带来显著增益——确认反思是核心要素。
3. 编程: 实现业界领先成果
编程任务包括 HumanEval、MBPP 以及全新的 LeetcodeHardGym 基准。Reflexion 智能体会先为任务生成单元测试,然后再编写能通过这些测试的代码。
表 1: Reflexion 在 HumanEval 的 Python 和 Rust 测试中均创下新 SOTA 记录。
在 HumanEval (Python) 上: Reflexion 达到 91.0% pass@1,超过 GPT-4 的 80.1%。
但在 MBPP 上表现略逊。为什么?
下面的分析揭示了瓶颈。
表 2: 较高的假阳性率 (即测试套件薄弱) 限制了 MBPP 的表现。
对于 MBPP (Python) ,Reflexion 的假阳性率高达 16.3%——测试套件过于薄弱,让错误代码漏网。相比之下,HumanEval 的假阳性率仅 1.4%。这说明反思的质量受评估准确性限制。
为证明两个核心组件的重要性,团队对困难的 Rust 题进行了消融实验。
表 3: 自我反思和测试生成对性能提升同等重要。
结果:
- 无自我反思: 停留在基线准确率 (60%) 。
- 无测试生成: 准确率跌至基线以下 (52%) 。
- 完整 Reflexion: 准确率 68%。
缺少有据可依的反馈 (测试) 或结构化推理 (反思) ,学习就会崩溃。
结论: 通向更智能体的类人之路
Reflexion 是一种轻量、可解释、有效的方法,让 LLM 智能体变得更聪明:
- 高效性 – 无需更新权重,比强化学习微调更便宜、更快。
- 有效性 – 在推理和代码生成方面达到 SOTA 水平。
- 可解释性 – 我们可通过阅读智能体的自我反思来理解其为何改变行为。
局限性:
该方法高度依赖 LLM 生成有用反思的能力。评估器不佳 (或测试套件薄弱) 将限制性能——正如 MBPP 案例所示。此外,在缺乏创造性探索时,智能体可能陷入局部最优。
尽管存在这些挑战,Reflexion 证明了通往更强大 AI 智能体的路径可能不仅仅是扩大模型规模,而在于赋予它们健全的类人机制,去推理、反思并从经验中学习。如此,我们或许能解锁能够自我改进的智能体——不仅在性能上,更在透明度与符合人类意图方面取得进步。