思维图(GoT):解锁大模型解决复杂问题的能力
今天分享的是苏黎世联邦理工学院、华沙理工大学和Cledar联合发表的一篇文章:思维图:用大语言模型解决复杂问题
论文题目:Graph of Thoughts: Solving Elaborate Problems with Large Language Models
论文链接:https://arxiv.org/pdf/2308.09687
代码地址:https://github.com/spcl/graph-of-thoughts

论文概述
人类在进行思考时,不仅仅只遵循一条思维链,也不是像思维树那样尝试多种不同途径,而是会形成一个更加复杂的思维网。举个例子,一个人可能会先探索一条思维链,然后回溯再探索另一条,然后可能会意识到之前那条链的某个想法可以和当前链结合起来,取长补短,得到一个新的解决方案。类似地,大脑会形成复杂的网络,呈现出类似图的模式,比如循环模式。
这篇论文介绍了一种名为“思维图谱”(简称GoT)的框架,它通过将信息生成建模为任意图来增强大型语言模型的提示能力。在这个框架中,信息单元(即“LLM思考”)被视为顶点,而边对应于这些顶点之间的依赖关系。这种方法允许将任意的LLM思考结合起来,形成协同效应,提取整个思考网络的本质,或使用反馈循环增强思考。
论文核心
用户与LLM对话的过程主要包括用户消息(提示,prompts)和模型回复(思维、想法,thoughts),其中回复可以是一段文本(摘要任务)、一个文档(生成任务)或是一个代码块等。
为了充分激活语言模型的能力,通常会采用各种提示方法:

- 输入到输出提示(Input-Output, IO) :输入序列后,直接用语言模型获取输出,不添加任何中间思考过程。
- 思维链(Chain-of-Thought, CoT):在输入和输出之间引入多个中间思维状态,相比IO方法,可以显著提升语言模型在数学难题和通用推理任务上的性能。
- 多思维链(Multiple CoTs):独立生成多条思维链,然后根据预先指定的评分指标返回最佳输出结果的思维链。
- 思维树(Tree of Thoughts, ToT):ToT将过程或推理建模为一棵思维树来增强CoT-SC方法,单个树节点代表部分解决方案;基于给定的节点,思维生成器(thought generator)可以构造出一定数量的新节点,然后用状态评估器(state evaluator)为每个新节点生成相应评分。
思维图(GOT)框架
GoT可以被建模为一个四元组(G, T, E, R),其中G是“LLM推理过程”(即,上下文中的所有LLM思维及其关系),T是潜在的思维转换,E是用于获取思维得分的评估函数,R是用于选择最相关思维的排名函数。
LLM 的推理过程表示为(有向)图。该图中的每个节点对应于LLMs生成的单个想法,边代表想法之间的关系。也就是说,从思想a到b的边——或者图中的有向边 (a, b)——简单地告诉思想 b 是使用思想 a 作为输入生成的。与 ToT 提示类似,想法的确切定义取决于要解决的问题。更进一步,每个节点代表问题的(可能是中间的)解决方案,但我们可以在图中使用不同类型的节点来代表推理过程的不同方面(例如,计划与执行)。

- 提示器(Prompter):为LLM准备信息,主要负责把图结构编码进提示词中,GoT架构允许用户根据不同用例实现不同的图编码,提供全部图结构访问权限。
- 解析器(Parser):从LLM的回复中抽取信息,解析器为每个思维构造出一个思维状态(thought state),包含了抽取出的信息,并用于后续状态更新。
- 评分模块(Scoring):对LLM回复进行验证和评分,验证一个给定的LLM思维是否能够满足潜在的正确性条件,然后对思维进行打分。
- 控制器(Controller):协调整个推理过程,并决定如何继续推理,控制器中包含两个重要组件:图操作(the Graph of Operations, GoO)和图推理状态(GRS)。其中GoO是一个静态结构,指定了给定任务上的图分解过程,即规定了可用于LLM思维转换的操作,以及思维之间的顺序和依赖关系;每个操作对象都知道自己的前置操作和后继操作。GRS是一个动态结构,用来维护LLM推理过程进行中的状态,包括所有思维的历史及状态。
思维图(GOT)排序示例

使用到的操作包括:生成Generate、聚合Aggregate、评分Score、保留最优KeepBest。具体的prompt在论文中都有附录。
- 生成(Generate)操作:将包含64个元素的输入数组分割成四个每个包含16个元素的块,只重复一次。
- 排序(sort)操作:针对分割好的序列排序,k=3 表示对于每个包含16个元素的块,生成三种不同的排序结果。
- 评分(Score):为了获得评分,对于每一个数字0到9,计算输入数组与排序后的数组之间的差异,并将这10个值相加。差值为零表示已正确排序。
- 保留最优(KeepBest):保留最好的排序序列。
- 聚合(Aggregate):聚合成最终的序列。
论文实验

