Reflexion
Reflexion 是一个通过语言反馈强化基于语言的智能体的框架。根据 Shinn 等人 (2023)(在新标签页中打开) 的说法,“Reflexion 是一种新的‘语言’强化范式,它将策略参数化为智能体的记忆编码与 LLM 参数选择的配对。”
从宏观上看,Reflexion 将来自环境的反馈(可以是自由形式的语言或标量)转换为语言反馈,也称为自我反思,这种反馈将作为 LLM 智能体在下一回合的上下文提供。这有助于智能体快速有效地从过去的错误中学习,从而提高在许多高级任务上的性能。
如图所示,Reflexion 由三个不同的模型组成:
- 执行器 (Actor):根据状态观察生成文本和行动。执行器在环境中采取行动,并接收到导致轨迹的观察结果。思维链 (CoT)(在新标签页中打开) 和 ReAct(在新标签页中打开) 被用作执行器模型。还添加了一个记忆组件,为智能体提供额外的上下文。
- 评估器 (Evaluator):对执行器产生的输出进行评分。具体来说,它以生成的轨迹(也称为短期记忆)作为输入,并输出一个奖励分数。根据任务使用不同的奖励函数(LLM 和基于规则的启发式方法用于决策任务)。
- 自我反思模型 (Self-Reflection):生成语言强化提示,帮助执行器进行自我改进。这个角色由 LLM 完成,并为未来的尝试提供有价值的反馈。为了生成特定且相关的反馈(也存储在记忆中),自我反思模型利用奖励信号、当前轨迹及其持久记忆。这些经验(存储在长期记忆中)被智能体利用,以快速改进决策。
总之,Reflexion 过程的关键步骤是 a) 定义任务,b) 生成轨迹,c) 评估,d) 执行反思,以及 e) 生成下一轨迹。下图展示了 Reflexion 智能体如何学习迭代优化其行为以解决各种任务,例如决策、编程和推理。Reflexion 通过引入自我评估、自我反思和记忆组件来扩展 ReAct 框架。
结果
实验结果表明,Reflexion 智能体显著提高了在决策类 AlfWorld 任务、HotPotQA 中的推理问题以及 HumanEval 上的 Python 编程任务的性能。
在序列决策 (AlfWorld) 任务上进行评估时,ReAct + Reflexion 使用启发式和 GPT 的二元分类自评估技术,完成了 134 个任务中的 130 个,显著优于 ReAct。
在多个学习步骤中,Reflexion 显著优于所有基线方法。仅进行推理时,Reflexion + CoT 优于仅使用 CoT;当添加包含最近轨迹的片段记忆时,Reflexion + CoT 分别优于仅使用 CoT 和带有片段记忆的 CoT。
如下表所示,Reflexion 在 MBPP、HumanEval 和 Leetcode Hard 上的 Python 和 Rust 代码编写方面普遍优于先前的最先进方法。
何时使用 Reflexion?
Reflexion 最适合以下情况:
-
智能体需要从试错中学习:Reflexion 旨在通过反思过去的错误并将这些知识融入未来的决策来帮助智能体提高性能。这使其非常适合需要智能体通过试错学习的任务,例如决策、推理和编程。
-
传统强化学习方法不切实际:传统强化学习 (RL) 方法通常需要大量的训练数据和昂贵的模型微调。Reflexion 提供了一种轻量级的替代方案,无需对底层语言模型进行微调,从而在数据和计算资源方面更高效。
-
需要细致入微的反馈:Reflexion 利用语言反馈,这比传统 RL 中使用的标量奖励更细致和具体。这使得智能体能够更好地理解其错误,并在随后的尝试中做出更有针对性的改进。
-
可解释性和显式记忆很重要:与传统 RL 方法相比,Reflexion 提供了一种更具可解释性和显式形式的片段记忆。智能体的自我反思存储在其记忆中,便于分析和理解其学习过程。
Reflexion 在以下任务中有效:
- 序列决策:Reflexion 智能体提高了它们在 AlfWorld 任务中的性能,这些任务涉及在各种环境中导航并完成多步目标。
- 推理:Reflexion 改进了智能体在 HotPotQA 上的性能,这是一个需要对多个文档进行推理的问答数据集。
- 编程:Reflexion 智能体在 HumanEval 和 MBPP 等基准测试上编写出更好的代码,在某些情况下取得了最先进的结果。
Reflexion 的一些局限性:
- 依赖于自我评估能力:Reflexion 依赖于智能体准确评估其性能并生成有用的自我反思的能力。这可能具有挑战性,特别是对于复杂任务,但预计随着模型的持续能力提升,Reflexion 会变得更好。
- 长期记忆限制:Reflexion 使用具有最大容量的滑动窗口,但对于更复杂的任务,使用向量嵌入或 SQL 数据库等高级结构可能更有优势。
- 代码生成局限性:在指定准确的输入-输出映射方面存在测试驱动开发局限性(例如,非确定性生成函数和受硬件影响的函数输出)。
图片来源:Reflexion: Language Agents with Verbal Reinforcement Learning(在新标签页中打开)
在我们的新 AI 课程中了解更多高级提示方法。立即加入!(在新标签页中打开) 使用代码 PROMPTING20 可额外享受 8 折优惠。