当前位置: 首页 > news >正文

Prompting LLMs to Solve Complex Tasks: A Review

文章目录

    • 题目
    • 简介
    • 任务分解
    • 未来方向
    • 结论

题目

促使 LLM 解决复杂任务: 综述
在这里插入图片描述

论文地址:https://www.intjit.org/cms/journal/volume/29/1/291_3.pdf

简介

    大型语言模型 (LLM) 的最新趋势显而易见,这体现在大型科技公司的投资以及媒体和在线社区对 LLM 的广泛讨论和迷恋中。OpenAI 的 GPT 系列,尤其是 GPT-3 和 GPT-4 [OpenAI, 2023],因其先进的文本生成功能而成为头条新闻。微软等大公司已将 LLM 集成到其产品中,增强了 Bing 和 Office Suite 等应用程序的用户体验。我们还可以看到专注于 LLM 的学者人数激增,凸显了人们对该领域日益增长的兴趣 [Touvron et al, 2023a, Touvron et al, 2023b]。此外,媒体和在线社区对 LLM 的广泛讨论和迷恋凸显了它们的影响力以及公众对人工智能进步的兴趣。

    随着 LLM 如此受欢迎,并且 LLM 在各种下游任务中展示了其能力,如何利用 LLM 来解决复杂任务成为一个重要问题。其中,提示工程是与 LLM 互动的最直接、最有效的方式 [Liu et al, 2023b, Qiao et al, 2022]。通过制作精确清晰的提示,用户可以向 LLM 提供更好的指示,确保更准确、更符合语境的答案。这种做法不仅有助于控制 LLM 输出的语气和风格,使其适合不同的目的和受众,而且还减少了歧义,从而实现更直接、更高效的交互。因此,提示工程是充分利用 LLM 潜力的关键工具,确保他们的回答尽可能有益和相关。

    与 LLM 合作时,思路链提示 (CoT) [Wei et al, 2022] 涉及将复杂问题分解为一系列逻辑步骤,类似于人类思考问题的方式。这种方法很重要,因为它增强了 LLM 处理复杂多步骤推理任务的能力。例如,在解决数学问题时,模型首先识别相关信息,然后依次应用数学运算,清晰地阐明每个步骤,然后得出最终答案。同样,在关于因果关系的推理任务中为了达到这一目的,该模型在得出结论之前会系统地评估场景的各个方面。通过这样做,CoT 不仅使模型的推理过程更加透明,而且显著提高了其解决问题的准确性。

    受到 CoT 简单而强大的启发,我们希望进一步深入研究将任务分解为提示中的子任务的方法,以使 LLM 能够解决复杂任务。在本文中,我们首先回顾了现有的方法,这些方法也侧重于提示 LLM 解决问题。然后,我们提出了进一步改进的可能方向。我们希望这项调查可以引导感兴趣的研究人员对复杂任务进行快速工程设计,并提高对该领域进一步建设的兴趣。第 2 节将总结当前的论文,这些论文将复杂任务分解为提示中的子任务,以指导 LLM 解决问题。讨论了两种类型的方法及其区别,即迭代分解和计划然后执行分解。第 3 节讨论了当前方法的缺点,以及分层分解如何潜在地促使 LLM 更好地解决复杂任务。