与现有技术相比,在对排序任务进行评估时,可以发现与 CoT 、具有自洽性的 CoT 或 ToT 提示等技术相比,GoT 提示始终产生更少的错误。
论文总结
提示工程是大型语言模型(LLM)研究的中心新领域之一。它使得能够高效地使用LLM,无需任何模型更新。然而,设计有效的提示是一项具有挑战性的任务。人类的任务解决通常是非线性的,它涉及将中间解决方案合并为最终解决方案,或在发现新见解时改变推理的流程。在这项工作中,提出了“思维图”(GoT),使LLM能够有效地解决不同的任务,而无需任何模型更新。其关键的想法是将LLM推理建模为一个任意图,其中思维是顶点,思维之间的依赖关系是边。这使得能够进行新的思维转换,如聚合。并且和现有提示方案相比,如ToT,图提示的排序质量和成本都是最优的。
相关文章:
思维图(GoT):解锁大模型解决复杂问题的能力
今天分享的是苏黎世联邦理工学院、华沙理工大学和Cledar联合发表的一篇文章:思维图:用大语言模型解决复杂问题 论文题目:Graph of Thoughts: Solving Elaborate Problems with Large Language Models 论文链接:https://arxiv.or…...
使用winscp从windows访问Ubuntu进行文件传输
Ubuntu 系统上的准备工作 • 安装 SSH 服务器: 确保 Ubuntu 系统上已经安装了 SSH 服务器。如果没有安装,可以使用以下命令安装: sudo apt update sudo apt install openssh-server • 启动 SSH 服务: 确保 SSH 服务正在运行&a…...
Java全栈项目:实验室预约管理系统的设计与实现
一、项目介绍 实验室预约管理系统是一个基于Java全栈技术开发的Web应用系统,旨在提供便捷的实验室预约、管理和使用体验。本系统主要面向高校师生,实现实验室资源的智能化、信息化管理。 二、技术栈 前端技术 Vue.jsElement UIAxiosVue RouterVuex …...
使用 esrally race 测试 Elasticsearch 性能及 Kibana 可视化分析指南
前言: 在对 Elasticsearch 集群进行性能测试与调优的过程中,esrally 是官方推荐的测试工具。通过 esrally race 命令,我们可以模拟各种查询与索引负载,对集群进行基准测试。然而,仅看 esrally 的终端输出并不直观&…...
OpenAI 第七日 推出了一项新功能——ChatGPT的“Projects”
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
【小白51单片机专用教程】protues仿真AT89C51入门
课程特点 无需开发板0基础教学软件硬件双修辅助入门 本课程面对纯小白,因此会对各个新出现的知识点在实例基础上进行详细讲解,有相关知识的可以直接跳过。课程涉及protues基本操作、原理图设计、数电模电、kell使用、C语言基本内容,所有涉及…...
正则表达式——元字符匹配(单字符)
单字符匹配: ###注意事项:前面要加r:如(re.findall(r\w,字符串名)) #. :匹配任意一个字符 (.本身通过\.匹配) # [ ]: 匹配[ ]中的字符 # \d: 匹配数字 # \D: 匹配非数字 # \s: 匹配空白(空格) # \S:匹配非空白 # \w: 匹配单词字符(a…...
快速在远程服务器执行命令、批量在多个服务器执行命令(基于sshpass的自定义脚本fastsh)
在日常服务器操作中,很多时候我们需要同时操作多个服务器。特别对于那些每个服务器都需要操作相同命令的场景,不断的切换命令会话窗口会比较麻烦。基于此,编写了本文中的 fastsh 脚本用于轻度解决这种问题,提高一定的便利性。 使…...
【中间件介绍及案例分析】
中间件介绍及案例分析 一、中间件的定义 中间件是一种位于操作系统、网络和数据库之上,应用软件之下的软件。它的主要作用是为处于不同系统中的软件组件提供通用服务,使得这些软件组件能够更好地通信、协同工作,并且帮助开发人员更高效地构…...
CRMEB PHP多商户版DOCKER部署实战
#首先,制作docker 镜像# 官方有一个镜像,但是拉不来下,也不知道是没是没有维护,嘎了。只能自己动手做一个。 这里选择ubuntu 24 为基础,制作crmeb-mer的镜像,Dockerfile内容如下: # 使用官方…...
Node.js基础入门
1.Node.js 简介 Node 是一个让 JavaScript (独立)运行在服务端的开发平台,它让 JavaScript 成为与PHP、Python、Perl、Ruby 等服务端语言平起平坐的脚本语言。 发布于2009年5月,由Ryan Dahl开发,实质是对Chrome V8引擎进行了封装。 简单的说 Node.js 就是运行在服务端的…...
Hive——HQL数据定义语言
文章目录 Hive HQL数据查询语言更多大数据资源持续更新中。。。学习目标一、HQL数据定义语言(DDL)概述1、DDL语法的作用2、Hive中DDL使用☆ 创建数据库☆ 查询数据库☆ 切换数据库☆ 修改数据库☆ 删除数据库 二、Hive DDL建表基础1、完整建表语法树2、H…...
vLLM 教程上新!覆盖从入门到进阶 4 种应用方式;中文文档同步上线,0 帧起手加速大模型推理
如今,大语言模型 (LLM) 的发展正在从规模参数迭代升级拓展至应用场景的适配与创新,在这个过程中,其也暴露出一系列问题。例如,在推理环节的效率较低,处理复杂任务时耗时较长,难以满足对实时性要求较高的场景…...
Kubernetes# RBAC访问控制
目录 定义 配置对象 Role ClusterRole ServiceAccount RoleBinding ClusterRoleBinding 配置示例 定义 Kubernetes的运行是由多种类型的资源组合起来,每种资源各司其职完成整个集群的功能。那么自然也需要一套机制控制资源的访问权限,保证安全性…...
如何实现后端返回excel文件,在前端下载功能
前言 简单记录一下,excel文件导出下载功能 一、后端接口返回excel文件 把自己生成的workbook 以文件流的方式,返回前台 Workbook workbook employeeConfirmationDefectService.exportPoorPolishExcel(budatBegin, budatEnd, queryWrapper);//传输到…...
编程:一场不设防的智慧江湖
在数字的汪洋中,有一片从未设置年龄禁区的领地——编程世界。许多人会问:35岁了,还能学编程吗?答案是:不仅能学,还能学得很精彩。 时光荏苒,科技浪潮汹涌澎湃。曾经,人们以为编程是…...
电脑游戏运行时常见问题解析:穿越火线提示“unityplayer.dll丢失”的修复指南
电脑游戏运行时常见问题解析:穿越火线提示“unityplayer.dll丢失”的修复指南 在探索电脑游戏的无限乐趣时,我们时常会遇到一些不期而遇的挑战。今天,我们将聚焦于一个常见的游戏运行错误——穿越火线(或其他使用Unity引擎的游戏…...
【C++】CUDA线程在全局索引中的计算方式
文章目录 1. 一维网格一维线程块2. 二维网格二维线程块3. 三维网格三维线程块4. 不同组合形式4.1 一维网格一维线程块4.2 一维网格二维线程块4.3 一维网格三维线程块4.4 二维网格一维线程块4.5 二维网格二维线程块4.6 二维网格三维线程块4.7 三维网格一维线程块4.8 三维网格二维…...
【笔记】C语言转C++
网课链接:【C语言 转 C 简单教程】 https://www.bilibili.com/video/BV1UE411j7Ti/?p27&share_sourcecopy_web&vd_source4abe1433c2a7ef632aeed6a3d5c0b22a 网课老师B站id:别喷我id 视频总时长:01:55:27 以下笔记是我通过此网课整理 建议先…...
锂电池SOH预测 | 基于BiGRU双向门控循环单元的锂电池SOH预测,附锂电池最新文章汇集
锂电池SOH预测 | 基于BiGRU双向门控循环单元的锂电池SOH预测,附锂电池最新文章汇集 目录 锂电池SOH预测 | 基于BiGRU双向门控循环单元的锂电池SOH预测,附锂电池最新文章汇集预测效果基本描述程序设计参考资料 预测效果 基本描述 锂电池SOH预测 | 基于Bi…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...
DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...
基于TurtleBot3在Gazebo地图实现机器人远程控制
1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...
Golang——9、反射和文件操作
反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一:使用Read()读取文件2.3、方式二:bufio读取文件2.4、方式三:os.ReadFile读取2.5、写…...
API网关Kong的鉴权与限流:高并发场景下的核心实践
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 在微服务架构中,API网关承担着流量调度、安全防护和协议转换的核心职责。作为云原生时代的代表性网关,Kong凭借其插件化架构…...
