大型语言模型 (LLM) 在各种任务上已经表现出前所未有的性能。然而,这些 SOTA 方法通常需要对已定义的状态空间进行模型微调、策略优化等操作。由于缺乏高质量的训练数据、定义良好的状态空间,优化模型实现起来还是比较难的。此外,模型还不具备人类决策过程所固有的某些品质,特别是从错误中学习的能力。
不过现在好了,在最近的一篇论文中,来自美国东北大学、MIT 等机构的研究者提出 Reflexion,该方法赋予智能体动态记忆和自我反思的能力。
为了验证方法的有效性,该研究评估了智能体在 AlfWorld 环境中完成决策任务的能力,以及在 HotPotQA 环境中完成知识密集型、基于搜索问答任务的能力,在这两项任务的成功率分别为 97% 和 51%。
论文地址:https://arxiv.org/pdf/2303.11366.pdf
项目地址:https://github.com/GammaTauAI/reflexion-human-eval
如下图所示,在 AlfWorld 环境中,房间里摆设了各种物品,要求让智能体给出推理计划以拿到某件物体,下图上半部分由于智能体低效的计划而失败。经过反思后,智能体意识到错误,纠正推理轨迹,给出简洁的轨迹方式(如图下半部分)。
模型反思有缺陷的搜索策略:
这篇论文表明,你可以通过要求 GPT-4 反思「你为什么错了?」并为自己生成一个新的提示,将这个错误原因考虑在内,直到结果正确,将 GPT-4 的性能提高惊人的 30%。
Reflexion 智能体的整体架构如下图 1 所示,其中 Reflexion 利用 ReAct(Yao et al., 2023)。在第一次试验中,智能体从构成初始查询的环境中获得任务,然后智能体执行由 LLM 生成的一系列动作,并从环境中接收观察和奖励。对于提供描述型或持续型奖励的环境,该研究将输出限制为简单的二元成功状态以确保适用性。
在每个动作 a_t 之后,智能体会计算一个启发性函数 h,如下图所示
这个启发性函数旨在检测智能体产生信息幻觉(即虚假或错误的信息)或效率低下,并「告诉」智能体何时需要反思(reflexion),其中 t 是 time step,s_t 是当前状态,Ω 表示重复动作循环的次数,ε 表示执行动作的最大总数,[a_o, o_0 . . . , a_(t−1), o_(t−1)] 代表轨迹历史。repeat 是一个简单的函数,用于确定产生相同结果的重复动作循环的次数。
如果函数 h 告诉智能体需要反思,那么智能体会查询 LLM 以反映其当前任务、轨迹历史和上次奖励,然后智能体在后续试验中会重置环境再重试。如果函数 h 没有告诉智能体需要反思,那么智能体会将 a_t 和 o_t 添加到其轨迹历史记录中,并向 LLM 查询下一个动作。
如果如果启发式 h 建议在 time step t 时进行反思,则智能体会根据其当前状态 s_t、最后的奖励 r_t、先前的动作和观察 [a_0, o_0, . . . , a_t, o_t],以及智能体现有的工作存储 mem,启动一个反思过程。
反思的目的是通过反复试验帮助智能体纠正「幻觉」和低效率问题。用于反思的模型是一个使用特定的失败轨迹和理想的反思示例来 prompt 的 LLM。
智能体会迭代地进行上述反思过程。在实验中,该研究设置在智能体内存中存储的反思最多为 3 次,这是为了避免查询超出 LLM 的限制。以下几种情况,运行会终止:
AlfWorld 提供了六种不同的任务和 3000 多个环境,这些任务要求智能体理解目标任务,制定子任务的顺序计划,并在给定环境中执行操作。
该研究在 134 个 AlfWorld 环境中测试智能体,任务包括寻找隐藏物体(例如,在抽屉里找到水果刀)、移动物体(例如,将刀移到砧板上 ),以及用其他对象来操纵另一个对象(例如,在冰箱中冷藏西红柿)。
在没有反思的情况下,智能体的准确率为 63%,之后加入 Reflexion 进行对比。结果显示,智能体在 12 次试验中能够处理好 97% 的环境,在 134 项任务中仅有 4 项没有解决。
接下来的实验是在 HotPotQA 中进行了,它是一个基于维基百科的数据集,包含 113k 个问答对,主要用来挑战智能体解析内容和推理的能力。
在 HotpotQA 的 100 个问答对测试中,该研究将基础智能体和基于 Reflexion 的智能体进行比较,直到它们在连续的试验中无法提高准确性。结果显示基础智能体并没有性能提高,在第一次试验中,基础智能体准确率为 34%,Reflexion 智能体准确率为 32%,但在 7 次试验后,Reflexion 智能体表现大幅改善,性能提升接近 30%,大大优于基础智能体。
类似地,在测试模型编写代码的能力时,加入 Reflexion 的 GPT-4 也显著优于常规的 GPT-4:
以上就是当GPT-4反思自己错了:性能提升近30%,编程能力提升21%