大模型ReAct提示框架

news2024/12/26 16:42:49

Yao 等人于 2022 年引入了一个名为 ReAct 的框架,其中 LLM 用于以交错的方式生成推理轨迹(reasoning traces)和特定于任务的操作。

生成推理轨迹允许模型诱导、跟踪和更新行动计划,甚至处理异常。 操作步骤允许与外部源(例如知识库或环境)交互并收集信息。

ReAct 框架可以允许LLM与外部工具交互,以检索更多信息,从而获得更可靠和更真实的响应。

结果表明,ReAct 在语言和决策任务方面的表现可以优于多种最先进的基线。 ReAct 还可以提高LLM的人类可解释性和可信度。 总的来说,作者发现最好的方法是使用 ReAct 与思想链 (CoT) 相结合,允许使用推理过程中获得的内部知识和外部信息。

NSDT工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜索引擎 - Three.js虚拟轴心开发包 

1、ReAct原理

ReAct 的灵感来自行动(acting)和推理(reasoning)之间的协同作用,它使人类能够学习新任务并做出决策或推理。

思想链 (CoT) 提示显示了LLM执行推理跟踪以生成涉及算术和常识推理等问题的答案的能力 (Wei et al., 2022)。 但缺乏与外部世界的接触或无法更新其知识可能会导致事实幻觉和错误传播等问题。

ReAct 是一种将推理和行动与LLM相结合的通用范式。 ReAct 提示LLM为任务生成口头推理轨迹和行动。 这使得系统能够执行动态推理来创建、维护和调整行动计划,同时还能够与外部环境(例如维基百科)进行交互,以将附加信息合并到推理中。 下图显示了 ReAct 的示例以及执行问答所涉及的不同步骤。

来源:Yao et al., 2022

在上面的示例中,我们传入一个类似于以下HotpotQA问题的提示:

Aside from the Apple Remote, what other devices can control the program Apple Remote was originally designed to interact with?

请注意,上下文中的示例也会添加到提示中,但为了简单起见,我们在此处将其排除。 我们可以看到该模型生成了任务解决轨迹(思考、行动)。 Obs 对应于来自正在交互的环境(例如搜索引擎)的观察。 本质上,ReAct 可以检索信息来支持推理,而推理有助于确定下一步要检索的内容。

2、ReAct提示

为了演示 ReAct 提示的工作原理,让我们按照本文中的一个示例进行操作。

第一步是从训练集中(例如 HotPotQA)选择案例并组成 ReAct 格式的轨迹。 这些在提示中用作少数样本。 轨迹由多个思考-行动-观察步骤组成,如上图所示。 自由形式的思维用于实现不同的任务,例如分解问题、提取信息、执行常识/算术推理、指导搜索公式以及综合最终答案。

以下是 ReAct 提示示例的示例(从论文中获取,为简单起见,缩写为一个示例):

Question What is the elevation range for the area that the eastern sector of the
Colorado orogeny extends into?
Thought 1 I need to search Colorado orogeny, find the area that the eastern sector
of the Colorado orogeny extends into, then find the elevation range of the
area.
Action 1 Search[Colorado orogeny]
Observation 1 The Colorado orogeny was an episode of mountain building (an orogeny) in
Colorado and surrounding areas.
Thought 2 It does not mention the eastern sector. So I need to look up eastern
sector.
Action 2 Lookup[eastern sector]
Observation 2 (Result 1 / 1) The eastern sector extends into the High Plains and is called
the Central Plains orogeny.
Thought 3 The eastern sector of Colorado orogeny extends into the High Plains. So I
need to search High Plains and find its elevation range.
Action 3 Search[High Plains]
Observation 3 High Plains refers to one of two distinct land regions
Thought 4 I need to instead search High Plains (United States).
Action 4 Search[High Plains (United States)]
Observation 4 The High Plains are a subregion of the Great Plains. From east to west, the
High Plains rise in elevation from around 1,800 to 7,000 ft (550 to 2,130
m).[3]
Thought 5 High Plains rise in elevation from around 1,800 to 7,000 ft, so the answer
is 1,800 to 7,000 ft.
Action 5 Finish[1,800 to 7,000 ft]
...

