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

首先安装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.mzph.cn/news/883834.shtml

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

相关文章

开源呼叫中心系统FreeIPCC:SIP 协议详解

SIP 协议详解大全 作者:开源呼叫中心系统FreeIPCC SIP(Session Initiation Protocol,会话初始协议)是由IETF(Internet Engineering Task Force,因特网工程任务组)制定的多媒体通信协议。它最早…

机器学习认知包

开源竞争: 开源竞争(自己没有办法完全掌握技术的时候就开源掉,培养出更多的技术依赖,让更多的人完善你的技术,那么这不就是在砸罐子吗?一个行业里面你不去砸罐子,其他人就会砸罐子,你…

北京迅为iTOP-LS2K0500开发板快速使用编译环境虚拟机Ubuntu基础操作及设置

迅为iTOP-LS2K0500开发板 迅为iTOP-LS2K0500开发板采用龙芯LS2K0500处理器,基于龙芯自主指令系统(LoongArch)架构,片内集成64位LA264处理器核、32位DDR3控制器、2D GPU、DVO显示接口、两路PClE2.0、两路SATA2.0、四路USB2.0、一路…

浏览器HTTP缓存解读(HTTP Status:200 304)

为什么要有浏览器缓存? 浏览器缓存(Brower Caching)是浏览器对之前请求过的文件进行缓存,以便下一次访问时重复使用,节省带宽,提高访问速度,降低服务器压力 http缓存机制主要在http响应头中设定,响应头中…

(蓝桥杯C/C++)——常用库函数

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 一、 二分查找 1.二分查找的前提 2.binary_ search函数 3.lower_bound和upper_bound 二、排序 1.sort概念 2.sort的用法 3.自定义比较函数 三、全排列 1.next p…

Spring Boot⾃动配置

一、Spring Boot的自动配置原理 Spring Boot使用一种称为“约定优于配置”的方法,这意味着如果你按照预定的方式来安排你的代码和依赖项,Spring Boot可以自动配置你的应用程序。主要特点包括: 自动检测:Spring Boot在应用启动时…

C#实现word和pdf格式互转

1、word转pdf 使用nuget: Microsoft.Office.Interop.Word winform页面: 后端代码: //using Spire.Doc; //using Spire.Pdf; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using Sy…

LeetCode题练习与总结:将数据流变为多个不相交区间--352

一、题目描述 给你一个由非负整数 a1, a2, ..., an 组成的数据流输入,请你将到目前为止看到的数字总结为不相交的区间列表。 实现 SummaryRanges 类: SummaryRanges() 使用一个空数据流初始化对象。void addNum(int val) 向数据流中加入整数 val 。int…

iOS Swift5算法恢复——HMAC

demangle的时候看到了CryptoSwift,HMAC,于是写一个helloworld,用于对照。 sudo gem install cocoapods pod init pods文件,注意要标注静态链接: # Uncomment the next line to define a global platform for your p…

一些MATLAB到Python的转换指南

1. 矩阵和数组操作 MATLAB使用方括号[]来创建矩阵和数组。Python使用列表[]或NumPy库中的数组。 MATLAB: A [1 2 3; 4 5 6; 7 8 9];Python: import numpy as npA np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])2. 数学运算 MATLAB中很多内置函数可以直接用于矩阵。Python…

Diving into the HAL-----HAL_GPIO

1、怎么看待外设: 从总线连接的角度看,外设和Core、DMA通过总线交换数据,正所谓要想富先修路。要注意,这些总线中的每一个都连接到不同的时钟源,这些时钟源决定了连接到该总线的外设操作的最大速度。 从内存分配的角度…

C#与C++交互开发系列(十六):使用多线程

前言 在开发需要高性能的应用程序时,多线程是提升处理效率和响应速度的关键技术。C 和 C# 各自拥有不同的线程模型和并发工具。在跨语言开发中,如何有效地利用两者的并发特性,同时确保线程安全和数据一致性,是一个值得探讨的问题…

构建最新的LLaMA-Factory镜像

保持最新的仓库代码: git clone https://github.com/hiyouga/LLaMA-Factory.gitcd /root/xiedong/LLaMA-Factory如果不在意本地文件的修改,可以通过以下命令直接获取远端最新的文件: git fetch --all git reset --hard origin/main构建镜像: docker build --progress=pl…

SCSS在Vue中的用法

SCSS在Vue中的用法 一、安装相关依赖1、安装sass - loader和node - sass(或dart - sass) 二、在组件中使用SCSS1、单文件组件(.vue)中的样式使用2、**全局样式使用SCSS**3、在组件中使用变量和混入(Mixins)…

libavdevice.so.58: cannot open shared object file: No such file ordirectory踩坑

博主是将大图切分成小图时遇到 问题一、linux编译后,找不到ffmpeg中的一个文件 产生原因,各种包集成,然后安装以后乱七八糟,甚至官方的教程也不规范导致没有添加路径到系统文件导致系统执行的时候找不到 1.下载 博主进行的离线…

GraphQL系列 - 第1讲 GraphQL语法入门

目录 一、介绍GraphQL二、GraphQL基本使用方法三、Schema 定义语言 (SDL)3.1 类型定义1)对象类型2)标量类型3)枚举类型4)输入类型5)列表类型6)非空类型7)接口类型8)联合类型 3.2 查询…

thrift idl 语言基础学习

include,他的作用是用作 idl 的模块化编程的 include “include_test.thrift” 单行注释 // 单行注释 /** 多行注释 **/// 指定生成好的代码包,其中 namespace 是固定的,后面的是语言,可以是Java 也可以是其他的,后面的是包路径 namespace java com.rpc.thrift namesp…

查询使用方法:

模糊查询: 查询某一列中内容为空的记录。 -- 模糊查询 (项目中尽量不要使用) -- 张x SELECT * FROM student WHERE student_name LIKE 张_; -- % 不限长度的字符 -- 手机号中有 23 0或多个 SELECT * FROM student WHERE phone LIKE %23% -- 名字包含铮的学生 SELEC…

数据结构与算法分析——你真的理解查找算法吗——基于散列的查找(代码详解+万字长文)

一、算法描述 前面讨论的查找算法在处理小数据量(顺序查找)或者有序的数据集合(二分查找)时才使用。我们需要更加强大的算法能够查找较大的集合,而且并不需要有序。最常使用的一个方法是使用散列函数来将目标元素的一个或者多个特征转换成一个值,这个值用来索引一个已经索引的…

密码管理工具实现

该文档详细描述了实现一个简单的密码管理工具的过程,工具基于PHP和MySQL构建,支持用户注册、密码存储、管理以及角色权限控制等核心功能。 系统架构设计 技术栈:PHP(后端逻辑)、MySQL(数据存储&#xff09…