LLM agentic模式之规划能力(planning)

news2024/11/9 10:49:45

文章目录

      • 任务分解
        • 分解优先方法
        • 交替分解方法
      • 多计划选择
      • 外部规划器辅助规划
      • 反思和改进
      • 记忆增强规划
      • 评估

2024年2月的综述《 Understanding the planning of LLM agents: A survey》提供了基于LLM的的agent的规划(planning)能力的系统视角,总结了近年来提高规划能力的工作。

规划(planning)到底是在干什么呢?通俗来讲就是将一个任务分解为一系列行为或动作的过程。设时间步记为 t t t,将环境记为 E E E,动作空间记为 A A A,任务目标记为 g g g,时间步 t t t处的动作则为 a t ∈ A a_t \in A atA,大模型的参数记为 Θ \Theta Θ,完成任务的prompt记为 P \mathcal{P} P,用LLM做规划可以表示为生成一系列的动作:
p = ( a 0 , a 1 , ⋯   , a t ) = plan ( E , g ; Θ , P ) p = (a_0, a_1, \cdots, a_t) = \text{plan}(E, g; \Theta, \mathcal{P}) p=(a0,a1,,at)=plan(E,g;Θ,P)

综述将现有的基于LLM的agent的规划(planning)能力分为五个方向:task decomposition、multi-plan selection、external module-aided planning、reflection and refinement、 memory-augmented planning。

在这里插入图片描述

  • 任务分解(Task Decomposition):主要采用分而治之(divide and conquer)的思想,将复杂任务分解为几个子任务,然后按顺序对每个子任务进行规划。

    ( g 0 , g 1 , ⋯   , g n ) = plan ( E , g ; Θ , P ) p i = ( a 0 i , a 1 i , ⋯   , a m i ) = sub-plan ( E , g i ; Θ , P ) (g_0, g_1, \cdots, g_n) = \text{plan}(E, g; \Theta, \mathcal{P}) \\ p^i = (a_0^i, a_1^i, \cdots, a_m^i) = \text{sub-plan}(E, g_i; \Theta, \mathcal{P}) (g0,g1,,gn)=plan(E,g;Θ,P)pi=(a0i,a1i,,ami)=sub-plan(E,gi;Θ,P)

  • 多计划选择(Multi-plan Selection): 让LLM 更深地去"思考(think)",对一个任务生成多个可替代计划,接着任务相关的搜索算法选择一个计划来执行。(下式中的 F \mathcal{F} F表示搜索策略,例如树搜索算法)

    P = ( p 1 , p 2 , ⋯   , p n ) = plan ( E , g ; Θ , P ) p ∗ = select ( E , g , P ; Θ , F ) P = (p_1, p_2, \cdots, p_n) = \text{plan}(E, g; \Theta, \mathcal{P}) \\ p^* = \text{select}(E, g, P; \Theta, \mathcal{F}) P=(p1,p2,,pn)=plan(E,g;Θ,P)p=select(E,g,P;Θ,F)

  • 外部规划器辅助规划(External Planner-Aided Planning):用外部规划器来提升规划过程,目的是为了解决生成计划的效率和不可行问题,LLM主要承担定义任务的角色。(下式中的 Φ \Phi Φ是外部规划器模块,h代表形式化的信息)
    h = formalize ( E , g ; Θ , P ) p = plan ( E , g , h ; Θ ) h = \text{formalize}(E, g; \Theta, \mathcal{P}) \\ p = \text{plan}(E, g, h; \Theta) h=formalize(E,g;Θ,P)p=plan(E,g,h;Θ)

  • 反思和改进(Reflection and Refinement):强调通过反思和改进来提高规划能力,鼓励LLM对失败进行反思并改进计划。
    p 0 = plan ( E , g ; Θ , P ) r i = reflect ( E , g , p i ; Θ , P ) p i + 1 = refine ( E , g , p i , r i ; Θ , P ) p_0 = \text{plan}(E, g; \Theta, \mathcal{P}) \\ r_i = \text{reflect}(E, g, p_i; \Theta, \mathcal{P}) \\ p_{i+1} = \text{refine}(E, g, p_i,r_i; \Theta, \mathcal{P}) \\ p0=plan(E,g;Θ,P)ri=reflect(E,g,pi;Θ,P)pi+1=refine(E,g,pi,ri;Θ,P)

  • 记忆增强规划(Memory-augmented Planning):用额外的记忆模块来增强LLM的规划能力,通常将有价值的信息如常识知识、过去的经验、领域知识等存储起来,在LLM做规划时去检索这些信息作为辅助信号。(下式中的 M \mathcal{M} M是记忆模块)
    m = retrieve ( E , g ; ( M ) ) p = plan ( E , g , m ; Θ , P ) m = \text{retrieve} (E, g; \mathcal(M)) \\ p = \text{plan}(E, g, m; \Theta, \mathcal{P}) m=retrieve(E,g;(M))p=plan(E,g,m;Θ,P)

