Enabling Intelligent Interactions between an Agent and an LLM: A Reinforcement Learning Approach

论文提出的背景问题

  • 为什么需要引入LLM到强化学习任务中
    通过将LLM作为明确推理者,代理可以根据LLM提供的高级指令生成低级动作,并与目标环境进行交互,从而收集进一步的反馈。LLM的引入可以提高代理在处理复杂任务时的效率和准确性,同时为代理提供更多的决策支持和指导,从而增强代理的任务规划和执行能力。

  • 引入LLM后会引发什么问题

    1. agent与大模型交互非常耗费时间
    2. 大模型需要很大的部署空间,以至于只能运行在云服务器上
    3. 使用商业大模型会很耗钱
    4. 不足够的交互又容易导致LLM对环境理解不彻底从而导致不可预知的情况

那么什么时候才需要去query LLM获取指导就至关重要了
过多的询问会引起资源损耗
过少的询问会让任务失败

如何做呢

将agent做出决策视为一个马尔可夫决策过程,并且使用选项框架作为策略的更高级的封装
选项就是一个三元组<起始状态,策略,终止状态>,agent依据当前状态和选项集合选择选项,然后依据选项集合中的策略行动直到终止状态
这样agent能在更高的层次对动作进行规划

LLM根据agent给的环境的观测以及要完成的任务返回一系列的选项,agent依据选项进行动作。
一些相关工作

  • 在每个任务开始时规划整个选项序列这样就不需要进一步与LLM交互,但一次生成良好的序列在复杂场景下是困难的
  • 当任务失败的时候再和LLM交互,但这种方法依赖硬编码的故障检测
  • 必要的时候向人类寻求帮助

使用Planner-Actor-Mediator框架

类似于PlannerActor-Reporter框架,但是使用reporter框架的agent在每个时间步都会与LLM交互,无论是否获取新信息,以减少对硬编码终止条件的需要

然后总体运行过程呢就是mediator框架根据agent的发现和询问策略来判断当前是否需要对LLM进行提问
如果需要就会将当前的发现翻译成文本并交给Planner(也就是大模型),大模型则会给出一系列的选项交给actor,actor根据当前状态以及选项来执行动作;如果不需要询问,则由之前LLM给出的序列选项中选择下一个选项交给Actor再继续执行。

各个模块

  • planner
    使用预训练的LLM,接受agent发现的文本描述,并给出高层级的技能指导给actor(也就是选项序列)
  • actor
    根据planner给出的高层级指导选项,使用低层级的行动来对齐(也就是去执行),在作者的方法中选项策略是使用人类专家知识来硬编码的(预先定义完的),当然也可以使用基于选项的奖励函数对策略进行一个训练以完成更复杂的任务。
  • mediator
    由两个子模块组成,一个是询问策略,另一个是翻译模块
    询问策略用来是否要向planner(基于当前发现和当前的选项)进行询问
    翻译模块用来将发现翻译成文本。首先,我们使用模拟平台的内置接口提取在本地代理视野内观察到的物体的 ID,例如钥匙、门和盒子。接下来,我们将这些信息输入到我们预定义的模板中,并以固定格式输出到LLM。

学习询问策略

主要思想是:只有在发现新的有价值的信息时才有必要和LLM进行交互,以避免不必要的与LLM的交互.
将向LLM询问这一过程使用MDP建模,其中状态是当前agent的发现和当前的options,动作空间是询问或者不询问,奖励是产生不必要询问时会生成惩罚(当mediator发出询问请求,同时LLM给出的options又与当前执行的options接近则获得惩罚)

文章中的算法主要训练询问策略,actor中的动作选择策略可以预训练也可以硬编码

关于选项策略与动作策略的区别

假设有一个场景,其中代理(agent)位于地图的左上角,钥匙位于左下角,门位于右下角。以下是如何设计LLM的选项序列和对应的三元组,以及Agent如何根据这些选项进行动作选择:

选项序列
选项1: 导航到钥匙(Navigate to Key)
启动集 :可以从任何位置开始,但以左上角为例。
选项策略 :使用路径规划算法,计算从当前位置(左上角)到钥匙位置(左下角)的最佳路径。
终止条件 :当代理到达钥匙的位置时,此选项结束。
选项2: 拾起钥匙并导航到门(Pick Up Key and Navigate to Door)
启动集 :代理位于钥匙的位置,钥匙未被拾起。
选项策略 :首先拾起钥匙,然后使用路径规划算法计算从钥匙位置(左下角)到门的位置(右下角)的路径。
终止条件 :当代理使用钥匙打开门并通过门时,此选项结束。
Agent的动作选择策略
执行选项1:导航到钥匙

