当前位置:首页 > 文章列表 > 科技周边 > 人工智能 > 基于Langchain、ChromaDB和GPT 3.5实现检索增强生成

基于Langchain、ChromaDB和GPT 3.5实现检索增强生成

来源:51CTO.COM 2023-09-11 11:47:01 0浏览 收藏

欢迎各位小伙伴来到golang学习网,相聚于此都是缘哈哈哈!今天我给大家带来《基于Langchain、ChromaDB和GPT 3.5实现检索增强生成》,这篇文章主要讲到等等知识,如果你对科技周边相关的知识非常感兴趣或者正在自学,都可以关注我,我会持续更新相关文章!当然,有什么建议也欢迎在评论留言提出!一起学习!

译者 | 朱先忠

重楼 | 审校

摘要在本博客中,我们将了解一种名为检索增强生成(retrieval augmented generation)的提示工程技术,并将基于Langchain、ChromaDB和GPT 3.5的组合来实现这种技术

动机

随着GPT-3等基于转换器的大数据模型的出现,自然语言处理(NLP)领域取得了重大突破。这些语言模型能够生成类似人类的文本,并已有各种各样的应用程序,如聊天机器人、内容生成和翻译。然而,当涉及到专业化和特定于客户的信息的企业应用场景时,传统的语言模型可能满足不了要求。另一方面,使用新的语料库对这些模型进行微调可能既昂贵又耗时。为了应对这一挑战,我们可以使用一种名为“检索增强生成”(RAG:Retrieval Augmented Generation)的技术。

基于Langchain、ChromaDB和GPT 3.5实现检索增强生成

在本博客中,我们将探讨这种检索增强生成RAG技术是如何工作的,并通过一个实示例来证明这一技术的有效性需要说明的是,此实例将使用GPT-3.5 Turbo作为附加语料库对产品手册进行响应。

想象一下,你的任务是开发一个聊天机器人,该机器人可以响应有关特定产品的查询。该产品有自己独特的用户手册,专门针对企业的产品。传统的语言模型,如GPT-3,通常是根据一般数据进行训练的,可能不了解这种特定的产品。另一方面,使用新的语料库对模型进行微调似乎是一种解决方案;然而,此办法会带来相当大的成本和资源需求。

检索增强生成(RAG)简介

检索增强生成(RAG)提供了一种更高效的方法来解决在特定领域生成适当上下文响应的问题。RAG不使用新的语料库对整个语言模型进行微调,而是利用检索的能力按需访问相关信息。通过将检索机制与语言模型相结合,RAG利用外部上下文来增强响应。这个外部上下文可以作为向量嵌入来提供

面给出了创建本文中应用程序时要遵循的步骤流程。

  1. 阅读Clarett用户手册PDF格式)并使用1000个令牌的chunk_size进行令牌化。
  2. 创建这些标记的向量嵌入。我们将使用OpenAIEmbeddings库来创建向量嵌入
  3. 向量嵌入存储在本地。我们将使用简单的ChromaDB作为我们的VectorDB。我们可以使用Pinecone或任何其他更高可用性的生产级的向量数据库VectorDB。
  4. 用户发出带有查询/问题的提示。
  5. 这将从VectorDB中进行搜索和检索,以便VectorDB中获取更多上下文数据。
  6. 此上下文数据现在将与提示内容一起使用。
  7. 上下文增强了提示这通常被称为上下文丰富。
  8. 提示信息,连同查询/问题和这个增强的上下文现在被传递给大型语言模型LLM
  9. 至此,LLM基于此上下文进行响应。

需要说明的是,在本示例中,我们将使用Focusrite Clarett用户手册作为附加语料库。Focusrite Clarett是一个简单的USB音频接口,用于录制和播放音频。您可以从链接https://fael-downloads-prod.focusrite.com/customer/prod/downloads/Clarett%208Pre%20USB%20User%20Guide%20V2%20English%20-%20EN.pdf处下载使用手册。

实战演练

设置虚拟环境

