教授LLM思考和行动:ReAct提示词工程
ReAct:论文主页
原文链接:Teaching LLMs to Think and Act: ReAct Prompt Engineering
在人类从事一项需要多个步骤的任务时,而步骤和步骤之间,或者说动作和动作之间,往往会有一个推理过程。让LLM把内心独白说出来,然后再根据独白做相应的动作,来提高LLM答案的准确性。---ReAct的核心思想
普林斯顿大学的教授和谷歌的研究人员最近发表了一篇论文,描述了一种新颖的提示工程方法,该方法使大型语言模型(例如 ChatGPT)能够在模拟环境中智能地推理和行动。 这种 ReAct 方法模仿了人类在现实世界中的运作方式,即我们通过口头推理并采取行动来获取信息。 人们发现,与各个领域的其他提示工程(和模仿学习)方法相比,ReAct 表现良好。 这标志着朝着通用人工智能(AGI)和具体语言模型(像人类一样思考的机器人)迈出了重要一步。
1、背景
在本节中,我将讨论大型语言模型、提示工程和思维链推理。
1.1 大型语言模型
大型语言模型 (LLM) 是一种机器学习 Transformer 模型,已在巨大的语料库或文本数据集(例如互联网上的大多数网页)上进行训练。 在训练过程中,需要大量时间(和/或 GPU)、能源和水(用于冷却),采用梯度下降来优化模型参数,使其能够很好地预测训练数据。
本质上,LLM学习在给定一系列先前单词的情况下预测最可能的下一个单词。 这可用于执行推理(查找模型生成某些文本的可能性)或文本生成,ChatGPT 等LLM用它来与人交谈。 一旦 LLM 完成训练,它就会被冻结,这意味着它的参数被保存,并且不会向其训练数据添加输入或重新训练 - 这样做是不可行的,正如我们从 Microsoft 的 Tay 聊天机器人成为纳粹分子中了解到的那样 ,无论如何,最好不要向用户学习。
值得注意的是,LLM仍然从他们的训练数据中学习到偏见,而 ChatGPT 背后的 OpenAI 必须添加保护措施——使用来自人类反馈的强化学习 (RLHF)——试图防止模型生成有问题的内容。 此外,由于LLM默认情况下只是根据他们所看到的内容生成最有可能的下一个单词,而不进行任何类型的事实检查或推理,因此他们很容易产生幻觉,或编造事实和推理错误(例如在做时) 简单的数学)。
自从 ChatGPT 的公开发布风靡全球以来,LLM 就一直风靡一时。 这些模型的新兴智能及其在我们生活的许多方面的应用使它们成为一种非常受欢迎的工具,每个公司都想从中分一杯羹。 除了聊天机器人、编码和写作助手之外,LLM还被用来创建与模拟环境(包括互联网)交互的代理。 ReAct 就是一个如何将LLM转变为此类代理的示例。
1.2 提示工程
如果你尝试过 ChatGPT,就会知道有时它会拒绝回答问题或回答不好,但如果你重新表述问题,可能会得到更好的结果。 这是提示工程的艺术——通过修改你的输入,让提示工程按照你想要的方式做出反应。
我们的想法是,LLM接受了如此多的人类生成数据的训练,以至于他们几乎可以被视为人类——而不是在特定问题领域训练新模型,而是可以尝试从现有的冻结模型中得出正确的响应。 LLM 通过提出一些事实来“唤起它的记忆”或告诉它一个新领域。 这称为上下文学习(in-context learning),主要有两种类型:零样本学习和少样本学习。 零样本学习为LLM提供了一个提示,其中可以在问题/命令之前包含一些背景信息,以帮助LLM找到良好的答案。 少样本学习为LLM提供了一些提示示例和理想的响应,然后提出了一个新的提示,LLM将以示例的形式做出响应。
提示工程是自然语言处理 (NLP) 的未来。 该领域正在从定制模型转向定制提示,因为LLM比任何人无需花费大量时间和精力就可以自己制作的东西要好得多。 当LLM与正确的提示工程技术相结合时,它通常可以做专业模型可以做的任何事情。
1.3 思维链推理
思想链推理是一种流行的提示工程技术,旨在解决推理错误。 它涉及向LLM提供一个或多个示例(少量学习),说明如何通过口头推理解决问题,然后为其提供一个不同的问题以这种方式解决。 这可以帮助解决推理错误,但它仍然会产生幻觉,而幻觉的“事实”可以通过推理传播,导致模型无论如何都得出错误的结论。
在下面的 ReAct 论文中的图片中,针对需要多个推理步骤才能弄清楚的问题,将标准提示(仅提出问题)与思维链 (CoT) 提示(尽管未显示附加输入)进行了比较 。
标准提示的LLM猜测是 iPod,这是不正确的。 有CoT提示的LLM有更令人信服的回应,但它仍然是错误的。 尽管推理无懈可击,LLM却幻觉 Apple Remote 最初是为与 Apple TV 配合使用而设计的(它实际上是为 Front Row 项目设计的),这导致其得出错误的结论。

