基于langchain框架的智能PDF问答(一)创建向量数据库

ops/2024/10/30 9:55:07/

首先安装langchain,安装完之后就可以开始我们的步骤了

pip install langchain

第一步

我们可以先创建一个Python文件,用于将PDF加载到我们本地的向量数据库
一、读取文档
加载PDFX需要用到文本加载器,导入PyPDFLoader这个函数

#读取文档
from langchain.document_loaders import PyPDFLoader
##文档路径
temp_file_path = "10.19.pdf"
##解析文档
loader = PyPDFLoader(temp_file_path)
##转换文档格式
docs = loader.load()

二、文本分割
因为大语言模型通常都有输入字数限制,所以需要对文本就行切割传输,这里用到文本切割器,需要用到库中RecursiveCharacterTextSplitter这个函数

#文本切割
from langchain_text_splitters import RecursiveCharacterTextSplitter
##创建一个文本切割器
text_splitter = RecursiveCharacterTextSplitter(chunk_size=100,##每个文本块的大小chunk_overlap=50,##与前面重叠的大小separators=["\n", "。", "!", "?", ",", "、", ""]#分隔符
)
##使用创建的文本分割器对文本进行分割
texts = text_splitter.split_documents(docs)

三、创建嵌入模型
我这里使用的是百度千帆大模型,因为一开始注册会提供20元的卷,这里需要你自己去注册申请AK和SK
至于为什么创建的是嵌入模型,嵌入模型的主要任务是将自然语言文本转换为数字向量,使得模型能够理解和处理文本数据。
这里需要引入os(设置环境变量),QianfanEmbeddingsEndpoint(千帆嵌入模型)

#创建嵌入模型
import os
from langchain_community.embeddings import QianfanEmbeddingsEndpoint##设置环境变量
os.environ['QIANFAN_AK'] = "你自己的AK"
os.environ['QIANFAN_SK'] = "你自己的SK"
##创建模型
embeddings_model = QianfanEmbeddingsEndpoint()

四、创建本地向量数据库,并添入向量数据
这里我用的Chroma向量数据库,相应的也需要引用这个函数Chroma

#创建本地向量数据库
from langchain.vectorstores import Chroma
##数量数据库保存位置
persist_directory = 'date'
##通过嵌入模型,创建向量数据库
vectordb = Chroma(embedding_function=embeddings_model,##调用刚刚创建的嵌入模型persist_directory=persist_directory##向量数据库保存位置
)#将处理好的pdf数据添加到向量数据库
vectordb.add_documents(documents=texts
)
# 确保持久化保存更新
vectordb.persist()

http://www.ppmy.cn/ops/129546.html

相关文章

怎么实现电脑控制100台手机,苹果手机群控系统不用越狱实现新突破

今天来给大家介绍一款软件——手机群控。 什么是手机群控?就是将多台手机同时连接至一台电脑,集中控制管理。 对于苹果iOS免越狱中控,此前一直是个难题。 毕竟iOS系统封闭性极强,且苹果官方限制了USB的传输类型,只允…

SELS-SSL/TLS

一、了解公钥加密(非对称加密) 非对称加密中,用于加密数据的密钥与用于解密数据的密钥不同。私钥仅所有者知晓,而公钥则可自由分发。发送方使用接收方的公钥对数据进行加密,数据仅能使用相应的私钥进行解密。 你可以将…

uniapp 如何调用音频

uniapp调用音频 button点击 <view><button click"startPlay">开始播放</button></view>方法实现 startPlay() { const innerAudioContext uni.createInnerAudioContext();innerAudioContext.src /static/sounds/oqc.mp3;innerAudioContex…

Python | Leetcode Python题解之第515题在每个树行中找最大值

题目&#xff1a; 题解&#xff1a; class Solution:def largestValues(self, root: Optional[TreeNode]) -> List[int]:if root is None:return []ans []q [root]while q:maxVal -inftmp qq []for node in tmp:maxVal max(maxVal, node.val)if node.left:q.append(n…

即插即用篇 | YOLOv10 引入 空间和通道协同注意力模块 SCSA

论文名称:SCSA: Exploring the Synergistic Effects Between Spatial and Channel Attention 论文地址:https://arxiv.org/pdf/2407.05128 代码地址:https://github.com/HZAI-ZJNU/SCSA 通道和空间注意力在提取特征依赖关系和空间结构关系方面,为各种下游视觉任务带来了显著…

显示器时不时黑一下是什么原因?

当你的显示器偶尔出现短暂的黑屏现象&#xff0c;通常会持续1到2秒钟&#xff0c;然后恢复正常显示&#xff0c;这个是什么原因导致的&#xff1f; 可能是电源供应器&#xff08;PSU&#xff09;功率不足&#xff0c;或者电源设备本身存在质量问题&#xff0c;会导致显示器间歇…

基于Spring Boot+Vue的助农销售平台(协同过滤算法、节流算法、支付宝沙盒支付、图形化分析)

&#x1f388;系统亮点&#xff1a;协同过滤算法、节流算法、支付宝沙盒支付、图形化分析&#xff1b; 一.系统开发工具与环境搭建 1.系统设计开发工具 后端使用Java编程语言的Spring boot框架 项目架构&#xff1a;B/S架构 运行环境&#xff1a;win10/win11、jdk17 前端&…

ES6 变量的解构赋值

数组的解构赋值 对象的解构赋值 字符串的解构赋值