这5个方向不是互斥的,而是互相联系的。下图是这个任务的一个汇总总结。

在这里插入图片描述

接下里对这个五个方向进行更详细的讨论。

任务分解

任务分解的主要思路是“分而治之”,通常涉及到两个关键步骤:1. 分解复杂任务,即“decompose”步骤。2. 对子任务进行规划,即“sub-plan"步骤。 目前任务分解主要分为两类:分解优先(decomposition-first)和交替分解(interleaved decomposition),如下图所示。

在这里插入图片描述

任务分解方向面临的挑战:

  • 由任务分解过程带来的额外开销,将任务分解为多个子任务要求更多推理和生成步骤,导致额外的时间和计算成本。
  • 对于特别复杂的任务,如果需要分解10多个以上的子任务,会使规划受限于LLM的上下文长度,可能导致前面的轨迹被遗忘。
分解优先方法

分解优先方法如上图a所示先将任务分解成子目标,再相继地对每个子目标进行规划。代表性的工作有:

  • HuggingGPT:利用Huggingface Hub中的各种多模态模型来构建agent解决多模态任务。LLM作为一个指挥者,负责将人类的输入的任务进行分解,选择相应的模型,并生成最后的相应输出。HuggingGPT显式地指导LLM将给定任务分解为相互依赖的子任务。
  • Plan-and-Solve:将Zero-shot CoT的prompt语句”Let’s think step-by-step“变成两步prompt 指令:“Let’s first devise a plan"和"Let’s carry out the plan”。
  • ProgPrompt:将任务的自然语言描述翻译成编码问题(coding problems)。通过编码将环境中的agent的动作空间和对象符号化:将动作定义为函数,将对象表示成变量;这样将任务规划转变成函数生成问题。在执行任务时,agent生成由function callings组成的计划,然后一步一步地执行它们。

优点:强调了任务和子任务之间的相关性,可减少任务遗忘和幻觉的风险。

缺点:因为在一开始就分解了任务,需要有调整机制不然其中一个步骤出错就会导致整个结果出错。

交替分解方法

交替优先方法如上图b所示先将任务分解子目标规划交替进行,也就是在当前状态下每次分解只会涉及到一个或两个子任务。代表性的工作有:

  • CoT:通过几个推理轨迹示例来指导LLM进行复杂问题的推理。
  • Zero-shot CoT:利用LLM的zero-shot推理能力,prompt 指令:”Let’s think step-by-step“。
  • ReAct:将推理和规划解耦,交替进行推理(Thought step)和规划(Action step)。
  • Visual ChatGPT:利用ReAct机制,并让LLM利用视觉模型,使agent有了图像处理能力。
  • PAL:利用LLM的编码能力来提升CoT,指导LLM在推理过程中生成代码,并让代码解释器来执行这些代码获得答案。
  • Program-of-Thought(PoT):将推理问题定义为编码问题,并利用CodeX模型的能力来解决数学和金融问题。

优点:交替分解和子任务规划可利用环境反馈,提高容错率。

缺点:对于复杂任务,过长的轨迹可能会使LLM产生幻觉,忘记了初始目标。

多计划选择

LLM生成的单个计划可能是次优的或不可行的,所以多计划选择就应运而生了,一般分为两个主要步骤:多计划生成和最优计划选择。

