分享
自我反思(Reflexion)
输入“/”快速插入内容
自我反思(Reflexion)
自我反思是一个通过语言反馈来强化基于语言的智能体的框架。根据
Shinn et al. (2023)(opens in a new tab)
,“自我反思是一种‘口头’强化的新范例,它将策略参数化为智能体的记忆编码与 LLM 的参数选择配对。”
在高层次上,自我反思将来自环境的反馈(自由形式的语言或者标量)转换为语言反馈,也被称作
self-reflection
,为下一轮中 LLM 智能体提供上下文。这有助于智能体快速有效地从之前的错误中学习,进而提升许多高级任务的性能。
如上图所示,自我反思由三个不同的模型组成:
•
参与者(Actor)
:根据状态观测量生成文本和动作。参与者在环境中采取行动并接受观察结果,从而形成轨迹。
链式思考(CoT)(opens in a new tab)
和
ReAct(opens in a new tab)
被用作参与者模型。此外,还添加了记忆组件为智能体提供额外的上下文信息。
•
评估者(Evaluator)
:对参与者的输出进行评价。具体来说,它将生成的轨迹(也被称作短期记忆)作为输入并输出奖励分数。根据人物的不同,使用不同的奖励函数(决策任务使用LLM和基于规则的启发式奖励)。
•
自我反思(Self-Reflection)
:生成语言强化线索来帮助参与者实现自我完善。这个角色由大语言模型承担,能够为未来的试验提供宝贵的反馈。自我反思模型利用奖励信号、当前轨迹和其持久记忆生成具体且相关的反馈,并存储在记忆组件中。智能体利用这些经验(存储在长期记忆中)来快速改进决策。
总的来说,自我反思的关键步骤是a)定义任务,b)生成轨迹,c)评估,d)执行自我反思,e)生成下一条轨迹。下图展示了自我反思的智能体学习迭代优化其行为来解决决策、编程和推理等各种人物的例子。自我反思(Refelxion)通过引入自我评估、自我反思和记忆组件来拓展 ReAct 框架。
结果
实验结果表明,自我反思能够显著提高 AlfWorld 上的决策任务、HotPotQA 中的问题推理以及在 HumanEval 上的 Python 编程任务性能。
在序列决策 (AlfWorld) 任务上进行评估时,ReAct + Reflexion 用启发式和 GPT 的自我评估进行二元分类,完成了 130/134 项任务,显着优于 ReAct。
在仅仅几个学习步骤中,自我反思显著优于所有基线方法。仅对于推理以及添加由最近轨迹组成的情景记忆时,Reflexion + CoT 的性能分别优于仅 CoT 和具有情景记忆的 CoT。
如下表所示,在 MBPP、HumanEval 和 Leetcode Hard 上编写 Python 和 Rust 代码时,Reflexion 通常优于之前的 SOTA 方法。
何时自我反思?
自我反思最适合以下情况:
1.
智能体需要从尝试和错误中学习
:自我反思旨在通过反思过去的错误并将这些知识纳入未来的决策来帮助智能体提高表现。这非常适合智能体需要通过反复试验来学习的任务,例如决策、推理和编程。