likes
comments
collection
share

使用提示模板使用 LangChain 和 OpenAI 构建摘要应用程序

作者站长头像
站长
· 阅读数 18

使用提示模板使用 LangChain 和 OpenAI 构建摘要应用程序

在本文中,我将向您展示如何生成文本或段落的摘要,然后将其翻译成另一种语言。我们将使用 LangChain 提供的动态提示来总结相同的文本。请注意,此方法仅限于摘要文本,这些文本与摘要一起,长度必须小于模型允许的最大令牌数,约为 4096 个令牌。

我建议您阅读我之前的文章:

使用 LangChain 和 OpenAI 构建摘要应用程序:使用基本提示符

在本文中,我们将使用 LangChain 基本提示符构建一个基本的摘要应用程序。无论你是...

使用提示模板使用 LangChain 和 OpenAI 构建摘要应用程序

类允许定义可重用的模板,用于从 AI 生成响应。我们将要定义的这个提示模板可用于任何其他 AI 应用程序。

加载环境变量

在此步骤中,我们将从 .env 文件加载环境变量。这是我们将存储OpenAI API密钥和其他配置设置的地方。

导入库

在此步骤中,我们将从 LangChain 模块导入 PromptTemplate 类。这将用于定义用于生成响应的模板。

我们将从 LangChain 的 chains 模块导入 LLMChain 类。LLMChain将用于将LLM模型与提示模板链接在一起。

from langchain import PromptTemplate
from langchain.chains import LLMChain

创建 ChatOpenAI 类的实例

llm = ChatOpenAI(temperature=0, model_name=‘gpt-3.5-turbo')

现在我们将创建 ChatOpenAI 类的新实例,我们将其称为 llm,它表示来自大语言模型的实例。ChatOpenAI类有两个参数:温度和模型名称。温度是控制LLM响应随机性的参数。温度为 0 将产生最确定的响应,而温度为 1 将产生最随机的响应。模型名称是将使用的 LLM 的名称。

我们将温度设置为 0,将型号名称设置为 gpt-3.5-turbo。gpt-3.5-turbo 模型是一种大型语言模型,在大量文本和代码数据集上进行训练。该模型以其生成创意和信息丰富的文本的能力以及进行既引人入胜又信息丰富的对话的能力而闻名。

有了这个,这个 ChatOpenAI 类实例可用于生成文本、翻译语言、编写不同类型的创意内容,并以信息丰富的方式回答您的问题。

创建用于摘要的示例文本

在此步骤中,我们将定义一个名为“textMessage”的变量,该变量将包含我们希望LLM汇总的文本。我已经为LLM应用程序的定义准备了一个示例文本,请随时尝试不同的文本消息。“textMessage”的值是一长串文本,描述了对话AI系统中的内存概念。

textMessage="""
Most LLM applications have a conversational interface. An essential component of a conversation is being able to \  
refer to information introduced earlier in the conversation. At bare minimum, a conversational system should be able \
to access some window of past messages directly. A more complex system will need to have a world model that it is \
constantly updating, which allows it to do things like maintain information about entities and their relationships.
We call this ability to store information about past interactions "memory". LangChain provides a lot of utilities \
for adding memory to a system. These utilities can be used by themselves or incorporated seamlessly into a chain.
A memory system needs to support two basic actions: reading and writing. Recall that every chain defines some \
core execution logic that expects certain inputs. Some of these inputs come directly from the user, but some of \
these inputs can come from memory. A chain will interact with its memory system twice in a given run.
AFTER receiving the initial user inputs but BEFORE executing the core logic, a chain will READ from its \
memory system and augment the user inputs.
AFTER executing the core logic but BEFORE returning the answer, a chain will WRITE the inputs and outputs \
of the current run to memory, so that they can be referred to in future runs.
"""

导入提示模板

template="""
Write a concise and a short summary of the following text:
TEXT: `{text}`
Translate the summary to {language}.
"""

prompt = PromptTemplate(
    input_variables=['text', 'language'],
    template=template
)

现在我们将定义一个名为 template 的新变量。我们将定义一个模板字符串,其中包含将用于生成提示的文本。让我知道编写代码,我会向您解释。模板字符串包括两个占位符:{文本} 和 {语言}。{text} 占位符将替换为文本变量的值,{language} 占位符将替换为语言变量的值。

同样,我们将使用三重“”“来允许我们多行书写。在模板中,我们将指示AI模型生成所提供文本的简短摘要,然后将生成的摘要翻译成指定的语言。

接下来,我们将创建一个提示模板对象。什么是提示模板对象?它是一个对象,用于定义大型语言模型 (LLM) 的提示。提示只是一段文本,用于指示LLM生成文本。

因此,我们将创建一个 PromptTemplate 对象并使用两个参数对其进行初始化:输入变量和模板字符串。输入变量是将用于填充模板字符串中的占位符的变量。在这种情况下,输入变量是文本和语言。

提示模板对象可用于生成 LLM 的提示。通过将模板字符串中的占位符替换为输入变量的值来生成提示。

input_variables定义每次使用模板时必须提供哪些值。在这种情况下,它需要“文本”和“语言”。

有了它,这个提示模板可用于总结任何文本并将其翻译成任何语言,只需提供这两个输入。

创建链

chain = LLMChain(llm=llm, prompt=prompt)

现在让我们创建一个 LLMChain 对象。正如我们之前所说,LLMChain对象是一个对象,用于将LLM执行的一系列步骤链接在一起。链中的步骤可用于生成文本、翻译文本或执行其他任务。

首先,我们将创建一个 LLMObject 并使用两个参数对其进行初始化:LLM 对象和 PromptTemplate 对象。LLM对象是我们之前在上一个应用程序中创建的LLM,将用于执行链中的步骤。PromptTemplate 对象是将用于指示 LLM 的提示。

因此,LLMChain 类包装了 LLM 的低级 API,并提供高级方法,例如:chain.generate_response 或 chain.run()

这抽象出直接处理LLM API并保持快速工程的独立。

LLMChain 通过维护聊天的状态和历史记录来管理跨多个提示的对话。

因此,此行使用提供的LLM和PromptTemplate创建一个LLMChain实例,现在可以轻松用于生成对话响应。

运行链条

summary= chain.run({'text':textMessage, ‘language':'french'})

在这里,我们将在 LLMChain 上调用 run() 方法来生成文本,并通过向它传递输入变量的字典来运行它。我们将传递一个字典,其中包含提示模板所需的输入参数。“文本”包含要总结的实际文本,此处将“语言”指定为“法语”。

打印摘要

print(summary)

在这里,我们打印文本摘要和翻译摘要。

到这里,我们到了这个故事的结尾,我们已经利用LangChain提供的PromptTemplate创建了一个带有LangChain和OpenAI的摘要应用程序。