请注意,不同类型的任务使用不同的提示设置。 对于推理最为重要的任务(例如 HotpotQA),任务解决轨迹使用多个思考-行动-观察步骤。 对于涉及大量行动步骤的决策任务,很少使用思考。

3、知识密集型任务的结果

论文首先在问答(HotPotQA)和事实验证(Fever)等知识密集型推理任务上评估 ReAct。 以PaLM-540B为基础模型进行提示。

来源:Yao et al., 2022

使用不同提示方式对 HotPotQA 和 Fever 进行的提示结果表明,ReAct 在这两项任务上总体表现均优于 Act(仅涉及行动)。

我们还可以观察到,ReAct 在 Fever 上的表现优于 CoT,在 HotpotQA 上落后于 CoT。 论文中提供了详细的错误分析。 总之:

  • CoT患有事实幻觉
  • ReAct 的结构约束降低了其制定推理步骤的灵活性
  • ReAct 在很大程度上取决于它检索的信息; 无信息的搜索结果使模型推理脱轨,并导致恢复和重新表达思想的困难

结合并支持 ReAct 和 CoT+Self-Consistency 之间切换的提示方法通常优于所有其他提示方法。

4、决策任务的结果

该论文还报告了展示 ReAct 在决策任务上的性能的结果。 ReAct 在 ALFWorld(基于文本的游戏)和 WebShop(在线购物网站环境)两个基准上进行评估。 两者都涉及复杂的环境,需要推理才能有效地采取行动和探索。

请注意,ReAct 提示针对这些任务进行了不同的设计,但仍保持推理与行动相结合的相同核心理念。 下面是涉及 ReAct 提示的 ALFWorld 问题的示例。

来源:Yao et al., 2022

ReAct 在 ALFWorld 和 Webshop 上的表现都优于 Act。 没有任何思考的行动无法正确地将目标分解为子目标。 对于这些类型的任务,ReAct 中的推理似乎很有优势,但当前基于提示的方法与专家在这些任务上的表现仍然相去甚远。

查看论文以获取更详细的结果。

5、LangChain ReAct使用

下面是 ReAct 提示方法在实践中如何运作的高级示例。 我们将为 LLM 和 LangChain 使用 OpenAI,因为它已经具有内置功能,可以利用 ReAct 框架来构建代理,通过结合 LLM 和不同工具的功能来执行任务。

首先,让我们安装并导入必要的库:

%%capture
# update or install the necessary libraries
!pip install --upgrade openai
!pip install --upgrade langchain
!pip install --upgrade python-dotenv
!pip install google-search-results
 
# import libraries
import openai
import os
from langchain.llms import OpenAI
from langchain.agents import load_tools
from langchain.agents import initialize_agent
from dotenv import load_dotenv
load_dotenv()
 
# load API keys; you will need to obtain these if you haven't yet
os.environ["OPENAI_API_KEY"] = os.getenv("OPENAI_API_KEY")
os.environ["SERPER_API_KEY"] = os.getenv("SERPER_API_KEY")
 

现在我们可以配置 LLM、我们将使用的工具以及允许我们将 ReAct 框架与 LLM 和工具一起利用的代理。 请注意,我们使用搜索 API 来搜索外部信息,并使用 LLM 作为数学工具。

llm = OpenAI(model_name="text-davinci-003" ,temperature=0)
tools = load_tools(["google-serper", "llm-math"], llm=llm)
agent = initialize_agent(tools, llm, agent="zero-shot-react-description", verbose=True)

配置完成后,我们现在可以使用所需的查询/提示来运行代理。 请注意,这里我们不希望提供本文中解释的少数样本。

agent.run("Who is Olivia Wilde's boyfriend? What is his current age raised to the 0.23 power?")

链执行如下:

> Entering new AgentExecutor chain...
 I need to find out who Olivia Wilde's boyfriend is and then calculate his age raised to the 0.23 power.
Action: Search
Action Input: "Olivia Wilde boyfriend"
Observation: Olivia Wilde started dating Harry Styles after ending her years-long engagement to Jason Sudeikis — see their relationship timeline.
Thought: I need to find out Harry Styles' age.
Action: Search
Action Input: "Harry Styles age"
Observation: 29 years
Thought: I need to calculate 29 raised to the 0.23 power.
Action: Calculator
Action Input: 29^0.23
Observation: Answer: 2.169459462491557
 