多计划生成: 多计划生成需要生成多条计划路径来组成候选计划集,主流的方法是利用生成式模型在解码过程中的不确定性。

  • Self-consistency:利用解码过程中的采样策略如温度采样、top采样等生成多条不同的推理路径。
  • Tree-of-Thought(ToT):使用采样(sample)和提议(propose)两种策略,采样与Self-consistency一致,提议通过few-shot prompt显式地让LLM生成多种计划。
  • Graph-of-Thought(GoT):通过新增thoughts的转变(transformation)来扩展ToT(支持任意thought的聚合)
  • LLM-MCTS/RAP:利用LLM作为蒙特卡洛搜索树(Monte Carlo Tree Search, MCTS)的启发式策略函数,通过多次函数调用获得多个可能的动作。

最优计划选择:为了在候选计划集中选择最优计划,可采用多种策略作为启发式搜索算法。

  • Self-consistency:采用多数投票策略,将获得最多投票的计划作为最优选择。
  • Tree-of-Thought(ToT):利用树搜索算法如BFS和DFS。在选择要扩展的节点时,用LLM来评估多个动作并选择一个最优的。
  • LLM-MCTS/RAP:利用蒙特卡洛搜索树(Monte Carlo Tree Search, MCTS)算法来搜索。
  • LLL A*:利用经典的A*搜索算法来辅助LLM搜索,在选择最优路径时,将当前位置到目标位置的Chebyshev距离作为启发式代价函数。

优点:多计划选择的可扩展性强,但这个优势涉及到权衡,因为会增加计算成本。

缺点:依赖LLM来评估,而LLM在排序方面的表现目前尚未有充分研究;LLM自带的随机性给选择增加了随机性,可能会影响所选计划的一致性和可靠性。

外部规划器辅助规划

外部规划器辅助规划一般可以归类为符号规划器(symboic planners)和神经网络规划器(neural planners)。在这些方法里,LLM主要是支持性角色,主要来解析文本反馈和提供用来辅助规划的推理信息。

符号规划器:符号规划器类方法一般基于完善的符号形式化模型,如PDDL模型,利用符号推理来识别从初始状态到想要的目标状态的最优路径。

  • LLM+P:通过结合基于PDDL模型的符号规划器来增强LLM的规划能力。设计prompt让LLM将指定的任务及动作组织成PDDL语言形式,接着用Fast-Downward求解器完成规划过程。

  • LLM-DP:基于LLM+P,主要针对动态交互环境设计。从环境中获得反馈后,LLM将这些信息转变成PDDL语言,再用BFS求解器来生成一个计划。

  • LLM+PDDL:同样用PDDL语言来形式化任务,在规划时,用LMM生成的计划作为初始启发式答案来加速局部搜索规划器如LPG的搜索过程。

  • LLM+ASP:将LLM描述的的自然语言问题转化为原子事实(atomic facts)后将问题转化为ASP问题;接着使用ASP求解器CLINGO来生成计划。

神经网络求解器:神经网络求解器是指用强化学习或模仿学习技术在收集的规划数据上训练的深度模型,它们在特定领域有高效的规划能力,但它们对于复杂问题或不常见的问题泛化能力不足,因此有一些方法探索将LLM与轻量的神经网络求解器结合。

  • CALM: 语言模型(是2020年的工作,所以还是不是用LLM)处理文本环境信息,生成一系列候选动作作为先验信息;DRRN策略网络排序这些候选动作并选择一个最优动作。
  • SwiftSage:利用了认知心理学里的双过程理论(Dual-process theory),将规划过程分为慢思考和快思考。用基于模仿学习训练的DT模型作为快思考模型来进行快速的规划,在计划执行过程出现错误后,agent切换到慢思考过程,由LLM基于当前状态来进行推理和规划。

反思和改进

几种方法Self-refine、Reflexion、CRITIC参考之前的笔记。

记忆增强规划

记忆是agent增强规划能力及增长潜力的关键路径。记忆可分为两大类:RAG-based memory和embodied memory。

RAG-based memory是将一些知识和经验存储起来在需要的时候检索,比如MemoryBank使用向量来编码记忆。REMEMBER将历史记忆存储为Q值表,每一条记录都是(环境,任务,动作,Q值)元祖,在检索时,基于环境和任务相似度来检索正向和负向记忆后提供给LLM生成计划。

embodied memory是使用agent的历史经验样本来微调LLM,比如AgentTuning将各种任务的计划轨迹组织为对话形式后微调LlaMa模型,在未见过的规划任务上表现出了显著的提升效果。

评估

