Agent-Pro: Learning to Evolve via Policy-Level Reflection and Optimization(ACL2024,CCF A)
https://arxiv.org/abs/2402.17574
摘要:
大型语言模型(LLM)在多种任务中展示了强大的问题解决能力。
然而,大多数基于LLM的代理被设计为特定任务解决器,依赖复杂的提示工程,而不是能够通过交互学习和进化的代理。
这些任务解决器需要手工设计的提示来告知任务规则和调节LLM的行为,因此在处理复杂的动态场景(如大型互动游戏)时固有地存在局限性。
有鉴于此,我们提出了Agent-Pro:
一个具备
策略级反思和优化
功能的基于LLM的代理,能够从互动体验中学习大量专业知识,并逐步提升其行为策略。
具体而言,它涉及一个
动态信念生成
和反思过程以促进策略进化。
与行动级反思不同,Agent-Pro对过去的轨迹和信念进行迭代反思,微调其非理性信念以优化策略。
此外,采用
深度优先搜索
进行策略优化,确保策略收益的持续提升。
Agent-Pro在两个游戏中进行了评估:
二十一点
和
德州扑克
,表现优于基础LLM和专门模型。
我们的结果表明,Agent-Pro能够在复杂和动态的场景中学习和进化,这对众多基于LLM的应用也有显著裨益。
图1给出了Agent-Pro的架构图,可以最后再看。
-
痛点1:大部分基于大模型(LLM)的智能体(Agent)都需要根据特定任务设计复杂的提示(prompt),现实中的任务往往复杂得多,且存在
信息不完全现象
。
-
痛点2:目前大多数LLM-based Agent都
不能从过去的经验中学习
,也就无法self evolve。
-
痛点3:现在能够进行
self evolve的Agent大多只是根据环境反馈
在Action层面进行evolve
。
为此作者提出了
Agent-Pro: a LLM-based
Agent
with
P
olicy-level
R
eflection and
O
ptimization,灵感来源于心理学,通过外部反馈,不直接调整Action,而是校准Action背后的感知(belief),包括自我感知(self-belief)和社会感知(world-belief),并通过完整的游戏案例(trajectory)以此在宏观上调整Agent对游戏的整体策略(policy)。
结合案例和源码,我们先从宏观上看一下作者在做什么事情,怎么实现Agent的自我学习的。以21点这个游戏为例(最好搜下规则,好理解),首先在prompt中告诉Agent游戏规则和游戏信息(自己的手牌和庄家亮出的牌),如图2所示。
图2 让Agent-Pro开始游戏的prompt设计
需要注意的是,如果还没进行案例的学习,那此时的policy(也就是图中的Behavioral Guideline和World Modeling
应当是空的
,还没学出来),其他蓝色部分是填好的。注意看Output Format,Agent应当输出自己的
belief和Action,其实很像
ReAct风格
。
self-belief是Agent
对自己当前手牌和可能策略的认知
,
world-belief则是
对庄家亮出那张牌的认知、庄家游戏风格的认知、他可能采取策略的预判
等等。
Action就是Agent觉得自己下一步应该怎么做。实际输出案例可以看下图3,右边是Agent-Pro的反应,左边则是普通ReAct风格Agent。
那么如何学习空着的
policy(Behavioral Guideline & World Modeling)?作者给出的方法并不是微调LLM参数,这样成本太高,而采用
上下文学习
的方法。之所以像图2那样设计prompt,实际上作者想用一个迭代的方法去不断优化LLM生成的policy。没错,policy是LLM自己生成的,步骤如下。
如图4,先给Agent游戏失败的案例(Game Record即整个游戏过程,Belief Sequences即游戏过程中每一步Agent的belief构成的列表,Final Result即游戏分数),让其输出反思结果,也就是作者提出的策略级反思,包括让Agent关注自己的belief是否正确、和行为一致,并想想为什么输了,原因是什么。
图4 让Agent-Pro进行策略级反思的prompt设计
然后根据反思结果生成policy,所用prompt如图5。
图5 让Agent-Pro生成policy的prompt设计
至此,经过学习,就可以把policy填到之前图2里的prompt中开始新游戏了,进行不断的迭代。
接下来看具体细节。
不难发现,作者不使用微调(没有权重更新),实际上
将问题转化成了让模型根据上下文生成最优的policy文本
。根据失败案例学习出
policy后,需要进一步对
policy进行
检验
。具体做法是,将新生成的policy替换图2中prompt的相应policy,重玩
同样的游戏
,如果分数提高,就证明这个新生成的policy更好。否则,重新生成policy(注意LLM生成的文本每次是不一样的),如果重试三次仍未通过验证,则舍弃这个案例。