通过Step Back提示增强LLM的推理能力

原文地址:enhancing-llms-reasoning-with-step-back-prompting

论文地址:https://arxiv.org/pdf/2310.06117.pdf

2023 年 11 月 6 日

Introduction

在大型语言模型不断发展的领域中,一个持续的挑战是它们处理复杂任务的能力,这些任务需要深入理解微妙的细节和上下文。

"后退提示"(Step-Back Prompting)现象已经作为一种创新方法出现,以解决这一问题,它识别了许多包含无数复杂性的任务。

这些任务可能使得大型语言模型难以有效地检索和应用相关信息。

Step Back Prompting

后退提示是一种用于增强语言模型的推理和问题解决能力的技巧,特别是LLMs。它涉及鼓励LLM从一个给定的问题或问题后退一步,提出一个更抽象、更高级的问题,涵盖原始查询的本质。

后退提示背后的概念是,许多复杂的问题或任务包含许多复杂的细节和约束,这使得LLMs难以直接检索和应用相关信息。

通过引入一个后退问题,这个问题通常更容易回答,并且围绕一个更广泛的概念或原则,LLMs 可以更有效地构建它们的推理。

Process of Step-Back Prompting

后退提示的典型过程包括两个主要步骤:

  • 抽象化:这时大型语言模型(LLM)不会立即尝试回答原始问题。相反,它会提出一个关于更大想法或规则的一般性问题。这有助于它思考和寻找事实。
  • 推理:在得到一般性问题的答案后,LLM使用这些信息来思考和回答原始问题。这称为“基于抽象的推理”。它使用来自更大想法的信息来对原始的、更难的问题给出好的答案。

Implementation with LangChain

提供一些少样本示例,这将展示后退提示是如何工作的。然后我们将转换这些示例信息。

# Few Shot Examples
examples = [{"input": "What is the birthplace of Albert Einstein?","output": "what is Albert Einstein's personal history?",},{"input": "Can a Tesla car drive itself?","output": "what can a Tesla car do?",},{"input": "Did Queen Elizabeth II ever visit Canada?","output": "what is Queen Elizabeth II's travel history?",},{"input": "Can a SpaceX rocket land itself?","output": "what can a SpaceX rocket do?",}
]
# We now transform these to example messages
example_prompt = ChatPromptTemplate.from_messages([("human", "{input}"),("ai", "{output}"),]
)
few_shot_prompt = FewShotChatMessagePromptTemplate(example_prompt=example_prompt,examples=examples,
)

系统消息为模型设置了上下文和任务。少样本示例(包含在 few_shot_prompt 中)用于为模型提供额外的上下文和如何执行任务的示例。用户消息是用户可以输入他们具体问题的地方,然后模型将尝试将其重新表述为一个更通用的后退问题。

