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

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

python 复制代码
pip install langchain

第一步

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

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

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

python 复制代码
#文本切割
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(千帆嵌入模型)

python 复制代码
#创建嵌入模型
import os
from langchain_community.embeddings import QianfanEmbeddingsEndpoint

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

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

python 复制代码
#创建本地向量数据库
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()
相关推荐
Teable任意门互动25 分钟前
AI原生开源多维表格有哪些?主流开源多维表格对比解析
数据库·开源·excel·钉钉·飞书·开源软件·ai-native
TDengine (老段)1 小时前
MNode 内部机制深度解析 — SDB、事务引擎与 DDL 处理全链路
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
这个DBA有点耶1 小时前
数据库上云 vs 自建:从成本到人力的三维对比与决策框架
数据库·经验分享·sql·创业创新·dba
shizhan_cloud1 小时前
MySQL 索引优化 + 慢查询日志
数据库·mysql
Drache_long1 小时前
MySQL数据库(故障排除)
数据库·mysql
2303_821287381 小时前
如何清洗SQL输入数据_使用框架内置的ORM处理数据交互
jvm·数据库·python
清风雅雨1 小时前
AI编程:OA流程明细表中多个金额字段由整数改为2位小数
数据库·ai编程
菜鸟上路_lbz1 小时前
sqlserver存储过程查询缓慢锁表分析
数据库·sqlserver
Elastic 中国社区官方博客1 小时前
在 Elasticsearch 中使用利润率与流行度加权来优化电商搜索
大数据·数据库·elasticsearch·搜索引擎·全文检索
van久2 小时前
Day32:项目性能优化(EF Core + 分页 + 全异步)
数据库·oracle·性能优化