Yao et al. (2023)
由于幻觉的问题,CoT 推理是不可靠的。 如果LLM要成为一个有用的工具,他们就不能左右编造事实,因为那样我们就永远不能相信他们,最好自己做研究。 ReAct 旨在通过允许LLM采取搜索维基百科等行动来解决这个问题,以便从中找到事实和理由。
2、方法
与思维链推理一样,ReAct 是一种提示工程方法,它使用小样本学习来教导模型如何解决问题。 CoT 应该模仿人类思考问题的方式,ReAct 也包含这种推理元素,但它更进一步,允许代理文本操作,使其也与其环境进行交互。
人类使用言语推理(说话或思考)来帮助我们制定策略和记住事情,但我们也可以采取行动来获取更多信息并实现我们的目标。 这是ReAct 的基础。 ReAct 提示包括带有操作的示例、通过采取这些操作获得的观察结果以及人类在该过程中各个步骤中转录的想法(推理策略)。
LLM学习模仿这种交叉思考和行动的方法,使其成为其环境中的代理。 下面是 ReAct 代理如何运行的说明,其中有一个以等宽字体显示的悲惨示例(按想法 -> 行动 -> 观察顺序)。

重要的是要记住,观察结果不是由 LLM 生成的,而是由环境生成的,环境是一个单独的模块,LLM 只能通过特定的文本操作与之交互。 因此,为了实现ReAct,你需要:
- 一个环境,它执行文本操作(从一组可以根据环境的内部状态更改的潜在操作中)并返回文本观察。
- 一个输出解析器框架,一旦代理编写了有效的操作,它就会停止生成文本,在环境中执行该操作,并返回观察结果(将其附加到迄今为止生成的文本并提示LLM)。
- 人类生成的环境中混合思想、行动和观察的示例,用于小样本学习。
示例的数量及其细节由你决定。 ReAct 提示中使用的示例的开头如下所示。

Yao et al. (2023)
在这里,你可以看到想法、行动和观察都被清楚地标记为这样,并且这些行动使用特殊的格式 - 查询在括号中 - 这样代理将学习以这种方式编写它们,然后输出解析器可以 轻松提取查询。
3、结果
对于他们冻结的LLM,yao等人 使用PaLM-540B。 他们使用该LLM在两项知识密集型推理任务和两项决策任务上测试了 ReAct 提示。 我将依次讨论每一个。
3.1 知识密集型推理任务
此任务区域中使用的两个域是 HotPotQA(使用维基百科段落进行多跳问答)和 FEVER(事实验证)。 该代理能够使用以下操作与特意简单的维基百科 API 进行交互:
- 搜索:按名称或最相似结果列表查找页面。
- 查找:在页面中查找字符串。
- 完成:以答案结束任务。
在这些领域中,ReAct 与以下技术进行了比较:
- Standard:提示中不包含思考、行动或观察。
- CoT:提示中不包含行动或观察。
- CoT-SC(自洽):CoT 提示。 对LLM的一定数量的回复进行抽样,并选择大多数作为答案。
- Act:提示中不包含思考。
- ReAct -> CoT-SC:以 ReAct 方式启动,但如果开始不稳定,则切换到 CoT-SC。
- CoT-SC -> ReAct:以 CoT-SC 启动,但如果开始不稳定,则切换到 ReAct。
成功是通过 HotPotQA 中 FEVER 和 EM 的准确性来衡量的。 下图显示了每个域中的结果作为 CoT-SC 采样响应数量的函数。

