即时工程:检索增强生成(RAG)
RAG Retrieval-Augmented Generation
自然语言处理(NLP)领域随着基于Transformer的模型(如GPT-3)的出现已经取得了重大突破。这些语言模型具有生成类人文本的能力,并已在聊天机器人、内容生成和翻译等各种应用中找到了广泛的应用。然而,当涉及到涉及专业化和特定于客户的信息的企业用例时,传统的语言模型可能会存在不足之处。使用新的语料库对这些模型进行微调可能是昂贵且耗时的。为了解决这个挑战,我们可以使用一种被称为“检索增强生成”(RAG)的技术之一。
在这篇博客中,我们将探讨RAG的工作原理,并通过使用GPT-3.5 Turbo作为额外语料库来演示其有效性。
想象一下,您的任务是开发一个能够回答有关特定产品的查询的聊天机器人。这个产品有自己独特的用户手册,专门针对企业的产品。传统的语言模型(如GPT-3)通常是在通用数据上进行训练的,并可能不了解这个特定产品。微调模型使用新的语料库可能看起来是一个解决方案,但它需要相当大的成本和资源。
RAG的介绍
检索增强生成(RAG)提供了一种更高效、更有效的方法来解决在专业领域生成上下文适当的回应的问题。RAG不是使用新的语料库对整个语言模型进行微调,而是利用检索的能力按需访问相关信息。通过将检索机制与语言模型相结合,RAG通过引入外部上下文来增强回应。这个外部上下文可以提供为一个矢量嵌入。
下图显示了我们将遵循的步骤流程。
- 从PDF文件中读取(Clarett用户手册PDF)并使用1000个标记进行分块。
- 创建这些标记的矢量嵌入。我们将使用OpenAIEmbeddings库来创建矢量嵌入。
- 将矢量嵌入本地存储。我们将使用简单的ChromaDB作为我们的VectorDB。我们也可以使用Pinecone或任何其他更高可用性的、生产级别的VectorDB。
- 用户发出查询/问题的提示。
- 从VectorDB中进行搜索和检索,以获取更多的上下文数据。
- 现在,这些上下文数据将与提示一起使用。
- 上下文丰富了提示。这通常被称为上下文增强。
- 将提示与查询/问题和增强的上下文一起传递给LLM。
- LLM基于这个上下文进行回应。
我们将使用Focusrite Clarett用户手册作为额外的语料库。Focusrite Clarett是一个简单的USB音频接口,用于录制和播放音频。您可以从这里下载使用手册。
动手实践
设置虚拟环境
让我们设置一个虚拟环境来隔离我们的实现,以避免任何版本/库/依赖冲突。执行以下命令创建一个新的Python虚拟环境:
创建OpenAI密钥
我们需要一个OpenAI密钥来访问GPT。让我们创建一个OpenAI密钥。您可以通过在此处注册OpenAI来免费创建OpenAI密钥。
注册并登录后,选择API选项,如屏幕截图所示(屏幕设计可能会因我截图时的版本不同而有所变化)
转到您的帐户设置,然后选择“查看API密钥”。
选择“创建新的密钥”,您将看到一个类似下面的弹出窗口。提供一个名称,这将生成一个密钥。
这将生成一个唯一的密钥,您应该将其复制到剪贴板并存储在安全的位置。
现在让我们编写Python代码来实现上面流程图中显示的所有步骤。
安装依赖
让我们安装我们将需要的各种依赖项。我们将使用以下库:
- Lanchain:用于开发LLM应用程序的框架。
- ChromaDB:这是用于持久化矢量嵌入的VectorDB。
- unstructured:用于预处理Word/PDF文档。
- tiktoken:Tokenizer框架
- pypdf:用于读取和处理PDF文档的框架。
- openai:用于访问OpenAI的框架。
一旦成功安装了这些依赖项,创建一个环境变量来存储在最后一步创建的OpenAI密钥。
让我们开始编码…
从用户手册PDF中创建矢量嵌入并将其存储在ChromaDB中
在以下代码中,我们导入了所有我们将使用的依赖库和函数。
在以下代码中读取PDF,对文档进行分词和拆分。
在以下代码中,我们创建了一个chroma集合,一个本地目录用于存储chroma数据库。然后我们创建一个矢量嵌入并将其存储在ChromaDB中。
执行此代码后,您应该看到创建了一个存储矢量嵌入的文件夹。
现在我们已经将矢量嵌入存储在ChromaDB中。现在让我们使用LangChain中的ConversationalRetrievalChain
API来启动一个聊天历史记录组件。我们将传递使用GPT 3.5 turbo初始化的OpenAI对象和我们创建的vectorDB。我们将传递ConversationBufferMemory
,用于存储消息。
现在我们已经初始化了对话检索链,我们可以将其用于聊天/问答。在以下代码中,我们接受用户输入(问题),直到用户输入’done’为止。然后,我们将问题传递给LLM以获取响应并打印出来。
这是输出的屏幕截图。
如您所见,检索增强生成是一种将GPT-3等语言模型的优势与信息检索的强大功能相结合的优秀技术。通过丰富具体上下文信息的输入,RAG使语言模型能够生成更准确和具有上下文相关性的响应。在无法进行精细调整的企业用例中,RAG提供了一种高效且经济实惠的解决方案,以提供与用户的定制和知情互动。
希望这对您有所帮助。请提供您的意见、反馈和评论。与此同时,我将在这个领域发布更多博客。
祝您度过愉快的时光… 我很快回来!在此期间,请保持安全…