LLM之RAG实战(十一)| 使用Mistral-7B和Langchain搭建基于PDF文件的聊天机器人

    

       在本文中,使用LangChain、HuggingFaceEmbeddings和HuggingFace的Mistral-7B LLM创建一个简单的Python程序,可以从任何pdf文件中回答问题。

一、LangChain简介

        LangChain是一个在语言模型之上开发上下文感知应用程序的框架。LangChain使用带prompt和few-shot示例的LLM来提供相关响应和推理。LangChain擅长文档问答、聊天机器人、分析结构化数据等。LangChain提供方便处理LLM的抽象组件及其实现,还为更高级别的任务提供组件Chain。

安装langchain:

pip install langchain

LangChain中的模块Model I/O(模型I/ORetrieval(检索Chains(), Agents(代理), Memory(记忆), Callbacks(回调)

1.1 模型I/O模块

      模型I/O是应用程序的核心元素。使用LangChain,可以使用任何大语言模型。这个接口需要三个组件:大语言模型提示输出解析器

       LangChain提供了许多函数来构建提示,为各种任务提供现成的提示模板,也可以自定义提示模板。

       LangChain可以使用LLM,也可以使用以聊天消息列表为输入并返回聊天聊天消息。它可以与许多LLM一起工作,包括OpenAI LLMs和开源LLM。

      输出解析器用于构建从LLM接收的响应,PydanticOutputParser是LangChain中输出解析器的主要类型。

1.2 检索模块

       检索模块实现了检索增强生成(RAG),可以访问大模型训练数据之外的用户私有数据。检索步骤包括以下几步:加载数据、转换数据、创建或获取嵌入、存储嵌入和检索嵌入。LangChain拥有大约100个文档加载器,可以读取主要的文档格式,比如CSV、HTML、pdf、代码等。它可以使用不同的算法转换数据。LangChain集成了超过25个嵌入模型和超过50家向量数据库。

1.3 链条模块

       复杂的应用程序通常需要组合多个LLM来完成。LangChain提供了Chain功能,可以集成多个LLM,Chain也可以调用其他Chain。

1.4 代理模块

       代理也是一种Chain,负责决定下一步动作。代理由一个语言模型和一个提示组成,它需要以下输入:可用工具列表用户输入和历史执行信息(如果有的话)。代理cals的功能被称为“工具”。代理使用LLM来决定要采取的操作和顺序。操作包括——使用工具,观察工具的输出,向用户返回响应。

1.5 记忆模块

       记忆模块使系统能够记住过去的信息,这在对话机器人中非常重要。

1.6 回调模块

       回调机制允许用户使用API的“回调”参数返回LLM应用程序不同阶段的信息,比如用于日志记录、监控、流式传输等。

二、Mistral-7B

       Mistral-7B是一个强大的语言模型(目前是开源的),具有73亿个参数,性能优于很多参数量更高的大模型。它可以下载以供离线使用,也可以在云中使用或从HuggingFace下载。使用langchain中的HuggingFaceHub,可以使用以下代码加载并使用Mistral-7B:

repo_id = "mistralai/Mistral-7B-v0.1"llm = HuggingFaceHub(huggingfacehub_api_token='your huggingface access token here',                      repo_id=repo_id, model_kwargs={"temperature":0.2, "max_new_tokens":50})

三、HuggingFace Embedding

       在处理文本、图像、音频、视频、文档等数据时,通常首先会进行embedding把他们表示成数字类型,这样便于神经网络处理,embedding不仅仅是一种数字表示,它也可以捕捉数据的上下文语义信息。

       HuggingFace提供了Sentence Transformers模型可以进行embedding,安装如下所示:

pip install -U sentence-transformers

         然后使用它加载一个预先训练好的模型来对文本句子进行编码。

四、chroma向量存储

       chroma是一个开源的嵌入数据库(矢量存储),用于创建、存储、检索和进行嵌入的语义搜索。安装如下:

pip install chroma

       它允许用户连接到chroma客户端,创建一个集合,将带有元数据和id的文档添加到集合(此步骤创建嵌入),然后查询此集合(语义检索)。

五、pypdf库

       pypdf库可以读取、拆分、合并、裁剪、转换pdf文件的页面,添加自定义数据,更改查看选项,为pdf文件添加密码,从pdf文件中检索文本和元数据。安装如下所示:

pip install pypdf

         要将pypdf与AES加密或解密一起使用,请安装额外的依赖项:

pip install pypdf[crypto]

六、实现代码:

# Install dependencies!pip install huggingface_hub!pip install chromadb!pip install langchain!pip install pypdf!pip install sentence-transformers
# import required librariesfrom langchain.document_loaders import PyPDFLoaderfrom langchain.text_splitter import CharacterTextSplitterfrom langchain.embeddings import HuggingFaceEmbeddingsfrom langchain.llms import HuggingFaceHubfrom langchain.vectorstores import Chromafrom langchain.chains import ConversationalRetrievalChain
# Load the pdf file and split it into smaller chunksloader = PyPDFLoader('report.pdf')documents = loader.load()# Split the documents into smaller chunks text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)texts = text_splitter.split_documents(documents)
# We will use HuggingFace embeddings embeddings = HuggingFaceEmbeddings()
#Using Chroma vector database to store and retrieve embeddings of our textdb = Chroma.from_documents(texts, embeddings)retriever = db.as_retriever(search_kwargs={'k': 2})
# We are using Mistral-7B for this question answering repo_id = "mistralai/Mistral-7B-v0.1"llm = HuggingFaceHub(huggingfacehub_api_token='your huggingface access token here',                      repo_id=repo_id, model_kwargs={"temperature":0.2, "max_new_tokens":50})
# Create the Conversational Retrieval Chainqa_chain = ConversationalRetrievalChain.from_llm(llm, retriever,return_source_documents=True)
#We will run an infinite loop to ask questions to LLM and retrieve answers untill the user wants to quitimport syschat_history = []while True:    query = input('Prompt: ')    #To exit: use 'exit', 'quit', 'q', or Ctrl-D.",    if query.lower() in ["exit", "quit", "q"]:        print('Exiting')        sys.exit()    result = qa_chain({'question': query, 'chat_history': chat_history})    print('Answer: ' + result['answer'] + '\n')    chat_history.append((query, result['answer']))

        至此,基于PDF的聊天机器人就搭建好了,你可以从一个长而难的pdf中回答你的所有问题。Just do it!

参考文献:

[1] https://medium.com/@nimritakoul01/chat-with-your-pdf-files-using-mistral-7b-and-langchain-f3be9363301c

[2] https://colab.research.google.com/corgiredirector?site=https%3A%2F%2Fmedium.com%2F%40woyera%2Fhow-to-chat-with-your-pdf-using-python-llama-2-41df80c4e674

[3] https://www.shakudo.io/blog/build-pdf-bot-open-source-llms

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

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

相关文章

CENTOS docker拉取私服镜像

概述 docker的应用越来越多,安装部署越来越方便,批量自动化的镜像生成和发布都需要docker镜像的拉取。 centos6版本太老,docker的使用过程中问题较多,centos7相对简单容易。 本文档主要介绍centos系统安装docker和拉取docker私…

一文了解无线通信 - NB-IOT、LoRa

NB-IOT、LoRa 目录概述需求: 设计思路实现思路分析 NB-IOT1.LoRa2.区别 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardness,make a better result,wait for change,chall…

奇偶公式推导

推导前提: 基函数: f ( x ) − f ( − x ) f(x)-f(-x) f(x)−f(−x)偶函数: f ( x ) f ( − x ) f(x)f(-x) f(x)f(−x) 1. 奇函数 ∗ 奇函数 偶函数 奇函数*奇函数偶函数 奇函数∗奇函数偶函数 f 1 ( x ) ∗ f 2 ( x ) f_1(x)*f_2(x) f1​(x)∗f2​(x) − f 1 ( x ) ∗ …

[sparkSQL] Shuffle

在Spark SQL中,Shuffle 是指将数据重新分布到不同的节点上以进行处理的操作。在 Spark SQL 中,以下是一些可能触发 Shuffle 的操作或代码: group by 和 aggregations: 当使用 GROUP BY 或聚合函数(如 SUM、AVG&#xf…

istio 虚拟服务 yaml 解释

虚拟服务 virtualservice 可以类比 k8s service 管理 pod, vs 是管理 svc 的 vs 对 svc 定义了流量规则,将满足条件的流量转发到对应的服务后端 配置定义 hosts:流量发送的目标 在 k8s 中,hosts 一般是 servic 的短域名&#x…

简单了解SQL堆叠注入与二次注入(基于sqllabs演示)

1、堆叠注入 使用分号 ; 成堆的执行sql语句 以sqllabs-less-38为例 ?id1 简单测试发现闭合点为单引号 ?id1 order by 3 ?id1 order by 4使用order by探测发现只有三列(字段数) 尝试简单的联合注入查询 ?id-1 union select 1,database(),user()-…

开放网络+私有云=?星融元的私有云承载网络解决方案实例

在全世界范围内的云服务市场上,开放网络一直是一个备受关注的话题。相比于传统供应商的网络设备,开放网络具备软硬件解耦、云原生、可选组件丰富等优势,对云服务商和超大型企业有足够的吸引力。 SONiC作为开源的网络操作系统,使得…

Debian12升级openssh-9.6p1

下载openssh-9.6p1 https://www.openssh.com/ftp.html tar xvf openssh-9.6p1.tar.gz安装编译器和依赖库 apt-get install gcc apt-get install zlib1g-dev apt-get install libssl-dev apt-get install make编译 ./configure make 安装 make install为了使现在版本生效卸…

uni-app uni-app内置组件

锋哥原创的uni-app视频教程: 2023版uniapp从入门到上天视频教程(Java后端无废话版),火爆更新中..._哔哩哔哩_bilibili2023版uniapp从入门到上天视频教程(Java后端无废话版),火爆更新中...共计23条视频,包括:第1讲 uni…

机器学习之主成分分析(Principal Component Analysis,PCA)案例解析附代码

概念 主成分分析(Principal Component Analysis,PCA)是一种常用的降维技术,用于减少数据集维度并保留数据集中的主要特征。它通过线性变换将高维数据投影到低维空间,同时尽量保留数据集中的信息。 PCA的目标是找到数据中最重要的方向,即方差最大的方向,这些方向被称为…

【JS笔记】JavaScript语法 《基础+重点》 知识内容,快速上手(二)

数组 什么是数组? 字面理解就是 数字的组合 其实不太准确,准确的来说数组是一个 数据的集合 也就是我们把一些数据放在一个盒子里面,按照顺序排好 [1, 2, 3, hello, true, false]这个东西就是一个数组,存储着一些数据的集合 …

python测试工具: 实现数据源自动核对

测试业务需要: 现有A系统作为下游数据系统,上游系统有A1,A2,A3... 需要将A1,A2,A3...的数据达到某条件后(比如:A1系统销售单提交出库成功)自动触发MQ然后再经过数据清洗落到A系统,并将清洗后数据通过特定…

css 用多个阴影做出光斑投影的效果 box-shadow

css 用多个阴影做出光斑投影的效果 box-shadow 你首先需要知道的一点是 box-shadow 可以接收多个值,也就是可以设置多个阴影,这样就可以做一个类似光斑投影的效果。 一、效果 二、代码 里面用到了我一些 scss 工具方法,不过不影响&#xf…

Linux升级指南:保持系统安全和高效运行

Linux系统的升级是确保系统稳定和安全性的重要步骤。本文将介绍Linux系统升级的基本概念,以及具体的操作步骤和注意事项,以帮助用户顺利升级他们的Linux系统。 Linux操作系统以其稳定性和可定制性而闻名,它经常通过升级来提供新的功能、修复漏…

在使用tcp长连接时,是否还需要再引入重发机制?

一 什么是tcp长连接? 在TCP(Transmission Control Protocol)中,长连接是指在通信过程中保持连接状态的一种方式,相对于短连接而言。长连接通常用于需要频繁通信的场景,以减少连接建立和断开的开销。在长连接…

Java解决正整数和负整数的最大计数

Java解决正整数和负整数的最大计数 01 题目 给你一个按 非递减顺序 排列的数组 nums ,返回正整数数目和负整数数目中的最大值。 换句话讲,如果 nums 中正整数的数目是 pos ,而负整数的数目是 neg ,返回 pos 和 neg二者中的最大…

秒杀系统的设计思路(应对高并发,超卖等问题的解决思路)

首先我们先看一下设计秒杀系统时,我们应该考虑的问题。 解决方案: 一.页面静态化结合CDN内容分发 前端把能提前放入cdn服务器的东西都放进去,反正把所有能提升效率的步骤都做一下,减少真正秒杀时候服务器的压力。 秒杀活动的页面…

达达快送无代码API:电商平台广告推广与客服系统一体化

快速实现高效对接:无代码开发的集成优势 在电商行业竞争日益激烈的现状下,快速对接高效的即时配送服务已成为企业取胜的关键。无代码开发为电商平台与达达快送之间的连接提供了便利,无需深入编程知识,企业即可通过图形化界面轻松…

九州金榜|家庭教育中如何培养优秀的孩子

家庭是孩子心中最大的底气,而家庭的形态也就构成孩子未来的模样。所以给为孩子提供最好的教育,就是为孩子创建一个学习气氛浓厚,成员关系美满的家庭,它会成孩子成长道路上最大的助力,最温暖的港湾。 北京大学校长蔡元培…

Windows Sockets 2 笔记

文章目录 一、Winsock简介二、Windows中Winsock对网络协议支持的情况三、使用Winsock3.1 关于服务器和客户端3.2 创建基本Winsock应用程序3.3 初始化Winscok3.3.1 初始化步骤3.3.2 初始化的核心代码3.3.3 WSAStartup函数的协调3.3.4 WSACleanup函数3.3.5 初始化的完整代码 3.4 …