|
|
|
@ -1,3 +1,69 @@
|
|
|
|
|
# Reflexion
|
|
|
|
|
# 反思
|
|
|
|
|
|
|
|
|
|
This page needs a translation! Feel free to contribute a translation by clicking the `Edit this page` button on the right.
|
|
|
|
|
Reflexion 是一个通过语言反馈来强化基于语言的 Agent 的框架,根据 [Shinn 等人(2023 年)](https://arxiv.org/pdf/2303.11366.pdf) 的说法,“反思是一种 ‘语言’ 强化的新范式,它将策略参数化为与 LLM 参数选择配对的代理的记忆编码。
|
|
|
|
|
|
|
|
|
|
从高层次来看,Reflexion 将来自环境的反馈(可以是自由形式的语言或标量)转换为语言反馈,也称为自我反思,这作为上下文提供给下一轮 LLM Agent。这有助于代理快速有效地从先前的错误中学习,从而在许多高级任务上提高性能。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
!["Reflexion Framework"](../../img/research/reflexion.png)
|
|
|
|
|
|
|
|
|
|
如上图所示,Reflexion 包括三个不同的模型:
|
|
|
|
|
|
|
|
|
|
- **An Actor**: 基于状态观察生成文本和动作。演员根据环境采取行动并接收观察结果,产生轨迹。[Chain-of-Thought (CoT)](https://www.promptingguide.ai/techniques/cot) 和 [ReAct](https://www.promptingguide.ai/techniques/react) 被用作演员模型。还添加了一个记忆组件,以为代理提供额外的上下文。
|
|
|
|
|
- **An Evaluator**: 评分由 Actor 生成的输出。具体来说,评估者将生成的轨迹(也称为短期记忆)作为输入,并输出奖励分数。根据任务的不同(LLMs 和基于规则的启发式用于决策任务),使用不同的奖励函数。
|
|
|
|
|
- **Self-Reflection**: 生成用于帮助演员自我改进的语言强化提示。LLM 扮演这个角色,并为未来的试验提供有价值的反馈。为了生成具体和相关的反馈,还将奖励信号、当前轨迹和其持久性记忆纳入考虑。这些经验(存储在长期记忆中)被代理用来快速改进决策。
|
|
|
|
|
|
|
|
|
|
总的来说,Reflexion 过程的关键步骤是 a) 定义任务,b) 生成轨迹,c) 评估,d) 进行反思,e) 生成下一个轨迹。下图展示了 Reflexion 代理如何学习通过迭代优化其行为来解决各种任务,如决策、编程和推理。Reflexion 通过引入自我评估、自我反思和记忆组件扩展了 ReAct 框架。
|
|
|
|
|
|
|
|
|
|
!["Reflexion Examples"](../../img/research/reflexion-examples.png)
|
|
|
|
|
|
|
|
|
|
## 结果
|
|
|
|
|
|
|
|
|
|
实验结果表明,Reflexion 代理在决策型 AlfWorld 任务、HotPotQA 推理问题和 HumanEval Python 编程任务上显著提高了性能。
|
|
|
|
|
|
|
|
|
|
在顺序决策(AlfWorld)任务上进行评估时,ReAct + Reflexion 使用启发式和 GPT 进行二分类的自我评估技术显著优于仅使用 ReAct,完成了 130/134 个任务。
|
|
|
|
|
|
|
|
|
|
!["Reflexion ALFWorld Results"](../../img/research/reflexion-alfworld.png)
|
|
|
|
|
|
|
|
|
|
Reflexion 在多个学习步骤上显著优于所有基线方法。对于仅推理的情况以及当添加包含最近轨迹的情节性记忆时,Reflexion + CoT 分别优于仅 CoT 和带有情节性记忆的 CoT。
|
|
|
|
|
|
|
|
|
|
!["Reflexion ALFWorld Results"](../../img/research/reflexion-hotpotqa.png)
|
|
|
|
|
|
|
|
|
|
在 Python 和 Rust 代码编写方面,Reflexion 总体上优于以往的最先进方法,包括 MBPP、HumanEval 和 Leetcode Hard。
|
|
|
|
|
|
|
|
|
|
!["Reflexion ALFWorld Results"](../../img/research/reflexion-programming.png)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 何时使用 Reflexion?
|
|
|
|
|
|
|
|
|
|
Reflexion 最适用于以下情况:
|
|
|
|
|
|
|
|
|
|
1. **代理需要通过试错来学习**: Reflexion 旨在帮助代理通过反思过去的错误并将这些知识纳入未来的决策中来提高其性能。这使其非常适用于代理需要通过试错学习的任务,如决策、推理和编程。
|
|
|
|
|
|
|
|
|
|
2. **传统强化学习方法不切实际**: 传统的强化学习(RL)方法通常需要大量的训练数据和昂贵的模型微调。Reflexion 提供了一种轻量级的替代方法,不需要微调基础语言模型,因此在数据和计算资源方面更加高效。
|
|
|
|
|
|
|
|
|
|
3. **需要细致的反馈**: Reflexion 利用语言反馈,相比传统的强化学习中使用的标量奖励,语言反馈可能更加细致和具体。这使代理能够更好地理解自己的错误,并在随后的试验中进行更有针对性的改进。
|
|
|
|
|
|
|
|
|
|
4. **可解释性和显式记忆很重要**: Reflexion 提供了比传统强化学习方法更可解释和显式的情节性记忆形式。代理的自我反思存储在其记忆中,使得更容易分析和理解其学习过程。
|
|
|
|
|
|
|
|
|
|
Reflexion 在以下任务中非常有效:
|
|
|
|
|
|
|
|
|
|
- **顺序决策**: Reflexion agents improve their performance in AlfWorld tasks, which involve navigating through various environments and completing multi-step objectives.
|
|
|
|
|
- **推理**: Reflexion improved the performance of agents on HotPotQA, a question-answering dataset that requires reasoning over multiple documents.
|
|
|
|
|
- **编程**: Reflexion 代理在 HumanEval 和 MBPP 等基准测试中编写了更好的代码,在某些情况下达到了最先进的结果。
|
|
|
|
|
|
|
|
|
|
以下是 Reflexion 的一些局限性:
|
|
|
|
|
|
|
|
|
|
- **依赖于自我评估能力**: Reflexion 依赖于代理准确评估自己的表现并生成有用的自我反思的能力。这可能具有挑战性,特别是对于复杂任务,但随着模型能力的不断提升,预期 Reflexion 会随着时间的推移变得更加优秀。
|
|
|
|
|
- **长期记忆限制**: Reflexion 使用滑动窗口的最大容量,但对于更复杂的任务,使用高级结构(如矢量嵌入或 SQL 数据库)可能更有优势。
|
|
|
|
|
- **代码生成的限制**: 在指定准确的输入输出映射方面存在限制,例如,非确定性生成器函数和受硬件影响的函数输出。
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
*图源:[Reflexion: Language Agents with Verbal Reinforcement Learning](https://arxiv.org/pdf/2303.11366.pdf)*
|
|
|
|
|
*图源:[Reflexion: Language Agents with Verbal Reinforcement Learning](https://arxiv.org/pdf/2303.11366.pdf)*
|
|
|
|
|
|
|
|
|
|
## References
|
|
|
|
|
|
|
|
|
|
- [Reflexion: Language Agents with Verbal Reinforcement Learning](https://arxiv.org/pdf/2303.11366.pdf)
|
|
|
|
|
- [Can LLMs Critique and Iterate on Their Own Outputs?](https://evjang.com/2023/03/26/self-reflection.html)
|