介绍
在不断发展的大型语言模型领域中,一个持续的挑战是它们处理需要深刻理解细微差别和上下文的复杂任务的能力。
Step-Back Prompting现象作为一种创新方法出现,用以解决这一问题,它认识到许多任务包含了无数的复杂性。
这些任务可能会使大型语言模型难以有效检索和应用相关信息。
让我们更深入地探讨一下后退提示及其代码实现!
Step-Back Prompting是一种用于增强语言模型,特别是大型语言模型(LLMs)的推理和解决问题能力的技术。它涉及鼓励LLM从给定的问题或问题中后退一步,并提出一个更抽象、更高层次的问题,这个问题包含了原始询问的本质。
Step-Back Prompting背后的概念是,许多复杂的问题或任务包含了众多复杂的细节和约束,这使得大型语言模型直接检索和应用相关信息变得具有挑战性。
通过引入一个后退一步的问题,这个问题通常更容易回答,并且围绕一个更广泛的概念或原则,大型语言模型可以更有效地构建它们的推理。
典型的Step-Back Prompting过程主要包括两个步骤:
1. 抽象:这是指大型语言模型(LLM)不会立即尝试回答原始问题。相反,它会提出一个关于更大的概念或规则的更一般性问题。这有助于它思考和查找事实。
2. 推理:在得到一般问题的答案后,大型语言模型(LLM)使用这些信息来思考并回答原始问题。这被称为“抽象基础推理”。它利用来自更大观点的信息来对原始的、更难的问题给出一个好的答案。
现在,我们了解了后退提示的概念,让我们用代码来实现它。我们将在这里使用少量样本提示技术来训练模型,以便它能够在后退的同时向前发展。
我们开始吧!
然后,我们将导入所有必需的模块。
将你的Open AI API密钥保存在你的环境中。
提供一些少量示例,这将展示如何进行Step-Back Prompting的工作。
然后我们将使用ChatPromptTemplate和FewShotChatMessagePromptTemplate转换这些示例消息。
系统消息为模型设定了上下文和任务。少量示例(包含在few_shot_prompt中)用于为模型提供额外的上下文和执行任务的示例。
用户消息是用户可以输入其具体问题的地方,然后模型将尝试将其改述为更通用的Step-Back Prompting。
现在,我们将定义一个从LLM生成问题的流程。它从一个预定义的对话模板(提示)开始,将对话传递给OpenAI GPT模型以固定的随机性水平(temperature = 0)生成响应,然后使用StrOutputParser处理并提取模型响应中的文本内容。最终结果应该是基于用户从提示中输入的生成的问题。
现在,我们将调用或者说是调用question_gen函数,并且我们将传递一个带有问题的字典作为输入。该过程将使用这个问题作为输入,遵循定义的流程,并生成一个或多个问题作为结果。
我们将设置一个简单的界面来执行DuckDuckGo搜索,可以指定最大结果数量,并且通过使用查询调用检索器函数,我们可以轻松地获取搜索结果。
在检索问题后,我们将得到以下答案。
现在,我们将基于变量question生成问题,然后使用这些生成的问题作为搜索查询,通过检索器函数从DuckDuckGo检索搜索结果。
以下是生成的答案。
从LangChain中心,我们将拉取一个“langchain-ai/stepback-answer”模型。
链条是一系列数据转换和操作的序列,从基于用户问题或Step-Back问题的上下文提取开始,接着是与预定义会话上下文使用的大型语言模型(LLM)的交互,最后是将模型的响应解析成可读格式。