Thought: I now know the final answer.
Final Answer: Harry Styles, Olivia Wilde's boyfriend, is 29 years old and his age raised to the 0.23 power is 2.169459462491557.
 
> Finished chain.

我们得到的输出如下:

"Harry Styles, Olivia Wilde's boyfriend, is 29 years old and his age raised to the 0.23 power is 2.169459462491557."

我们改编自 LangChain 文档中的示例,因此要归功于他们。 我们鼓励学习者探索工具和任务的不同组合。你可以在此处找到此代码的笔记本。


原文链接:ReAct提示框架 - BimAnt

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1430439.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

云尘 -- 铁三域控

描述: flag1 直接fscan开扫 发现存活两台机子123和141,其中141这台机子扫出来有ms17-010漏洞 继续信息收集,用nmap扫一波全端口,看看有没有遗漏 141这台机子一开始没扫到,看着提示使用-Pn再扫一遍就行了。因为如果当…

docker-学习-2

docker学习第二天 docker学习第二天1.docker和虚拟机的区别2.docker的底层隔离机制2.1 Namespaces(命名空间)2.1.1 什么是命名空间 2.2 Cgroups2.3 Union file systems2.4 Container format2.5 docker在底层如何做隔离的,如何进行资源限制的? 3. docker命…

ep-bg-purple-dark element-plus 不生效

element-plus 官网里面的 Layout 布局中的示例,官方文档中添加类名 class"grid-content ep-bg-purple-dark" 有相应的样式 import element-plus/theme-chalk/index.css //默认css样式 英文 import element-plus/dist/index.css 两…

【Leetcode】2670. 找出不同元素数目差数组