任务分解

    将复杂任务分解为简单任务特别有用,因为如果不考虑推理步骤就无法立即解决该任务。在本节中,我们介绍了分解复杂任务的方法和有助于提高分解性能的辅助技术。迭代分解生成一个简单的子任务,执行操作以完成子任务,然后利用先前结果的知识重复此过程。在 [Press et al, 2022] 中,作者通过实证表明,即使 LLM 知道复杂问题所有所需子问题的真实答案,当要求它们直接回答复杂问题时,LLM 也常常是错误的。这一发现表明了将复杂任务分解为简单子任务对 LLM 的重要性。

    思路链提示 [Wei et al, 2022] 可以被认为是第一个尝试将任务分解为子任务序列的工作。通过向 LLM 展示一系列中间自然语言推理步骤,这些步骤最终导致提示中的输出,LLM 可以自然地模仿类似人类的问题解决过程。在这里,中间推理步骤可以被视为子任务,因为它们都是回答问题所必需的,并且它们按顺序连接以形成导致问题最终解决方案的子任务序列。研究人员甚至发现,只需在提示中添加“让我们一步一步思考。”就可以引导 LLM 执行思路链分解 [Kojima et al, 2022]。上述两项工作隐含地遵循迭代分解,因为 LLM 以自回归的方式生成 token,可以表述为:在这里插入图片描述

    我们可以看到,在生成 xt 时它是一个条件概率,这意味着它们可以根据之前的内容决定下一个子任务。 还有一些方法明确指示 LLM 采用迭代分解策略。 DecomP [Khot et al, 2022] 和 Successive Prompting [Dua et al, 2022] 代表了两种当代技术,它们采用重复提问的方法来收集涉及问答任务的背景信息。 模型回答的每个子问题都是一个要完成的子任务。 与可能在单个输出中顺序生成子问题的 CoT 相比,这两种方法明确指导 LLM 在此过程中生成后续问题。 实证结果表明,明确指示 LLM 分解复杂任务优于依赖 LLM 自己进行的隐式分解。

    单步分解,与迭代分解不同,单步分解方法仅使用一个提示将任务分解为较小的任务。例如,[Zhou et al, 2022] 中提到的从最少到最多提示法,对于 LLM 只需要两个提示:一个用于制定将主要任务分解为较小步骤的计划,另一个用于执行这些步骤。[Wang et al, 2023a] 中描述的计划和解决提示技术通过将计划和执行阶段合并为一个响应来提高从最少到最多提示的效率。DEPS [Wang et al, 2023b] 和 GITM [Zhu et al, 2023] 是针对游戏 Minecraft 的专门分解策略,Minecraft 是一款沙盒游戏,玩家可以在其中创建各种物品和工具。在这个游戏中,收集基本材料被视为构建所需物品所需的一系列子任务。 DEPS 制定了获取所需物品的顺序计划,而 GITM 则提示 LLM 将任务分解为子任务树结构。

    与 DecomP 和连续提示等方法相比,单步分解方法更省时,因为它减少了 LLM 所需的提示数量。尽管如此,DecomP 和连续提示提供了更大的适应性,允许根据前一个子任务的结果定制下一个子任务,而一次性分解方法中的计划保持不变。单步分解更适合子任务限制在相对较窄范围内的任务。例如,在 Minecraft 中,任务和先决条件之间的复杂性和相互联系比知识密集型问答更直接。这种简单性使通过一次性分解生成的计划具有更高的准确性。最终,在效率和精度之间进行选择取决于手头任务的具体性质。

    外部分解,上述类别都依赖于 LLM 的知识将任务分解为更小的子任务。然而,正如文献所指出的那样,它们面临着幻觉问题的挑战 [Ji et al, 2023]。有时,这些方法会生成看似合理但缺乏坚实现实基础的子任务。为了确保分解过程的精确性,LLM+P [Liu et al, 2023a] 和 SayPlan [Rana et al, 2023] 采用了不同的方法,整合了经典规划技术。他们使用 LLM 将用自然语言表达的任务转换为经典规划器使用的领域特定语言。这使经典规划器能够更有效地处理任务。规划器产生的结果随后由 LLM 翻译回自然语言。

    子任务预定义,从受限池中选择潜在子任务具有制定更精确、更高效的子任务序列的优势。这种方法有助于防止 LLM 因不相关或错误的子任务而偏离正轨。PEARL [Sun et al, 2023] 是专门为回答冗长文档中的问题而定制的。它采用了一组预定义的子任务,例如“定位 A 的定义”、“比较 A 和 B”和“总结 A”,LLM 可以从中选择有价值的子任务并将其组织成一个连贯的计划。同样,ProCoT [Deng et al, 2023] 建立了预定义的子任务,包括查询澄清、主题转换和谈判策略,专为对话系统设计。DecomP [Khot et al, 2022] 采用了不同的方法,从一系列子任务函数(如用于第 k 个字母连接的“split”和“merge”)中选择子任务。该方法在多种任务中进行了评估,包括涉及广泛上下文的任务、开放域问答和符号推理。同时,SayPlan [Rana et al, 2023] 是针对机器人规划任务量身定制的。给定任务指令,它使用语义搜索来识别整个 3D 场景图中的相关子图,作为规划环境。随后,LLM 仅根据此识别的子图制定计划。