让我们设置一个虚拟环境来我们的实现案例封装起来,以避免系统中可能出现的任何版本/库/依赖冲突。现在,我们执行以下命令创建一个新的Python虚拟环境

pip install virtualenvpython3 -m venv ./venvsource venv/bin/activate 

创建OpenAI密钥

接下来,我们将需要一个OpenAI密钥来访问GPT。让我们创建一个OpenAI密钥。您可以通过在链接https://platform.openai.com/apps处注册OpenAI来免费创建OpenAIKey。

注册后,登录并选择API选项,如屏幕截图所示(时间原因所致,当您打开该屏幕设计可能会当前拍摄屏幕截图有所变化)

基于Langchain、ChromaDB和GPT 3.5实现检索增强生成

然后,转到您的帐户设置并选择“查看API密钥(View API Keys)”:

基于Langchain、ChromaDB和GPT 3.5实现检索增强生成

然后,选择“创建新密钥(Create new secret key)”,你会看到一个弹出窗口,如下图所示。你需要提供一个名称,这将生成一个密钥。

基于Langchain、ChromaDB和GPT 3.5实现检索增强生成

该操作将生成一个唯一的密钥,您应该将其复制到剪贴板并存储在安全的地方

基于Langchain、ChromaDB和GPT 3.5实现检索增强生成

接下来,让我们编写Python代码来实现上面流程图中显示的所有步骤。

安装依赖库

首先,让我们安装我们需要的各种依赖项。我们将使用以下库:

  • Lanchain一个开发LLM应用程序的框架。
  • ChromaDB:这是用于持久化向量嵌入的VectorDB。
  • unstructured:用于预处理Word/PDF文档。
  • TiktokenTokenizer框架
  • pypdf:阅读和处理PDF文档的框架
  • openai:访问openai的框架
pip install langchainpip install unstructuredpip install pypdfpip install tiktokenpip install chromadbpip install openai

一旦成功安装了这些依赖项,请创建一个环境变量来存储在最后一步中创建的OpenAI密钥。

export OPENAI_API_KEY=

接下来,让我们开始编程。

从用户手册PDF创建向量嵌入并将其存储在ChromaDB中

在下面的代码中,我们会引入所有需要使用的依赖库和函数

import osimport openaiimport tiktokenimport chromadbfrom langchain.document_loaders import OnlinePDFLoader, UnstructuredPDFLoader, PyPDFLoaderfrom langchain.text_splitter import TokenTextSplitterfrom langchain.memory import ConversationBufferMemoryfrom langchain.embeddings.openai import OpenAIEmbeddingsfrom langchain.vectorstores import Chromafrom langchain.llms import OpenAIfrom langchain.chains import ConversationalRetrievalChain

在下面的代码中,阅读PDF,将文档标记化并拆分为标记。

loader = PyPDFLoader("Clarett.pdf")pdfData = loader.load()text_splitter = TokenTextSplitter(chunk_size=1000, chunk_overlap=0)splitData = text_splitter.split_documents(pdfData)

在下面的代码中,我们将创建一个色度集合,一个用于存储色度数据库的本地目录。然后我们创建一个向量嵌入并将其存储在ChromaDB数据库中。

collection_name = "clarett_collection"local_directory = "clarett_vect_embedding"persist_directory = os.path.join(os.getcwd(), local_directory)openai_key=os.environ.get('OPENAI_API_KEY')embeddings = OpenAIEmbeddings(openai_api_key=openai_key)vectDB = Chroma.from_documents(splitData, embeddings, collection_name=collection_name, persist_directory=persist_directory )vectDB.persist()

执行此代码后,您应该会看到创建了一个存储向量嵌入的文件夹。

基于Langchain、ChromaDB和GPT 3.5实现检索增强生成

现在我们将向量嵌入存储在ChromaDB中。下面,让我们使用LangChain中的ConversationalRetrievalChain API来启动聊天历史记录组件。我们将传递由GPT 3.5 Turbo启动的OpenAI对象和我们创建的VectorDB。我们将传递ConversationBufferMemory,它用于存储消息。

memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True)chatQA = ConversationalRetrievalChain.from_llm( OpenAI(openai_api_key=openai_key, temperature=0, model_name="gpt-3.5-turbo"),  vectDB.as_retriever(),  memory=memory)

既然我们已经初始化了会话检索链,那么接下来我们就可以使用它进行聊天/问答了。在下面的代码中,我们接受用户输入(问题),直到用户键入“done”然后,我们将问题传递给LLM以获得回复并打印出来。

chat_history = []qry = ""while qry != 'done': qry = input('Question: ') if qry != exit: response = chatQA({"question": qry, "chat_history": chat_history}) print(response["answer"])

这是输出的屏幕截图。

基于Langchain、ChromaDB和GPT 3.5实现检索增强生成

基于Langchain、ChromaDB和GPT 3.5实现检索增强生成

小结

正如你从本文中所看到的,检索增强生成是一项伟大的技术,它将GPT-3等语言模型的优势与信息检索的能力相结合。通过使用特定于上下文的信息丰富输入,检索增强生成使语言模型能够生成更准确和与上下文相关的响应。在微调可能不实用的企业应用场景中,检索增强生成提供了一种高效、经济高效的解决方案,可以与用户进行量身定制、知情的交互。

译者介绍

朱先忠是51CTO社区的编辑,也是51CTO专家博客和讲师。他还是潍坊一所高校的计算机教师,是自由编程界的老兵

原文标题:Prompt Engineering: Retrieval Augmented Generation(RAG),作者:A B Vijay Kumar


以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于科技周边的相关知识,也可关注golang学习网公众号。

版本声明
本文转载于:51CTO.COM 如有侵犯,请联系study_golang@163.com删除
简洁、可读性更强的代码:代码重构和设计模式的实战经验总结简洁、可读性更强的代码:代码重构和设计模式的实战经验总结
上一篇
简洁、可读性更强的代码:代码重构和设计模式的实战经验总结
网络安全将因机器学习操作而彻底改变
下一篇
网络安全将因机器学习操作而彻底改变
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • ljg-skills -
    ljg-skills
    ljg-skills 是李继刚开源的 AI 技能与提示词集合,面向大模型使用者整理了一批可复用的 prompt、角色设定和任务技能模板,适合用于学习提示词设计、搭建个人 AI 工作流和沉淀团队常用智能体能力。
    2413次使用
  • MELO音乐 - AI 音乐生成平台,支持多模态创作能力
    MELO音乐
    MELO音乐是一站式AI视频与音乐制作助手,对标suno, udio的高品质体验。提供伴奏生成、原创写词、无损导出、哼唱识曲、混音变声等全套音频与短视频编辑工具。无论是流行Kpop、电音说唱、民谣古风、摇滚儿歌还是商用轻音乐,MELO为你免费谱曲,轻松做同款!
    2221次使用
  • UniScribe - AI 免费在线音视频转文字平台
    UniScribe
    UniScribe 是一款 AI 音视频转文字与内容整理工具,支持上传音频、视频文件或粘贴 YouTube 链接,自动生成转写文本、摘要、思维导图和关键问题,并支持多格式导出,适合会议记录、课程学习、访谈整理和内容创作复盘。
    2172次使用
  • 剧云 - 免费 AI 智能中文剧本创作平台
    剧云
    剧云是专业中文剧本创作平台,安全稳定运行十余年,集成AI编剧、剧本医生审核、人物小传、剧情关系图、大纲编写、多人协作、Word导入导出、版权管控功能,数据安全防护,轻松高效创作剧本。
    2381次使用
  • 万象有声 - AI 一站式有声内容创作平台
    万象有声
    万象有声,一个专为有声创作者打造的新一代智能有声内容创作平台。平台提供专业的智能拆章、智能画本编辑、AI配音、AI生成音效、后期制作、智能对轨、智能审听等有声创作全流程工具,可以帮助创作者高效、低成本创作出引人入胜的有声作品。立即体验,让有声书制作更简单!
    2341次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码