主流的基准评估方法如以下几类:

  • 交互式游戏环境(Interactive Gaming Environments):游戏环境基于agent的动作可提供即时的多模态反馈如文本或视觉反馈。最常用的游戏环境是Minecraft,它要求agent收集材料来创建工具获得更多的奖励,agent创建的工具的质量被当做评估指标。另一类是基于文本的交互环境如ALFWorld和ScienceWorld等,成功率或奖励被当做评估指标。
  • 交互式检索环境(Interactive Retrieval Environments):它们模拟人类在现实生活中的信息检索和推理过程。在这些环境中,agent可以与搜索引擎或其他web服务交互,获取问题的答案或者完成信息检索任务。常见的检索环境有:基于Wikipedia引擎的问答任务如HotPotQA和Fever,找指定信息的网络浏览任务如WebShop, Mind2Web, WebArena等。任务成功率被当做评估指标。
  • 交互式编程环境(Interactive Programming Environments):它们模拟程序员与电脑之间的交互,测试agent在解决电脑相关问题的规划能力。agent需要编码代码或指令来与电脑交互并解决问题,agent会收到如编译或运行错误信息、执行结果等作为反馈。流行的环境有Agent Bench,MiniWoB++等。

这些环境的一个缺点是缺乏细粒度的评估,表现通常以最后的成功率来评估。另一个缺点是对于一个问题只有一条标志着任务的完成的"golden"路径。

综述作者做了一些试验来验证一些代表性工作的表现,结果如下图所示。

在这里插入图片描述

试验有如下几个结论:

  • 随着开销的增加性能会提升。ReAct, Reflexion等工作涉及到多个计划、额外的思考和反思,所以执行时的开销更大但也带来了性能提升。
  • 对复杂任务建议使用Fewshot例子。ZeroShot-CoT有推理能力,但是在两个QA任务上相比于few-shot CoT性能下降了很多。
  • 反思对于提高成功率很重要,特别是复杂任务而言。 Reflexioin相比ReAct消耗更多的token,但是在复杂任务上的性能也好很多。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2072506.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何申请 Midjourney API ,看这篇文章就够了

Midjourney Imagine API 的申请与应用 Midjourney,这一杰出的 AI 绘图工具,凭借输入几个关键字,便能在短短一两分钟内生成极为精美的图像,展现出令人惊叹的创作能力。它以独特的绘画技术在行业中独树一帜,现今在各个领…

墨刀基础篇(一) :6.常用组件(动态组件)

一:动态组件 动态组件是除了文件和矩形之外最重要的一个组件。文本和矩形是一切组件的基础,而动态组件是复杂组件的根本。动态组件就是可以拥有多个状态,每个状态可以放不同的内容,每个状态之间可以互相切换,每个状态…

springboot系列--springboot前置知识

一、spring相关知识 一、spring能干什么 二、spring生态 spring生态覆盖了:web开发、数据访问、安全控制、分布式、消息服务、移动开发、批处理等等。 官网链接:Spring | Home 二、springboot相关知识 一、springboot作用 Spring Boot makes it easy …

Ansys Rocky在电池制造行业应用

Ansys Rocky在电池制造行业应用 对于电池电极制造的理解 干湿混合应用 砑光应用 微尺度电极干燥应用 更多应用 材料生产 电极和电池生产

prolog 基础 - 关系和属性