未来方向

    当前提示大型语言模型 (LLM) 的方法通常涉及将最终任务拆分为顺序子任务或制定计划以同时执行所有步骤。但是,在处理复杂任务时,这种顺序方法可能会受到限制。该方法可能无法充分解决每个子任务的复杂性,尤其是在每个子任务本身都很复杂且多方面的情况下。因此,由于对这些复杂组件的分解不足,模型可能难以准确完成最终任务。相比之下,任务的层次分解(将每个子任务进一步分解为更小、更易于管理的部分)提供了更强大的解决方案。这种方法可以更深入、更详细地探索任务的每个方面,确保彻底理解和解决每个元素。例如,在复杂的问题解决场景中,子任务可能涉及多层推理或计算,每层都需要自己的特定方法。层次分解将使模型能够单独处理这些层,确保更全面、更准确地完成最终任务。这种方法不仅增强了 LLM 的解决问题能力,而且更紧密地反映了人类的认知过程,从而产生了合乎逻辑、结构良好且更可靠的解决方案。

结论

    本综述批判性地分析了各种分解方法在促使 LLM 解决复杂任务中的应用。我们已经看到,迭代、单步、外部和预定义子任务分解各自提供了独特的优点和局限性。我们的分析表明,虽然当前的方法可以提高 LLM 的解决问题能力,但仍有很大的改进空间。未来的研究应侧重于开发更先进的分层分解策略,以更好地模仿人类的认知过程并提供更细致入微、更可靠的解决方案。

相关文章:

Prompting LLMs to Solve Complex Tasks: A Review

文章目录 题目简介任务分解未来方向结论 题目 促使 LLM 解决复杂任务: 综述 论文地址:https://www.intjit.org/cms/journal/volume/29/1/291_3.pdf 简介 大型语言模型 (LLM) 的最新趋势显而易见,这体现在大型科技公司的投资以及媒体和在线社…...

C++ 编程指南05 - 编译时检查优于运行时检查

一:概述 编译时错误检查是C编程中一条非常重要的原则,它强调了在可能的情况下,应该优先依赖编译时检查(静态检查)而不是运行时检查。这样做的主要目的是提高程序的性能、安全性和可维护性。 编译时检查,即在…...

【优先算法】专题——双指针

1.移动零 移动零 题目描述: 思路: 本题我们把数组分块,将非零元素移动到左边,为零元素移动右边。 我们使用双指针算法(利用数组下标来充当指针) 两个指针的作用: cur:从左往右…...

CSP/信奥赛C++语法基础刷题训练(23):洛谷P1217:[USACO1.5] 回文质数 Prime Palindromes

CSP/信奥赛C语法基础刷题训练(23):洛谷P1217:[USACO1.5] 回文质数 Prime Palindromes 题目描述 因为 151 151 151 既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 151 …...

C语言练习.if.else语句.strstr

今天在做题之前&#xff0c;先介绍一下&#xff0c;新学到的库函数strstr 想要使用它&#xff0c;要先给它一个头文件<string.h> char *strstr(const char*str1,const char*str2); 首先&#xff1a;1.strstr的返回值是char&#xff0c;字符类型的。 2.两个实参&#xff…...