具体动作:Agent首先需要确定从当前位置(左上角)到钥匙位置(左下角)的具体步骤。这可能包括计算向南移动若干格,每一步都需要环境的实时反馈,如检测障碍物并相应地调整路径。
实时调整:在移动过程中,Agent根据实时的环境变化(例如突出的障碍物)调整其行走策略,确保以最有效的方式到达钥匙位置。
执行选项2:拾起钥匙并导航到门

拾起钥匙:到达钥匙位置后,Agent执行拾起钥匙的动作。这可能涉及发送一个简单的拾取指令给执行器。
导航到门:钥匙拾起后,Agent需要计划从当前位置(左下角)到门的位置(右下角)的移动。这包括使用路径规划确定路径,实施过程中可能需要绕过障碍或调整方向以适应动态变化的环境。
使用钥匙开门:到达门后,Agent执行使用钥匙并通过门的操作。
在整个过程中,LLM提供的是高层次的目标和策略方向,而具体的每一步动作(如何移动、何时拾取钥匙、如何调整路径等)都是由Actor的动作选择策略根据实际环境状况实时决定和执行的。这样的设计使得Agent能够灵活应对复杂多变的实际环境,有效地完成任务。

实验

搞清楚几个问题:

  1. 是否能在高任务完成率的基础上减少与LLM交互的次数
  2. 在探索性环境中agent是否会主动与LLM交互
  3. 与不和LLM交互的agent相比性能如何

实验中的四种基准交互

  • 硬编码
    请求LLM提供新指令的时机和条件是由人类专家手动确定的,针对每个选项都有特定的规则。例如,当选项完成条件被满足时,代理才会请求LLM提供新计划。这些完成条件可能包括到达目标位置或达到最大允许时间步数。虽然这种方法简单易行,但由于规则是硬编码的,因此可能无法充分利用新获得的信息,而且对于框架其他组件中的不确定性可能不够鲁棒。
  • 总是
    在这种策略中,代理在每个时间步都向LLM查询指令,确保及时将新信息传达给LLM,以便立即重新规划。理论上,这种策略可以提高任务性能,因为新信息的获取和请求重新规划之间没有延迟。然而,这种方法的缺点是消耗了大量的交互资源。
  • 随机
    在这种方法中,代理在每个时间步都有50%的固定概率向LLM查询指令。这种方法介于总是和从不之间,提供了一种平衡方案。
  • 从不
    在这种方法中,代理从不与LLM交互,而是通过与环境的交互数据来学习策略。代理学会在实时决策过程中生成计划,而不是实时查询LLM。通过比较这种方法与其他方法,可以评估在体现式顺序决策任务中使用预先训练的LLM作为规划器的贡献,并评估将预训练的LLM纳入规划过程的有效性和优势。

MiniGrid

二维网格环境,在这个环境中给agent任务比如到达什么颜色的门、将什么推到什么旁边等等
在这个环境中,agent的视野范围被设置受限,以此让agent探索环境获取有用信息来让规划更有效果。
发现的形式是一个W*H*4的张量,其中未被发现(也就是视野受限的部分)返回[-1,-1,-1,-1],其余部分返回[object id, color id, state id(only for door, for example: open closed), agent direction]。

作者在简单钥匙门、钥匙在盒子中、随机盒子钥匙、颜色门、移动障碍物的环境中进行实验
依据不同环境难度,更换不同能力的大模型

根据实验表明,when2ask在任务完成率、任务完成耗费的时间、询问LLM的次数都体现了很好的性能

只能说明agent确实不需要过多的询问LLM就能很好完成任务

相比于传统的RL,基于LLM的agent表现更好。

跑代码的时候遇到的问题

1、需要使用python3.10以上的版本,因为我的conda环境是3.9在进行升级的时候一直报错,后来解决了发现是下载源配置有误
2、文件不存在,有一个文件是用来存储本机的GPU配置文件的,经过对文件内容的推敲我更改了代码使得可以避免这个错误
3、使用的linux或unix系统的多进程函数,windows无法运行,使用WSL运行实验代码
4、LLM API调试(流式返回的问题、接口不同需要改代码)