首先进入环境; 看一下一开始的提示符是 ?- ,现在可以用write语句输出一些东西; 根据资料,在prolog中, 两个对象之间的关系,使用括号表示。比如,jack的朋友是peter,写成friend(ja…

论文笔记:Large Language Models are Zero-Shot Next LocationPredictors

1 intro 下一个地点预测(NL)包括基于个体历史访问位置来预测其未来的位置。 NL对于应对各种社会挑战至关重要,包括交通管理和优化、疾病传播控制以及灾害响应管理NL 问题已经通过使用马尔可夫模型、基于模式的方法以及最近的深度学习&#x…

突破传统,GCOM80-2NET的创新性边缘计算方式

GCOM80-2NET边缘计算网关,突破传统Modbus协议仅能进行数据读采的限制,直接在设备终端进行复杂的数据点运算,减少冗余数据传输,释放软件人员针对不同Modbus设备协议解析的时间。 GCOM80-2NET,是ZLG致远电子推出的一款高…

OpManager Plus简单说明以及在Linux下的安装

目录 1 简介2 安装2.1 Linux下安装 1 简介 OpManager Plus 属于ManageEngine,是一款商业软件。 ManageEngine OpManager是一款全面的网络监视软件,可为网络管理员提供集成控制台,用于管理路由器,防火墙,服务器&#x…

免费个人网站怎么建立

一、选择免费网站建设平台 有许多免费的网站建设平台可供选择,如WordPress.com 、Wix、Weebly等。这些平台提供了易于使用的界面和模板,能够帮助用户快速创建个人网站博客网站 _ 网址大全 _ 博科趣 - 第2页博客网站大全,博客网址导航,个人独立博客,个人博…

Vue3项目开发——新闻发布管理系统(二)

文章目录 五、项目的目录调整六、系统整体路由设计开发1、系统整体路由分析2、路由配置2.1路由代码解析2.2路由信息设计2.3系统路由信息汇总2.4路由信息配置2.5路由对应Vue组件框架3系统效果五、项目的目录调整 默认生成的src目录结构如下: 这个结构不能满足我们的开发需求,…

Python测试框架之—— pytest介绍与示例

Pytest是一个功能强大且易于使用的Python测试框架,它提供了丰富的功能和灵活的用法,使得编写和运行测试变得简单而高效。 一、Pytest的特点 简单灵活:Pytest的语法简洁清晰,容易上手,并且支持复杂的测试场景。自动发…

为什么制造企业数字化转型需要MES管理系统

制造企业数字化转型需要MES管理系统,这主要源于MES管理系统在提升生产效率、优化资源配置、加强质量控制以及实现数据驱动决策等方面的显著优势。以下是具体的原因分析: 1. 提升生产效率 实时数据采集与分析:MES管理系统能够实时收集生产过程…

【(逆向)PE64是什么意思?】

PE64 是指 64 位的可移植可执行(Portable Executable)文件格式。在 Windows 操作系统中,PE 文件是一种常见的可执行文件格式。 在逆向工程中,判断一个 PE 文件是否为 64 位通常需要检查其特定的结构和字段。例如,可以…

利用 UrlClickEvents 深入研究网络钓鱼活动

在 Microsoft 365 Defender 中发现了一个新的高级搜索表:UrlClickEvents 图 1 – UrlClickEvents 表 在撰写本文时,此表尚未出现在每个 Office 365 租户中,官方文档中也不包含有关它的信息。快速查看它包含的事件表明,它记录了用户从 Office 应用程序(例如 Outlook 和 Te…

中仕公考怎么样?事业编备考技巧!

距离2024年下半年事业编考试还有两个月的时间,现在开始准备还能抓住机会!事业编考试一定要了解: 一、事业编招考流程 发布公告→注册报名→选岗→交报名费→报名确认→打印准考证→笔试→调剂→面试→体检→录用。 二、事业编报考地址 1.省人事考试网…

VUE3+nest.js前后端部署-服务器linux中部署Node.js环境

一.安装分布式版本管理系统Git (Alibaba Cloud Linux 3/2、CentOS 7.x) sudo yum install git -y 二.使用Git将NVM的源码克隆到本地的~/.nvm目录下,并检查最新版本。 git clone https://gitee.com/mirrors/nvm.git ~/.nvm && cd ~/.nvm && gi…

34 增加系统调用(3)

首先是 在GDT中添加 系统调用的内容: 然后是汇编中实现 syscall_hander 然后是使用C语言函数 实现在屏幕上显示字符。 然后是在 任务中调用这个函数。 然后 sys_show 去调用 系统调用。 在进行系统调用前需要 保存现场。 系统调用之后需要 释放现场。 为了保证在系统…

前端宝典十八:高频算法排序之冒泡、插入、选择、归并和快速

前言 十大经典排序算法的 时间复杂度与空间复杂度 比较。 名词解释: n:数据规模;k:桶的个数;In-place: 占用常数内存,不占用额外内存;Out-place: 占用额外内存。 本文主要探讨高频算法排序中…

docker安装ES(Elasticsearch)的IK分词器

大家可以先看我的Docker中部署Kibana: “Docker中部署Kibana:步骤与指南“-CSDN博客 其实这几篇博文都是有关系的,希望大家学有所成。 问题:命令中有一个unzip没有安装,需要先安装一下,安装命令&#xf…

计算机毕业设计 高校学术交流平台 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…