利用浏览器录屏

以下内容参考自网络 <!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title></title> </head> <body> <div class"left"> <di…...

python中的map、split、join函数的作用 => ACM输入输出流

map(func,iter) lst_str ["1", "2", "3"] # 得到lst_num为[1, 2, 3] lst_num list(map(int, lst_str))如果想把一个列表里的所有元素批量地调用某一个函数&#xff0c;并映射得到一个新的列表&#xff08;原列表中元素相对位置不变&#xff0…...

Ubuntu20.04下安装向日葵

向日葵远程控制app官方下载 - 贝锐向日葵官网 下载Ununtu版的图形版本的安装deb包SunloginClient_15.2.0.63064_amd64.deb 直接执行 sudo dpkg -i SunloginClient_15.2.0.63064_amd64.deb 的话会报错: 如果在Ubuntu20.04里直接执行sudo apt install libgconf-2-4安装libgco…...

常用并发设计模式

避免共享的设计模式 不变性&#xff08;Immutability&#xff09;模式&#xff0c;写时复制&#xff08;Copy-on-Write&#xff09;模式&#xff0c;线程本地存储&#xff08;Thread-Specific Storage&#xff09;模式本质上都是为了避免共享。 1、使用时需要注意不变性模式…...

Redis Search系列 - 第七讲 Windows(CygWin)编译Friso

目录 一、背景二、安装CygWin三、编译Friso四、运行Friso五、Friso分词效果测试 一、背景 最近在做RedisSearch的中文分词效果调研&#xff0c;底层的中文分词插件使用的就是Friso&#xff0c;目前手里的Linux环境上yum镜像仓库有问题导致没法安装gcc&#xff0c;又急于验证Fr…...

利用Docker容器技术部署发布web应用程序

Docker是什么&#xff1f; docker 是一个开源的应用容器引擎&#xff0c;可以帮助开发者打包应用以及依赖包到一个可移植的容器中&#xff0c;然后发布到任何流行的Linux机器上&#xff0c;也可以实现虚拟化&#xff0c;容器是完全使用沙箱机制&#xff0c;相互之间不会有任何…...

[免费]SpringBoot+Vue毕业设计论文管理系统【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的SpringBootVue毕业设计论文管理系统&#xff0c;分享下哈。 项目视频演示 【免费】SpringBootVue毕业设计论文管理系统 Java毕业设计_哔哩哔哩_bilibili 项目介绍 现代经济快节奏发展以及不断完善升级的信…...

BFS 算法专题(五):BFS 解决拓扑排序

目录 1. 拓扑排序简介 1.1 有向无环图 (DAG 图) 1.2 AOV 网(顶点活动图) 1.3 拓扑排序 1.3.1 如何实现 2. 力扣实战应用 2.1 课程表 2.1.1 算法原理 2.1.2 算法代码 2.2 课程表 II 2.2.1 算法原理 2.2.2 算法代码 2.3 火星词典 (hard) (原剑指offer) 2.3.1 算法原理…...

【Mysql】开窗聚合函数----SUM,AVG, MIN,MAX

1、概念 在窗口中&#xff0c;每条记录动态地应用聚合函数&#xff08;如&#xff1a;SUM(),AVG(),MAX(),MIN(),COUNT(),&#xff09;可以动态计算在指定的窗口内的各种聚合函数值。 2、操作 以下操作将基于employee表进行操作。 sum() 进行sum的时候&#xff0c;没有order …...

java操作doc——java利用Aspose.Words操作Word文档并动态设置单元格合并

在实际工作中&#xff0c;如果业务线是管理类项目或者存在大量报表需要导出的业务时&#xff0c;可以借助第三方插件实现其对应功能。 尤其是需要对word文档的动态操作或者模板数据的定向合并&#xff0c;使用Aspose会相对来说容易一些&#xff0c;而且相关文档比较完整&#…...

