一文总结提示工程框架,除了CoT还有ToT、GoT、AoT、SoT、PoT
夕小瑶科技说 原创
编译 | 谢年年
大语言模型LLM被视为一个巨大的知识库,它可以根据你提出问题或陈述的方式来提供答案。就像人类可能会根据问题的不同提供不同的答案一样,LLM也可以根据输入的不同给出不同的答案。因此,你的问题或陈述方式就显得非常重要。
如何引导大语言模型给出更恰当的答案,是最近研究的热点。经常用到的方法如让大模型扮演一个角色,或是给出几个示例都可以引导大模型给出更好的答案。除此之外还有一直以来很火热的思维链的方法也是值得尝试的。
在这篇文章中,我们总结了各种增强LLM推理的提示工程框架,包括:
-
Chain-of-Thought[1]
-
Chain-of-Thought-Self-Consistency[2]
-
Tree-of-Thoughts[3]
-
Graph-of-Thoughts[4]
-
Algorithm-of-Thoughts[5]
-
Skeleton-of-Thought[6]
-
Program-of-Thoughts[7]
一起来看看吧~
大模型研究测试传送门
GPT-4传送门(免墙,可直接测试,遇浏览器警告点高级/继续访问即可):
https://gpt4test.com
Chain-of-Thought思维链
与其直接输出答案,不如为语言模型提供中间推理示例来指导其响应。
思维链(CoT) 被认为最具开拓性和影响力的提示工程技术之一,它可以增强大型语言模型在决策过程中的表现。
与传统的提示方法强调直接的输入和输出互动不同,CoT迫使模型将推理过程划分为中间步骤。这种方法类似于人类的认知过程,将复杂的挑战分解为更小、更易于管理的部分。
▲Chain-of-Thought Prompting, source: Wei et al. (2022)
如上图中的例子,对于一个数学问题:“罗杰拥有5个网球,随后购买了2罐网球,每个罐含有3个球。他现在拥有多少个网球?”我们可以通过逐步分析来解答这个问题。
-
首先,罗杰最初有5个球。
-
然后,他购买了2罐网球,每个罐子里有3个球,所以总共有6个球。
-
将这些值相加,5+6,得到11个球。
通过这种逐步分析推理的方式,我们无需额外的训练数据或修改模型的操作,就可以提高模型的准确性。
Chain-of-Thought-Self-Consistency思维链自洽性
构建多个思维链,对每个思维链进行评估,最终选择最有效、最连贯的思维链。
思维链自洽性是对CoT思想的延续。这种方法在响应查询时启动多个并发推理路径,并在最终确定答案之前应用加权机制。这种方法类似于传统机器学习中的集成技术,适用于大型语言模型中的思维序列。
Tree-of-Thoughts思维树
以树状形式展开思维链。允许回溯,探索从一个基本想法产生的多个推理分支。
思维树(ToT) 是一种通过将复杂问题分解为更易于解决的小问题,为LLM推理提供了一个更结构化的提示框架。
与在链中推理的CoT不同,ToT以树的形式组织其解决问题的策略。每个节点都被称为“思维”,是一个连贯的语言序列,是通往最终答案的一步。
通过将问题划分为离散的“思想”单元——从填字游戏中的一系列简短单词到数学方程的一个组成部分——ToT确保问题的每个阶段都得到系统的解决。
ToT的优势在于其有条不紊的组织。首先,系统会将一个问题分解,并生成一个潜在推理步骤或“思维”候选者的列表。然后,对这些想法进行评估,系统会衡量每个想法产生所需解决方案的可能性。
为了帮助模型识别最有效的思维序列,系统使用了常用的搜索算法,比如广度优先搜索(BFS)和深度优先搜索(DFS)。
ToT的重要性在于它的整体设计、适应性和效率都很高。其中,思维链提示是ToT框架中的一个特定实例。它的模块化性质意味着各个组件可以独立运行,包括问题的初始分解和所使用的搜索算法。
Graph-of-Thoughts思维图谱(GoT)
将树结构演化为直接非循环图,引入了自我循环。自我循环可以巩固一条特定的思路,也可以将多个想法聚合成一个连贯的思路。
思维图(GoT)框架是CoT和ToT方法的更进一步。
GoT框架的核心是将思想概念化为有向无循环图(DAG)中的顶点。
在这种情况下,每个顶点都对应于输入刺激引发的特定想法或解决方案,无论是初步的、中间的还是最终的。
图中的有向边描述了这些思想之间的相互依存关系。具体地说,如果一条边从思维t1延伸到t2,则表示t2是基于t1构思的。
这种系统化允许思想的多样性,因为节点可以分为不同的类别,如“计划”或“结果”。
▲Graph-of-Thoughts, source: Besta et al. (2023)
GoT的新颖之处在于它能够对这些想法进行转换,进一步完善推理过程。 主要的转变包括
-
聚合,即将几个想法融合成一个统一的想法;
-
精化,对单个思想进行连续迭代,以提高其精度;
-
生成,有利于从现有思想中产生新的思想。
这种转换强调推理路线的融合,相对于之前的CoT或ToT模型,提供了更复杂的观点。
此外,GoT引入了一个评估维度,通过评分和排名来对每个单独的想法进行评估。每个想法都由顶点表示,并根据其相关性和质量进行评估。
评估过程中,考虑了整个推理链,并分配了可能与图中其他顶点相关的分数。
这个框架还允许系统根据分数对这些想法进行分级,这对于确定哪些想法值得优先考虑或实施非常有用。
Algorithm-of-Thoughts思维算法(AoT)
维护单个不断发展的上下文链,消除了对思维树中冗余查询的需求。它探索了一条多变的推理之路。
ToT和GoT是通过基于搜索的机制来解决LLM推理的挑战的。它们能够生成许多图形形式的推理路径。然而,这两种方法都非常依赖于大量的LLM查询。有时,单个问题的查询数量甚至可以达到数百个。这导致了计算效率的下降。
▲Algorithm-of-Thoughts。每个盒子代表一个不同的想法。绿色是保留的链,而红色则是弃掉的链。注:ToT有多个路径,而AoT保持一个路径
思维算法(AoT) 是一种创新的方法,它具有动态和可变的推理路径。AoT的核心思想是通过不断演化和改进思考过程,从而达到更好的推理结果。通过维持一个单一的不断发展的思维上下文链,AoT巩固了思想探索,提高了效率并减少了计算开销。这种方法的优势在于它能够灵活地适应不同的问题和情境,并且能够根据需要进行调整和优化。
除此之外,受“LLM遇到熟悉的新问题时,偶尔会求助于以前的解决方案”启发,AoT吸收了上下文中的例子,从经过时间考验的搜索算法中提取,如深度优先搜索(DFS)和广度优先搜索(BFS)。通过模拟算法行为,AoT强调了实现成功结果和从失败尝试中收集见解的重要性。
AoT包括四个主要组成部分:
1)将复杂问题分解为可理解的子问题,同时考虑它们的相互关系和单独解决的容易程度;
2)以连续和不间断的方式为这些子问题提出连贯的解决方案;
3)直观地评估每个解决方案或子问题的可行性,而不依赖于明确的外部提示;
4)根据上下文示例和算法指南,确定最有希望探索或回溯的路径。
通过使用AoT,我们可以更好地理解和解决复杂的问题,提高我们的思考能力和创造力。
Skeleton-of-Thought思维框架(SoT)
首先生成一个答案蓝图,然后并行地充实细节,从而减少生成完整答案所需的时间。
思维框架(SoT)范式的独特设计主要是为了减少端到端生成延迟的挑战,而不是为了增强大型语言模型(LLM)的推理能力。
这种方法采用双阶段方法,首先制定答案的初步蓝图,然后进行全面扩展。
在最初的骨架阶段中,系统不会生成全面的响应,而是提示模型生成简洁的答案骨架。通过精心制作的骨架模板,这种缩写表达抓住了预期答案的核心元素,从而为下一阶段奠定了基础。
在接下来的扩展阶段中,LLM系统会对答案骨架中的每个组成部分进行放大。它利用点扩展提示模板,同时阐述骨架的每个片段。
这种二分法将生成过程分为两个步骤:首先是生成初步的骨架公式,然后是并行进行详细扩展。这种方法不仅可以加快响应生成的速度,还可以努力维护输出的一致性和准确性。
Program-of-Thoughts 程序思维(PoT)
将问答背后的推理过程公式化为一个可执行程序,将程序解释器输出作为最终答案的一部分。
思维程序(PoT)是一种独特的LLM推理方法。它不仅仅是生成自然语言答案,而是要求创建一个可执行程序,可以在Python等程序解释器上运行,从而产生实际的结果。
与直接模型相比,这种方法强调将推理分解为顺序步骤,并将语义与变量相关联的能力。因此,PoT提供了一个更清晰、更具表达力和基础的答案推导模型,提高了准确性和理解力,尤其是对于需要进行数值计算的数学类型逻辑问题。
需要注意的是,PoT的程序执行不一定针对最终答案,而是可以作为最终答案的中间步骤的一部分。
▲Comparison between CoT and PoT
结语
在人工智能领域的不断发展中,思维链等结构化推理框架的出现极大地改变了我们对大型语言模型的认识和应用方式。它们代表了一种模型的转变,这种模型不仅可以提供信息反馈,还可以进行复杂的推理,类似于人类的思维过程,这些框架有着无限的潜力。
想象一下,一个人工智能不仅可以生成准确的答案,还可以生成强大的可编程解决方案,甚至能够可视化自己的思维过程,使得人工智能与人类的合作更加无缝。在未来,大型语言模型将成为解决问题、创造力和决策的重要伙伴,推动科技发生重大转变。
参考资料
[1]https://arxiv.org/abs/2201.11903
[2]https://arxiv.org/abs/2203.11171
[3]https://arxiv.org/abs/2305.10601
[4]https://arxiv.org/abs/2308.09687
[5]https://arxiv.org/abs/2308.10379
[6]https://arxiv.org/abs/2307.15337
[7]https://arxiv.org/abs/2211.12588
[8]https://towardsdatascience.com/something-of-thought-in-llm-prompting-an-overview-of-structured-llm-reasoning-70302752b390
相关文章:
一文总结提示工程框架,除了CoT还有ToT、GoT、AoT、SoT、PoT
夕小瑶科技说 原创 编译 | 谢年年 大语言模型LLM被视为一个巨大的知识库,它可以根据你提出问题或陈述的方式来提供答案。就像人类可能会根据问题的不同提供不同的答案一样,LLM也可以根据输入的不同给出不同的答案。因此,你的问题或陈述方式就…...
Java面试笔试acm版输入
首先区分scanner.nextInt()//输入一个整数,只能读取一个数,空格就停止。 scanner.next()//输入字符串,只能读取一个字符串,空格就停止,但是逗号不停止。 scanner.nextLine() 读取一行,换行停止,…...
新手怎样快速上手接口测试?掌握这几个知识点直接起飞!
接口测试是测试系统组件间接口的一种方式,接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是检查数据的增删改查操作,以及系统之间的逻辑关系等。 接口的几种类型 接口的类型包括:post ,get&…...
IDEA 启动 java web 老项目
背景:一套 java web 老代码,使用 eclipse 工具开发。内网,无 eclipse 开发工具,只有 IDEA。 代码目录结构如下: demo/.settings/* demo/src/com/demo/controller/* demo/webapp/js/* demo/webapp/jsp/* demo/webapp/M…...
软路由和硬路由的区别是什么,性价比与可玩性分析
软路由和硬路由是两种不同类型的路由器设备,它们在基本原理、功能、性能和灵活性等方面存在一些区别: 硬件:软路由是基于一台普通的计算机或服务器,通过软件来实现路由器的功能;而硬路由是专门设计的硬件设备ÿ…...
《TCP/IP网络编程》阅读笔记--多线程服务器端的实现
目录 1--多线程的优点 2--进程和线程的差异 3--线程创建 4--线程使用 5--线程安全问题 6--互斥量 7--信号量 8--线程销毁 9--多线程并发聊天程序 9-1--服务器端 9-2--客户端 9-3--测试结果 1--多线程的优点 多进程服务器的缺点: ① 创建进程的过程会带来…...
修改el-card的header的背景颜色
修改el-card的header的背景颜色 1.修改默认样式 好处是当前页面的所有的el-card都会变化 页面卡片: <el-card class"box-card" ><div slot"header" class"clearfix"><span>卡片名称</span><el-button s…...
ubuntu系统中查看打开的端口
要查看Ubuntu系统中已打开的端口及其相关信息,可以使用以下方法: 打开终端(Terminal)。 运行以下命令以查看当前系统中的端口使用情况: sudo netstat -tuln这将显示所有已打开的端口及其相关信息,包括监听…...
Datax从mysql同步数据到HDFS
在实际使用Datax的时候,比较常用的是同步业务数据(mysql中的数据)到HDFS来实现数仓的创建,那么怎么实现呢?我们一步步来实现(基于Datax 3.0.0) 1、检查环境,需要安装完一个Datax&am…...
使用 Selenium 或其他工具模拟浏览器使用及语法代码
使用Selenium模拟浏览器使用的代码示例如下: from selenium import webdriverfrom selenium.webdriver.common.keys import Keys# 创建浏览器驱动实例driver webdriver.Chrome()# 打开网页driver.get("https://www.example.com")# 查找并填写表单search_…...
华为手机如何开启设置健康使用手机模式限制孩子玩手机时间?
华为手机如何开启设置健康使用手机模式限制孩子玩手机时间? 1、在手机上找到「设置」并点击打开; 2、在设置内找到「健康使用手机」并点击进入; 3、开启健康使用手机后,选择孩子使用; 4、在健康使用手机内,…...
【Linux】线程池 | 自旋锁 | 读写锁
文章目录 一、线程池1. 线程池模型和应用场景2. 单例模式实现线程池(懒汉模式) 二、其他常见的锁1. STL、智能指针和线程安全2. 其他常见的锁 三、读者写者问题1. 读者写者模型2. 读写锁 一、线程池 1. 线程池模型和应用场景 线程池是一种线程使用模式。线程过多会带来调度开…...
[网鼎杯 2020 青龙组]bang 题解
写一道安卓题的WP 首先你需要一个root机,使用真机或者虚拟机,根据网上的教程刷机并获取root 我使用真机调试,pixel2 讲安卓包下载到真机 在PC端配置frida 对应版本的server传送到/data/local/tmp 然后进行以上操作,启动server …...
创建环境时提示:ERROR conda.core.link:_execute(502)
创建环境时提示:ERROR conda.core.link:_execute(502) 创建环境最后Executing transaction,失败,提示如下: Preparing transaction: done Verifying transaction: done Executing transaction: failed ERROR conda.core.link:_e…...
Python150题day07
1.5集合练习题 集合间的运算 lst1 [1, 2, 3, 5, 6, 3, 2] lst2 [2, 5, 7, 9] 哪些整数既在Ist1中,也在Ist2中哪些整数在Ist1中,不在Ist2中两个列表一共有哪些整数 虽然题目问的是两个列表之间的问题,但是用列表解答的效率很低,…...
LeetCode 2596. 检查骑士巡视方案
【LetMeFly】2596.检查骑士巡视方案 力扣题目链接:https://leetcode.cn/problems/check-knight-tour-configuration/ 骑士在一张 n x n 的棋盘上巡视。在有效的巡视方案中,骑士会从棋盘的 左上角 出发,并且访问棋盘上的每个格子 恰好一次 。…...
大数据学习1.0-目录
学习内容持续更新ing 1.大数据学习1.1-Centos8虚拟机安装 大数据学习1.0-Centos8虚拟机安装_汉卿HanQ的博客-CSDN博客 2.大数据学习1.2-yum配置 大数据学习1.2-yum配置_汉卿HanQ的博客-CSDN博客 3.大数据学习1.3-xShell配置jdk 大数据学习1.3-xShell配置jdk_汉卿HanQ的博客…...
无涯教程-JavaScript - POWER函数
描述 POWER函数返回加到幂的数字的输出。 语法 POWER (number, power)争论 Argument描述Required/OptionalNumber 基数。 它可以是任何实数。 RequiredPowerThe exponent to which the base number is raised.Required Notes 可以使用" ^"运算符代替POWER来指示…...
ChatGPT:解释Java中 ‘HttpResponse‘ 使用 ‘try-with-resources‘ 的警告和处理 ‘Throwable‘ 打印警告
ChatGPT:解释Java中 ‘HttpResponse’ 使用 ‘try-with-resources’ 的警告和处理 ‘Throwable’ 打印警告 我在IDEA中对一个函数的警告点击了ignore,怎么撤回这个呢 ChatGPT: 要撤回在IDEA中对一个函数的警告的忽略,您可以按照以…...
Linux编辑器-gcc的使用
一:背景知识 1.预处理(头文件展开、去注释、宏替换、条件编译) 2.编译(由C生成汇编) 3.汇编(生成及其可识别代码) 4.连接(生成可执行文件或库文件) 二:gcc…...
第16篇ESP32 platformio_arduino框架 wifi联网_连接WiFi热点并连接tcp server收发数据进行通讯
第1篇:Arduino与ESP32开发板的安装方法 第2篇:ESP32 helloword第一个程序示范点亮板载LED 第3篇:vscode搭建esp32 arduino开发环境 第4篇:vscodeplatformio搭建esp32 arduino开发环境 第5篇:doit_esp32_devkit_v1使用pmw呼吸灯实验 第6篇:ESP32连接无源喇叭播…...
day1| 704. 二分查找、27. 移除元素
704. 二分查找 题目链接:https://leetcode.cn/problems/binary-search/ 文档讲解:https://programmercarl.com/0704.%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE.html 视频讲解:https://www.bilibili.com/video/BV1fA4y1o715 1、二分法的前提 这道…...
R绘制箱线图
代码大部分来自boxplot()函数的帮助文件,可以通过阅读帮助文件,调整代码中相应参数看下效果,进而可以理解相应的作用,帮助快速掌握barplot()函数的用法。 语法 Usage(来自帮助文件) barplot(height, ...)## Default S3 method: …...
利用Audit审计系统行为
标题利用Audit审计系统行为 Linux Audit守护进程是一个可以审计Linux系统事件的框架 这个框架本身有数个组件,包括内核、二进制文件及其他文件。 1.内核audit:钩在内核中来捕获事件并将它们发送到auditd。 2.二进制文件 auditd:捕捉事件并…...
uniapp:不同权限设置不同的tabBar
1、在pages.json里,将所有tabBar涉及的页面都加进来。 我这里使用username来动态显示tabBar。 jeecg用户显示:首页,订单,消息,发现,我的,一共5个tabBar。 admin用户显示:首页&…...
如何将本地的项目上传到Git
一、GitHub or GitLab or Gitee创建一个新的仓库 二、仓库路径创建成功后,将本地项目上传到git 1. 进入本地项目所在文件夹位置,右击 2.出现git命令框 输入git init 在当前项目的目录中生成本地的git管理(会发现在当前目录下多了一个.git文件…...
[php] 文件上传的一个项目emmm
项目完整地址 <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><title>上传文件</title><link href"./css/bootstrap.min.css" rel"stylesheet"><style>font-face {fo…...
uniapp-时间格式和距离格式的转换
时间格式的转换 第一种是把 YYYY-MM-DD hh:mm:ss 转换成 MM月DD日 第二种是把 hh:mm:ss 转换成 hh:mm /*** 格式化时间 1* 把传入的完整时间分为 MM月DD日 的格式* returns*/ export function formatDate(timeStr) {const date new Date(timeStr);const month (date.ge…...
【卖出备兑看涨期权策略(Covered_call)】
卖出备兑看涨期权策略(Covered_call) 卖出备兑看涨期权策略是一种最基本的收入策略,该策略主要操作就是在持有标的资产的同时卖出对应的看涨期权合约,以此来作为从持有的标的资产中获取租金的一种方法。如果标的资产的价格上涨到…...
【校招VIP】测试算法考点之智力分析
考点介绍: 智力题(逻辑分析题)准备校招的同学们好好准备下,测试笔试中经常遇到。 测试算法考点之智力分析-相关题目及解析内容可点击文章末尾链接查看! 一、考点试题 1.5个囚犯在装有100颗豆子的袋子里摸,他们谁的存活几率大? 5个囚犯,分…...
服务器免费/中山seo关键词
目录1. Chrome DevTools功能简介2. 使用Elements调试DOM2.1 查看编辑HTML和DOM2.2 在Console中访问节点2.3 在DOM中断点调试3. 调试样式及CSS3.1 查看和编辑CSS3.2 在元素中动态添加类与伪类3.3 快速调试CSS数值及颜色图形动画等4. 使用 Console 和 Sources 调试 JavaScript4.1…...
宜昌云网站建设/长沙seo外包
前几天在家没事干,花了点心思折腾了两个小东西。第一个射击游戏是跟着pygame官网上下载的一个游戏边学习源码边抄的,抄了个开头就变成自己乱搞加参考了。。虽然有心想装下蒜,但不知道那些协议什么的怎么搞。只能在这提一下了。。 第二个是以前…...
wordpress 获取主题路径/今日油价92汽油
关注“心仪脑”查看更多脑科学知识的分享。 许多研究者使用EEG这项技术开展科研工作时,经常会遇到这样一个问题:有很好的idea但苦于缺乏足够的数据支持和验证。尤其是在2019 - 2020年COVID-19期间,许多高校实验室处于封闭状态,不…...
北京一诺互联科技有限公司/网络优化包括
知识点: 1.HTTP请求分为俩种: GET方式和POST方式 2.负载均衡常用调度算法: RR:最简单的一种算法,轮询调度。 LC:最小连接数,根据后端的节点连接数大小动态分配前端请求。 SH:基于来…...
可以做动画的网站都有哪些软件/网络营销招聘
在服务器端程序开发领域,性能问题一直是备受关注的重点。业界有大量的框架、组件、类库都是以性能为卖点而广为人知。然而,服务器端程序在性能问题上应该有何种基本思路,这个却很少被这些项目的文档提及。本文正式希望介绍服务器端解决性能问…...
怎么做购物型网站/seo系统培训哪家好
修改cobbler的默认密码: 用 openssl 生成一串密码后加入到 cobbler 的配置文件(/etc/cobbler/settings)里,替换 default_password_crypted 字段:# openssl passwd -1 -salt random-phrase-here 1234567890$1$random-…...