prompt = ChatPromptTemplate.from_messages([("system","""You are an expert at world knowledge. Your task is to step back and paraphrase a question to a more generic step-back question, which is much easier to answer. Here are few examples:""",),# Few shot examplesfew_shot_prompt,# New question("user", "{question}"),]
)

现在,我们将为从LLM生成问题定义一个管道。它从预定义的对话模板(提示)开始,将对话传递给OpenAI GPT模型以生成具有固定随机性水平(温度=0)的响应,然后使用StrOutputParser处理并提取模型响应中的文本内容。最终结果应该是根据提示中的用户输入生成的问题。

question_gen = prompt | ChatOpenAI(temperature=0) | StrOutputParser()

 Ask the question.

question = "What is the name of the rover that NASA landed on Mars in 2021?"

现在,我们将调用 `question_gen` 函数,并将一个包含问题的字典作为输入传递给它。这个过程将使用这个问题作为输入,遵循定义的管道,并生成一个或多个问题作为结果。

question_gen.invoke({"question": question})

这将是调用函数后生成的答案。

what rovers has NASA sent to Mars?

我们将设置一个简单的界面来执行DuckDuckGo搜索,并指定最大结果数量,这将允许我们通过使用查询调用`retriever`函数来轻松检索搜索结果。

search = DuckDuckGoSearchAPIWrapper(max_results=4)def retriever(query):return search.run(query)

我们将使用 `question` 调用 `retriever` 函数。

retriever(question)

在检索问题之后,我们将得到以下答案。

Perseverance landed on Mars in February 2021. 

As of early February of this year, the rover had gathered 18 samples — and deposited half for a future potential return to Earth.

JPL-CALTECH/NASA The Curiosity rover team has been preparing for the start of the Solar Conjunction in November, when contact with all Mars spacecraft will be impossible for three weeks since Mars will be behind the Sun as seen from Earth.

NASA's Perseverance rover is busy just exploring Mars, looking for signs of ancient life.

Perseverance, nicknamed "Percy", the centerpiece of NASA's $2.7 billion Mars 2020 mission, touched down ... Since arriving at Jezero Crater in 2021, the six wheeled, nuclear-powered rover has been examining geologic features and collecting samples of the Red Planet that are central to the first step of the NASA-ESA (European Space Agency) Mars Sample Return campaign.

现在,我们将基于变量 `question` 生成问题,然后使用这些生成的问题作为搜索查询,通过 `retriever` 函数从DuckDuckGo检索搜索结果。

retriever(question_gen.invoke({"question": question}))

下面将是生成的答案。

From Wikipedia, the free encyclopedia This is a list of the 50 spacecraft missions (including unsuccessful ones) relating to the planet , such as orbiters and rovers.

Mission to Mars Gravity assist, destination elsewhere [1] [2] [3] ’1M No.1‘,’1M No.2‘,’1M No.2‘,’OKB-1 2MV-4 No.1‘,’2MV-4 No.1‘ Booster stage ("Block L") disintegrated in (2MV-4 No.2) NASA has sent a host of remotely-operated landers, orbiters and rovers to study Mars and bring back geologic samples.

While no humans have set foot on the planet, that could change.

NASA has ... The Subsurface Water Ice Mapping (SWIM), a NASA-funded project, has released its fourth and the more recent map of the prospective locations of subsurface water ice on Mars.

This, as per NASA officials, will help mission planners decide where exactly to send the first humans to Mars. 

The blue areas on this map of Mars are regions where NASA ... Thanks in part to NASA's Curiosity Mars rover, geologists have discovered evidence for ancient rivers on the Red Planet, suggesting the right conditions for life.

从LangChain中心,我们将拉取一个“langchain-ai/stepback-answer”模型。

response_prompt = hub.pull("langchain-ai/stepback-answer")

`chain` 是一系列数据转换和操作,从基于用户的问题或后退问题的上下文提取开始,接着使用预定义的对话上下文与LLM进行交互,最后将模型的响应解析成可读的格式。

chain = ({# Retrieve context using the normal question"normal_context": RunnableLambda(lambda x: x["question"]) | retriever,# Retrieve context using the step-back question"step_back_context": question_gen | retriever,# Pass on the question"question": lambda x: x["question"],}| response_prompt| ChatOpenAI(temperature=0)| StrOutputParser()
)

现在,我们将使用 `question` 调用 `chain` 函数。

chain.invoke({"question": question})

下面将是最合适的生成的答案。

The name of the rover that NASA landed on Mars in 2021 is Perseverance.

然后,我们将给模型一个响应模板。

response_prompt_template = """You are an expert of world knowledge. I am going to ask you a question. Your response should be comprehensive and not contradicted with the following context if they are relevant. Otherwise, ignore them if they are not relevant.{normal_context}Original Question: {question}
Answer:"""
response_prompt = ChatPromptTemplate.from_template(response_prompt_template)

再次,我们将使用 `chain` 函数通过正常的问题检索上下文,然后使用预定义的响应模板传递问题。

chain = ({# Retrieve context using the normal question (only the first 3 results)"normal_context": RunnableLambda(lambda x: x["question"]) | retriever,# Pass on the question"question": lambda x: x["question"],}| response_prompt| ChatOpenAI(temperature=0)| StrOutputParser()
)

使用 `question` 调用 `chain` 过程。

chain.invoke({"question": question})

下面将是生成的答案。

The name of the rover that NASA landed on Mars in 2021 is Perseverance, also known as "Percy".

It is the centerpiece of NASA's Mars 2020 mission, which successfully touched down on February 18, 2021, in Jezero Crater.

Perseverance is a six-wheeled, nuclear-powered rover that is currently exploring Mars and searching for signs of ancient life.

It is part of the NASA-ESA Mars Sample Return campaign and is tasked with collecting samples of the Red Planet for future analysis and potential return to Earth.

Conclusion

通过使用后退提示,大型语言模型可以减少在推理过程中犯错的概率,更有效地处理复杂任务,并提供对复杂问题更准确、更细致的回答。

这种技术有望提高语言模型在各种需要深入理解和复杂推理的领域和应用程序中的实际效用。

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

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

相关文章

图形库实战丨C语言扫雷小游戏(超2w字,附图片素材)

目录 效果展示 游玩链接(无需安装图形库及VS) 开发环境及准备 1.VS2022版本 2.图形库 游戏初始化 1.头文件 2.创建窗口 3.主函数框架 开始界面函数 1.初始化 1-1.设置背景颜色及字体 1-2.处理背景音乐及图片素材 1-3.处理背景图位置 2.选…

【操作系统学习笔记】文件管理2.1

【操作系统学习笔记】文件管理2.1 参考书籍: 王道考研 视频地址: Bilibili 文件系统的层次结构 用户/应用程序用户接口: 文件系统需要向上层的用户提供一些简单易用的功能接口。这层就是用于处理用户发出的系统调用请求文件目录系统: 用户是通过文件路径来访问文件的&#x…

在职场上,如何提升影响力

在职场上提升影响力是一个持续且多方面的过程,涉及个人技能、人际关系、领导能力以及个人品牌的建立等多个方面。以下是一些建议,帮助你提升在职场上的影响力: 提升专业技能: 深入学习和掌握所在领域的专业知识,保持对…

Linux服务器安装jdk

背景: 安装JDK是我们java程序在服务器运行的必要条件,下面描述几个简单的命令就可再服务器上成功安装jdk 命令总览: yum update -y yum list | grep jdk yum -y install java-1.8.0-openjdk java -version 1.查看可安装版本 yum list | grep jdk 2.如果查不到可先进行 yum upd…

leetcode 热题 100_缺失的第一个正数

题解一: 正负模拟哈希:偏技巧类的题目,在无法使用额外空间的情况下,只能在原数组中做出类似哈希表的模拟。除去数值,我们还可以用正负来表示下标值的出现情况。首先,数组中存在正负数和0,而负数…

猫头虎分享已解决Bug || 数据中心断电:PowerLoss, DataCenterBlackout

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

通过Annotation将用户操作记录到数据库表功能实现

一、背景 在用户对我们所开发的系统访问的时候,需要我们的系统具有强大的健壮性,使得给与用户的体验感十足。在业务开发的过程中,我们通过将几个相关的操作绑定成一个事件,使得安全性以及数据的前后一致性得到提高。但是在溯源方面…

未来城市:探索数字孪生在智慧城市中的实际应用与价值

目录 一、引言 二、数字孪生与智慧城市的融合 三、数字孪生在智慧城市中的实际应用 1、智慧交通管理 2、智慧能源管理 3、智慧建筑管理 4、智慧城市管理 四、数字孪生在智慧城市中的价值 五、挑战与展望 六、结论 一、引言 随着科技的飞速发展,智慧城市已…

RLAIF在提升大型语言模型训练中的应用

RLAIF在提升大型语言模型训练中的应用 大型语言模型(LLMs)在理解和生成自然语言方面展示了巨大能力,但仍面临输出不可靠、推理能力有限、缺乏一致性个性或价值观对齐等挑战。为解决这些问题,研究者开发了一种名为“来自AI反馈的强…

C++模板基础知识

文章目录 模板模板的声明与定义函数模板非类型模板参数类模板类的成员函数定义构造函数的定义类的静态成员的定义类模板的实例化使用模板类型中的类型成员 默认模板参数指定显示模板实参(函数模板显示实参)引用折叠和右值引用参数可变参数模板对参数包的扩展对参数包的转发可变…

linux 日志轮转

前言: 在Linux系统中,日志轮转是一种重要的管理机制,它可以帮助管理日志文件的大小、数量以及保持系统的性能稳定。通过日志轮转,可以定期对日志文件进行归档、压缩或清理,确保系统的日志记录不会无限增长而占用过多的磁盘空间…

动态SLAM论文阅读笔记

近期阅读了许多动态SLAM相关的论文,它们基本都是基于ORB-SLAM算法,下面简单记录一下它们的主要特点: 1.DynaSLAM 采用CNN网络进行分割多视图几何辅助的方式来判断动态点,并进行了背景修复工作。 2.Detect-SLAM 实时性问题&…

TQTT X310 软件无线电设备的FLASH固件更新方法--WIN和UBUNTU环境

TQTT X310 除了PCIE口全部兼容USRP 官方的X310,并配备两块UBX160射频子板以及GPSDO。TQTT X310可以直接使用官方的固件,但是不支持官方的固件升级命令。这篇BLOG提供烧写刷新FLASH的方法。 这里分别给出WIN下和UBUNTU下升级的软件和方法 WIN环境下烧写…

Rust 语言的 async 关键字

一、Rust 的 async 关键字 Rust 语言的 async 关键字,它是 Rust 语言异步编程模型的核心组成部分。async 关键字用于标记一个函数或方法为异步的,这意味着该函数或方法内部将使用 await 关键字来等待异步操作(如 IO 操作、网络请求等&#x…

Java代码审计安全篇-常见Java SQL注入

前言: 堕落了三个月,现在因为被找实习而困扰,着实自己能力不足,从今天开始 每天沉淀一点点 ,准备秋招 加油 注意: 本文章参考qax的网络安全java代码审计,记录自己的学习过程,还希望…

R语言系列1——R语言基础:入门篇

目录 写在开头:1. R语言的基本语法1.1 变量与数据类型1.2 基本操作符与表达式 2. 数据结构简介2.1 向量(Vector)2.2 矩阵(Matrix)2.3 数组(Array)2.4 数据框(Data Frame)2.5 列表(List) 3. 基础函数与包的使用3.1 常用内置函数3.2 安装与加载R包3.2.1 安装R包3.2.2 …

rust的 || 是什么,怎么使用?

在Rust中,|| 是闭包的语法。闭包是一种可以捕获作用域中变量的匿名函数。|| 用来定义一个没有参数的闭包。 你可以使用 || 来创建一个没有参数的闭包,例如: let my_closure || {println!("This is a closure with no parameters.&quo…

使用Git将代码上传至代码托管平台GitCode

使用像GitLbi、GitHub、Gitee等代码托管平台用于版本控制非常滴方便,能够跟踪代码的变化和历史记录,方便管理和回滚,还允许多个开发者同时在一个项目上进行开发和协作,提高团队协作效率。 这些平台的代码托管和上传方式都大同小异…

Ainx的消息封装

📕作者简介: 过去日记,致力于Java、GoLang,Rust等多种编程语言,热爱技术,喜欢游戏的博主。 📗本文收录于Ainx系列,大家有兴趣的可以看一看 📘相关专栏Rust初阶教程、go语言基础系列…

186基于matlab的信号盲源分离算法

基于matlab的信号盲源分离算法,包括变步长盲源分离(EASI),RLS(自然梯度和普通梯度),并将三种方法分离结果进行对比。程序已调通,可直接运行。 186 信号盲源分离算法 变步长盲源分离 (xiaohongshu.com)