探索 .NET 9 控制台应用中的 LiteDB 异步 CRUD 操作

本文主要是使用异步方式&#xff0c;体验 litedb 基本的 crud 操作。 LiteDB 是一款轻量级、快速且免费的 .NET NoSQL 嵌入式数据库&#xff0c;专为小型本地应用程序设计。它以单一数据文件的形式提供服务&#xff0c;支持文档存储和查询功能&#xff0c;适用于桌面应用、移动…...

《进程隔离机制:C++多进程编程安全的坚固堡垒》

在当今数字化时代&#xff0c;软件系统的安全性愈发成为人们关注的焦点。尤其是在 C多进程编程领域&#xff0c;如何确保进程间的安全交互与数据保护&#xff0c;是每一位开发者都必须面对的重要课题。而进程隔离机制&#xff0c;犹如一座坚固的堡垒&#xff0c;为 C多进程编程…...

构建无障碍的数字世界:深入探讨Web可访问性指南

文章目录 前言一、什么是Web可访问性&#xff1f;二、Web内容无障碍指南&#xff08;WCAG&#xff09;三、ARIA属性的应用四、实践中的Web可访问性结语 前言 在当今高度互联的世界里&#xff0c;互联网已成为人们日常生活不可或缺的一部分。然而&#xff0c;对于数百万残障人士…...

跨境出海安全:如何防止PayPal账户被风控?

今天咱们聊聊那些让人头疼的事儿——PayPal账户被风控。不少跨境电商商家反馈&#xff0c;我们只是想要安安静静地在网上做个小生意&#xff0c;结果不知道为什么&#xff0c;莫名其妙账户就被冻结了。 但其实每个封禁都是有原因的&#xff0c;今天就来给大家分享分享可能的原…...

学习日记_20241123_聚类方法(MeanShift)

前言 提醒&#xff1a; 文章内容为方便作者自己后日复习与查阅而进行的书写与发布&#xff0c;其中引用内容都会使用链接表明出处&#xff08;如有侵权问题&#xff0c;请及时联系&#xff09;。 其中内容多为一次书写&#xff0c;缺少检查与订正&#xff0c;如有问题或其他拓展…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展&#xff1a;显示创建时间8. 功能扩展&#xff1a;记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

跨链模式:多链互操作架构与性能扩展方案

跨链模式&#xff1a;多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈&#xff1a;模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展&#xff08;H2Cross架构&#xff09;&#xff1a; 适配层&#xf…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣&#xff08;LeetCode&#xff09; 思路 右视图是指从树的右侧看&#xff0c;对于每一层&#xff0c;只能看到该层最右边的节点。实现思路是&#xff1a; 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

莫兰迪高级灰总结计划简约商务通用PPT模版

莫兰迪高级灰总结计划简约商务通用PPT模版&#xff0c;莫兰迪调色板清新简约工作汇报PPT模版&#xff0c;莫兰迪时尚风极简设计PPT模版&#xff0c;大学生毕业论文答辩PPT模版&#xff0c;莫兰迪配色总结计划简约商务通用PPT模版&#xff0c;莫兰迪商务汇报PPT模版&#xff0c;…...

【JVM】Java虚拟机(二)——垃圾回收

目录 一、如何判断对象可以回收 &#xff08;一&#xff09;引用计数法 &#xff08;二&#xff09;可达性分析算法 二、垃圾回收算法 &#xff08;一&#xff09;标记清除 &#xff08;二&#xff09;标记整理 &#xff08;三&#xff09;复制 &#xff08;四&#xff…...

django blank 与 null的区别

1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是&#xff0c;要注意以下几点&#xff1a; Django的表单验证与null无关&#xff1a;null参数控制的是数据库层面字段是否可以为NULL&#xff0c;而blank参数控制的是Django表单验证时字…...