Yao et al. (2023)
ReAct 在 HotPotQA 中表现不佳,但在 FEVER 中表现优于 CoT。 ReAct 比 CoT 更不容易产生幻觉,但推理错误率更高。 尽管 ReAct 确实有这个缺点,但 ReAct -> CoT-SC 和 CoT-SC -> ReAct 方法是这组方法中最成功的。 下面是本文开头的同一个问题以及 ReAct 的回答,这是正确的。

Yao et al. (2023)
3.2 决策任务
此任务区域中使用的两个域是 ALFWorld 和 WebShop。 我将分别解释每个域。
ALFWorld 是一款具有现实环境的基于文本的游戏。 它具有用于在模拟世界中移动并与之交互的文本操作,例如“打开抽屉 1”。 智能体的目标可能是在房子里找到特定的物体,因此常识推理有助于了解通常会在哪里找到这样的物体。 ReAct 在此领域中比较的基线是:
- Act:提示中不包含思考。
- BUTLER:一种模仿学习方法。
- ReAct-IM(内心独白):只能思考环境以及距离目标有多近。
成功的衡量标准是达到目标的试验的百分比。 ReAct 的表现优于基线。
WebShop 是一个模拟在线购物网站,其数据是从亚马逊爬取的。 这是一个具有挑战性的领域,因为它有大量用于浏览网站和搜索产品的操作。 目标是找到符合用户规格的商品。 ReAct 在此领域中比较的基线是:
- Act:提示中不包含思考。
- IL:一种模仿学习方法。
- IL + RL:一种模仿和强化学习方法。
衡量成功的标准是所选项目与用户想要的隐藏项目的接近程度。 ReAct 的表现优于基线。
4、结束语
ReAct虽然由于其推理错误而本身并不完美,但它仍然是一种强大的提示工程方法,它克服了思想链推理的事实幻觉问题,并且还允许LLM成为可以与其环境交互的代理。 此外,它是一种非常可解释的方法,因为代理在其行动时输出其思维过程。
我相信 ReAct 是迈向通用人工智能 (AGI) 和具体语言模型(像人类一样思考的机器人)的一步。 如果机器人有一种方法可以根据熟悉的特征对外部环境进行建模并使用该模型创建提示,那么它就可以(至少尝试)在多种领域中自行行动,而无需人工制作的示例。 它还需要某种记忆,或者从经验中学习的能力,以使其变得更像人类。 目前尚不清楚 AGI 的创建是否会帮助或伤害人类,但具有常识知识的机器人,只要解决了推理错误和幻觉等错误,可能会对我们有很大帮助(作为消防员, 实例)。
LLM 代理已经商业化,并被用于各种任务,从创建网站到订购披萨。 还有非商业应用,比如毁灭人类。 我只希望这些工具也能发挥作用。 一个以找出如何解决世界问题为目标的智能体可能会很好。
相关文章:
教授LLM思考和行动:ReAct提示词工程
ReAct:论文主页 原文链接:Teaching LLMs to Think and Act: ReAct Prompt Engineering 在人类从事一项需要多个步骤的任务时,而步骤和步骤之间,或者说动作和动作之间,往往会有一个推理过程。让LLM把内心独白说出来&am…...
FPGA_工程_按键控制的基于Rom数码管显示
一 信号 框图: 其中 key_filter seg_595_dynamic均为已有模块,直接例化即可使用,rom_8*256模块,调用rom ip实现。Rom_ctrl模块需要重新编写。 波形图: 二 代码 module key_fliter #(parameter CNT_MAX 24d9_999_99…...
WordPress Plugin HTML5 Video Player SQL注入漏洞复现(CVE-2024-1061)
0x01 产品简介 WordPress和WordPress plugin都是WordPress基金会的产品。WordPress是一套使用PHP语言开发的博客平台。该平台支持在PHP和MySQL的服务器上架设个人博客网站。WordPress plugin是一个应用插件。 0x02 漏洞概述 WordPress Plugin HTML5 Video Player 插件 get_v…...
【Kotlin】Kotlin基本数据类型
1 变量声明 var a : Int // 声明整数类型变量 var b : Int 1 // 声明整数类型变量, 同时赋初值为1 var c 1 // 声明整数类型变量, 同时赋初值为1 val d 1 // 声明整数类型常量, 值为1(后面不能改变d的值) 变量命名规范如下。 变量名可以由字母、数字、下划线(_…...
UDP端口探活的那些细节
一 背景 商业客户反馈用categraf的net_response插件配置了udp探测, 遇到报错了,如图 udp是无连接的,无法用建立连接的形式判断端口。 插件最初的设计是需要配置udp的发送字符,并且配置期望返回的字符串, [[instances]] targets…...
拦截器配置,FeignClient根据业务规则实现微服务动态路由
文章目录 业务场景拦截器用法Open Feign介绍 业务场景 我们服务使用Spring Cloud微服务架构,使用Spring Cloud Gateway 作为网关,使用 Spring Cloud OpenFeign 作为服务间通信方式我们现在做的信控平台,主要功能之一就是对路口信号机进行管控…...
预测模型:MATLAB线性回归
1. 线性回归模型的基本原理 线性回归是统计学中用来预测连续变量之间关系的一种方法。它假设变量之间存在线性关系,可以通过一个或多个自变量(预测变量)来预测因变量(响应变量)的值。基本的线性回归模型可以表示为&…...
【人工智能】神奇的Embedding:文本变向量,大语言模型智慧密码解析(10)
什么是嵌入? OpenAI 的文本嵌入衡量文本字符串的相关性。嵌入通常用于: Search 搜索(结果按与查询字符串的相关性排序)Clustering 聚类(文本字符串按相似性分组)Recommendations 推荐(推荐具有…...
Redis + Lua 实现分布式限流器
文章目录 Redis Lua 限流实现1. 导入依赖2. 配置application.properties3. 配置RedisTemplate实例4. 定义限流类型枚举类5. 自定义注解6. 切面代码实现7. 控制层实现8. 测试 相比 Redis事务, Lua脚本的优点: 减少网络开销:使用Lua脚本&…...
ruoyi若依框架SpringSecurity实现分析
系列文章 ruoyi若依框架学习笔记-01 ruoyi若依框架分页实现分析 ruoyi若依框架SpringSecurity实现分析 文章目录 系列文章前言具体分析一、项目中的SpringSecurity版本二、登录认证流程分析三、权限鉴定四、退出登录五、SpringSecurity配置类 总结 前言 在ruoyi-vue若依框…...
Habitat环境学习四:Habitat-sim基础用于导航——使用导航网格NavMesh
如何使用导航网格NavMesh 官方教程1、NavMesh基础定义1.1 使用NavMesh的原因1.2 什么是NavMesh 2、NavMesh的使用方法2.1 获取自上而下Top down view视角地图2.2 在NavMesh中进行查询以及随机产生可导航点2.3 查找最短路径2.4 场景加载NavMesh2.5 重新计算并生成NavMesh2.6 什么…...
python学习笔记 -- 字符串
目录 一、输出字符串的格式 二、字符串的一些函数 1、len函数:字符串长度 2、查找字符所在位置index 3、某字符在字符串中的个数count 4、字符切片 对字符串进行翻转 -- 利用步长 5、修改大小写字母: 6、判断开头和结尾 7、拆分字符串 一、输出…...
2024年GPT如何发展?
2023 年,人工智能领域最具影响的莫过于 GPT-4、ChatGPT 了。 ChatGPT 凭一己之力掀起了 AI 领域的热潮,火爆全球,似乎开启了第四次工业革命。 ChatGPT 入选《Nature》2023 年度十大人物(Nature’s 10),这…...
从REPR设计模式看 .NET的新生代类库FastEndpoints的威力
📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!📢本文作者:由webmote 原创📢作者格言:新的征程,我们面对的不仅仅是技术还有人心,人心不可测,海水不可量,唯有技术,才是深沉黑夜中的一座闪烁的灯塔 !序言 又到了一年年末,春节将至…...
前端入门:(五)JavaScript 续
10. 浏览器存储 10.1 Cookie的概念和使用 Cookie是一种存储在用户计算机上的小型文本文件,用于跟踪和识别用户。Cookie通常用于存储用户的偏好设置、会话信息等,可以通过JavaScript进行读取和设置。 // 示例:设置和读取Cookie document.co…...
研究多态恶意软件,探讨网络安全与AI
前言 近期ChatGPT火遍全球,AI技术被应用到了全球各行各业当中,国内外各大厂商也开始推出自己的ChatGPT,笔者所在公司在前段时间也推出了自研的安全GPT,AI技术在网络安全行业得到了很多的应用,不管是网络安全研究人员、…...
linux驱动工作原理
linux或者windows驱动是如何对上和对下工作的,请用中文回答 在Linux系统中,设备驱动程序通过在/dev目录下创建文件系统条目与硬件通信。应用程序通过打开这些文件来获取描述符,以此来与设备交互。驱动程序内部使用主次设备号来标识设备。而在…...
Rust语言入门(第3篇)
引用与借用 上一篇中,我们介绍了rust的所有权概念,若直接传递变量做函数参数,堆上的变量就会失去所有权,而栈上变量则由于复制,仍有所有权。 fn main(){let b 3;makes_copy(b);println!("after using a variab…...
电脑服务器离线安装.net framework 3.5解决方案(错误:0x8024402c )(如何确定当前系统是否安装NET Framework 3.5)
问题环境: 日常服务的搭建或多或少都会有需要到NET Framework 3.5的微软程序运行框架,本次介绍几种不同的安装方式主要解决运行在Windows 2012 以上的操作系统的服务。 NET Framework 3.5 是什么? .NET Framework是微软公司推出的程序运行框架…...
Three.js学习8:基础贴图
一、贴图 贴图(Texture Mapping),也翻译为纹理映射,“贴图”这个翻译更直观。 贴图,就是把图片贴在 3D 物体材质的表面,让它具有一定的纹理,来为 3D 物体添加细节的一种方法。这使我们能够添加…...
【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...
提升移动端网页调试效率:WebDebugX 与常见工具组合实践
在日常移动端开发中,网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时,开发者迫切需要一套高效、可靠且跨平台的调试方案。过去,我们或多或少使用过 Chrome DevTools、Remote Debug…...
区块链技术概述
区块链技术是一种去中心化、分布式账本技术,通过密码学、共识机制和智能合约等核心组件,实现数据不可篡改、透明可追溯的系统。 一、核心技术 1. 去中心化 特点:数据存储在网络中的多个节点(计算机),而非…...
消防一体化安全管控平台:构建消防“一张图”和APP统一管理
在城市的某个角落,一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延,滚滚浓烟弥漫开来,周围群众的生命财产安全受到严重威胁。就在这千钧一发之际,消防救援队伍迅速行动,而豪越科技消防一体化安全管控平台构建的消防“…...
