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

文章目录

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

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.rhkb.cn/news/408392.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

EmguCV学习笔记 VB.Net 6.4 霍夫变换

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…

基于x86 平台opencv的图像采集和seetaface6的人脸朝向姿态估计功能

目录 一、概述二、环境要求2.1 硬件环境2.2 软件环境三、开发流程3.1 编写测试3.2 配置资源文件3.2 验证功能一、概述 本文档是针对x86 平台opencv的图像采集和seetaface6的人脸朝向姿态估计功能,opencv通过摄像头采集视频图像,将采集的视频图像送给seetaface6的人脸朝向姿态…

Telnet不止于端口测试:探索经典工具的多样化应用

文章目录 Telnet详解与实用指南1. 引言2. Telnet 的安装和启动2.1 在 Windows 上安装 Telnet2.2 在 Linux 上安装 Telnet2.3 在 macOS 上使用 Telnet 3. Telnet 的基本命令与操作3.1 远程登录3.2 测试端口连通性3.3 调试网络服务3.4 网络协议调试3.5 简单的文件传输 4. Telnet …

sklearn中的线性回归

多元线性回归 指的 是一个样本 有多个特征的 线性回归问题。 w 被统称为 模型的 参数,其中 w0 被称为截距(intercept),w1~wn 被称为 回归系数(regression coefficient)。这个表达式和 yazb 是同样的…

Web前端性能优化合集

简介 自互联网兴起以来,从最初的静态网页到如今的动态交互、单页应用(SPA)、PWA(Progressive Web Apps)等,互联网技术正在飞速发展,随着用户体验成为核心竞争力之一,前端性能直接影…

【Midjourney】Midjourney全面开放网站版,所有用户每天可免费生成25次

Midjourney一直作为AI文生图领域的龙头老大,最近对面对市场上日益增长的竞争压力,尤其是来自 Flux 的挑战,终于向所有用户开放官方网站。尽管还处于早期阶段,但为了吸引更多用户体验,它暂时是完全免费的。 下面是Midj…

什么是d3dx9_42.dll?如何将丢失的d3dx9_42.dll进行修复呢?

d3dx9_42.dll文件丢失什么情况?如何将丢失的d3dx9_42.dll进行修复呢?d3dx9_42.dll又是什么文件?d3dx9_42.dll 文件是一个由 Microsoft Corporation 开发的部分,属于 Microsoft DirectX for Windows 的一组庞大库集合中的一个。Dir…

Android系统架构

文章目录 Android系统架构Android四层架构01.Linux内核层02.系统运行库层03.应用框架层04.应用层 Android应用开发特色01.四大组件02.丰富的系统控件03. SQLite数据库04.强大的多媒体05.地理位置定位 Android系统架构 为了让你能够更好地理解Android系统是怎么工作的&#xff…

HashMap 的实现原理

说一下 HashMap 的实现原理? JDK1.7 HashMap的主干是一个Entry数组。Entry是HashMap的基本组成单元,每一个Entry包含一个key-value键值对。(其实所谓Map其实就是保存了两个对象之间的映射关系的一种集合),其中Key 和…

PDPS软件 那智机器人 (丰田版)离线程序导出处理

在PDPS仿真软件中导出的那智机器人离线程序,一般是无法直接给TFD控制装置-那智机器人(丰田式样版)导入及识别使用。因此要对导出的程序进行转换编译处理,才能给TFD那智机器人(丰田式样版)导入离线程序。以下…

Java共享内容通信 VS Golang通信共享内存

接触的编程语言从C到Java再到现在Go,每个语言都有其独有特性,也具备共通之处。 最近在学习并发编程的时候,发现一个很有意思的点:Java基于共享共享内存通信,而Golang则是通过通信共享内存。为什么?下面我们…

自定义@ResponseBody以及SpringMVC总结

文章目录 1.需求分析2.目录3.自定义ResponseBody注解4.MonsterController.java5.Monster.java 实现序列化接口6.引入jackson7.Adapter.java 如果有ResponseBody注解就返回json8.测试9.SpringMVC执行流程 1.需求分析 2.目录 3.自定义ResponseBody注解 package com.sunxiansheng…

简单实现进度条效果(vue2)

如果用echarts或者其他图表来写个进度条有点大材小用&#xff0c;所以直接简单html、js写一下就可以&#xff1b; 以下代码基于vue2&#xff0c; 部分代码来自国内直连GPT/Claude镜像站 <template><div class"progress-container"><div class"p…

springboot框架中filter过滤器的urlPatterns的匹配源码

如下图所示&#xff0c;我使用WebFilter注解的方式定义了一个过滤器&#xff0c;同时定义了过滤器的过滤条件 urlPatterns为/*,可能很多人都知道filter的/*代表所有URL都匹配&#xff0c;但是源码在哪里呢 先打断点看一下调用链 然后跟着调用链慢慢点&#xff0c;看看哪里开始…

【Material-UI】深入了解Radio Group中的useRadioGroup Hook

文章目录 一、什么是useRadioGroup&#xff1f;1.1 Hook的返回值 二、useRadioGroup的基本用法2.1 代码示例2.2 代码解析 三、useRadioGroup的应用场景3.1 动态样式调整3.2 高级交互逻辑 四、使用useRadioGroup的最佳实践4.1 保持代码简洁4.2 结合主题定制4.3 注意无障碍设计 五…

【论文分享】Graviton: Trusted Execution Environments on GPUs 2018’OSDI

目录 AbstractIntroductioncontributions BackgroundGPUSoftware stackHardwareContext and channel managementCommand submissionProgramming modelInitializationMemory allocationHost-GPU transfersKernel dispatch Sharing Intel SGX Threat ModelOverviewGraviton Archi…

【动态规划】第 N 个泰波那契数

欢迎来到 破晓的历程的 博客 ⛺️不负时光&#xff0c;不负己✈️ 文章目录 题目讲解算法原理代码实现 题目 题目如下&#xff1a; 讲解算法原理 我们先说一下动态规划题目的整体做题思路&#xff1a; 第一步&#xff1a; 状态表示 什么是状态表示? 做动态规划类题目一般…

appium学习记录

免责声明 本文内容仅供参考&#xff0c;将appuim与爬虫技术相结合可能违反某些app的使用条款和法律法规。作者不对因此产生的法律问题或技术风险负责。建议读者在进行爬取操作前&#xff0c;充分了解相关法律法规并确保合规。 1、初识appium 背景&#xff1a;部分APP需要反编译…

<数据集>遥感船舶识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;15047张 标注数量(xml文件个数)&#xff1a;15047 标注数量(txt文件个数)&#xff1a;15047 标注类别数&#xff1a;25 标注类别名称&#xff1a;[Aircraft Carrier, Auxiliary Ships, Other Ship, Other Warship,…

vue项目中,修改elementui一些复杂控件样式

1.前言 在vue项目中&#xff0c;我们为了快速开发&#xff0c;会用到elementui。但很多时候&#xff0c;elementui的样式不满足于我们项目的样式需求。这时候我们需要修改原生elementui的样式。 2.简单控件的样式修改 对于elementui中一些简单的控件&#xff0c;如按钮之类的…