文章目录 题目思路代码结果 题目 题目链接 给你一个下标从 0 开始的数组 nums ,数组长度为 n 。 nums 的 不同元素数目差 数组可以用一个长度为 n 的数组 diff 表示,其中 diff[i] 等于前缀 nums[0, …, i] 中不同元素的数目 减去 后缀 nums[i 1, …, …

在jetbrains IDEA/Pycharm/Android Studio中安装官方rust插件,开始rust编程

在idea插件市场搜索rust:JetBrains Marketplace ,就可以找到rust插件: jetbrains官方rust插件地址:[Deprecated] Rust - IntelliJ IDEs Plugin | Marketplace 直接在idea中搜索rust好像是搜不到的: 需要在这个插件市场…

STL常用容器—list容器(链表)

STL常用容器—list容器(链表) 一、list容器基本概念二、list容器基本操作与常用方法1. list构造函数2. ☆list 插入和删除3. list 获取头尾数据4. list 大小操作5. list赋值和交换6. list 反转和排序 三、排序案例 参考博文1: <C>…

Cambalache in Ubuntu

文章目录 前言apt install flatpak这很ok后记 前言 gtkmm4相比gtkmm3有很多改革, 代码也干净了许多, 但在windows上开发 有ui设计器那自然方便很多, 但glade又不支持gtkmm4, windows上装Cambalache很是困难. 各种问题都找不到答案.于是 我用VMware虚拟机Ubuntu20.xx安装Cambal…

深度学习:数据驱动的人工智能革命

文章目录 每日一句正能量前言什么是深度学习推动AI发展不同阶段的“三大驱动 ”1、技术驱动:算法和计算力是主要驱动力2、计算力的三驾马车:芯片、超级计算机、云计算3、数据驱动:描绘个性化画像; 后记 每日一句正能量 一般青年的…

日志追踪-Tracing

1. 前言 分布式链路跟踪中有两个重要的概念:跟踪(trace)和 跨度( span)。trace 是请求在分布式系统中的整个链路视图,span 则代表整个链路中不同服务内部的视图,span 组合在一起就是整个 trace 的视图在整个…

BUUCTF-Real-[struts2]s2-013

struts2的标签中 <s:a> 和 <s:url> 都有一个 includeParams 属性&#xff0c;可以设置成如下值none - URL中不包含任何参数&#xff08;默认&#xff09; get - 仅包含URL中的GET参数 all - 在URL中包含GET和POST参数 当includeParamsall的时候&#xff0c;会将本次…

学术研究新突破:发现新型相变存储器

斯坦福大学的研究人员开发出了一种新型相变存储器&#xff0c;该存储器有望帮助计算机更快、更高效地处理大量数据。在最近发表于《自然通讯》的一篇论文中&#xff0c;研究人员详细介绍了这项技术&#xff0c;表明一种新材料可能会使基于电阻高低状态切换以创建计算机数据“0”…

2024美赛数学建模D题思路+代码

文章目录 1 赛题思路2 美赛比赛日期和时间3 赛题类型4 美赛常见数模问题5 建模资料 1 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 2 美赛比赛日期和时间 比赛开始时间&#xff1a;北京时间2024年2月2日&#xff08;周五&#xff…

Blender教程(基础)-面的尖分、三角化与融并-09

一.面的尖分 1.准备 新建如下图所示物体、切换到编辑模式下 2.右键尖分正方形面 在选择中的面上右键选择尖分面 效果如下所示 3.右键尖分圆形面 效果如下 可以自行调节参数 二.面的三角化 1、正方形 2、圆形 三.融并 1、尖分圆形面 2、尖分圆形面-融并 发现…

Unity Meta Quest MR 开发(三):Scene API 配置+实现虚拟与现实之间的碰撞

文章目录 &#x1f4d5;教程说明&#x1f4d5; Scene 配置⭐开启场景理解功能和应用访问空间数据的权限⭐OVRSceneManager⭐制作 Plane Prefab 和 Volume Prefab⭐运行场景⭐添加透视材质 &#x1f4d5;虚拟与现实物体的碰撞&#xff08;弹球 Demo&#xff09;&#x1f4d5;Mes…

两数之和 - 暴力枚举+哈希表

两数之和原题地址 方法一&#xff1a;暴力枚举 首先&#xff0c;我们需要枚举数组中所有可能的下标对组合&#xff0c;对于n个数的数组&#xff0c;从中选2个下标&#xff0c;有种可能。做法很简单&#xff0c;遍历数组中的所有元素&#xff0c;对于每一个元素&#xff0c;遍…

yo!这里是c++IO流相关介绍

目录 前言 C语言的输入输出 CIO流基本介绍 流的概念 IO流类库 iostream fstream stringstream 后记 前言 学过C语言的输入输出相关知识点的童鞋应该多多少少会觉得有些许麻烦&#xff0c;反正我就是这么觉得的&#xff0c;scanf、printf等函数不仅数量众多&#xff0c…

RNN实战具体跑的代码

一、首先先上代码&#xff1a;这个是接pytorch API的调用代码 import torch import torch.nn as nn bs, T 2,3#批次大小&#xff0c;输入序列长度 input_size,hidden_size2,3#输入特征大小&#xff0c;隐含层特征大小 input torch.randn(bs,T, input_size) h_prev torch.ze…

css新手教程

css新手教程 课程&#xff1a;14、盒子模型及边框使用_哔哩哔哩_bilibili 一.什么是CSS 1.什么是CSS Cascading Style Sheet 层叠样式表。 CSS&#xff1a;表现&#xff08;美化网页&#xff09; 字体&#xff0c;颜色&#xff0c;边距&#xff0c;高度&#xff0c;宽度&am…

用户体验优化:HubSpot的秘密武器

在当今数字化市场中&#xff0c;提升用户体验已经成为企业成功的关键因素之一。HubSpot&#xff0c;作为一款领先的营销自动化工具&#xff0c;不仅在推动销售业绩上表现出色&#xff0c;同时通过其独特的策略也致力于提升用户体验。运营坛将深入探讨HubSpot是如何通过个性化推…

Leetcode92:反转链表II(区间反转链表)

一、题目 给你单链表的头指针 head 和两个整数 left 和 right &#xff0c;其中 left < right 。请你反转从位置 left 到位置 right 的链表节点&#xff0c;返回 反转后的链表 。 示例&#xff1a; 输入&#xff1a;head [1,2,3,4,5], left 2, right 4 输出&#xff1a…