使用LangChain实现大语言模型对话解析PDF

文章介绍了如何通过PDF转文本,利用LangChain的Chroma构建向量知识库,解决大语言模型处理PDF内容时的Token限制问题,包括文件加载、文本分割、向量化和查询检索的过程。GitHub上有相关的开源代码可供参考。
摘要由CSDN通过智能技术生成

1.具体思路

  LLM分析PDF的话一种是可以通过PDF转文字,让大语言模型进行分析,但是这种方法存在局限性,如果PDF文字内容过多话,就涉及到最大Token的问题,即使是本地部署的大语言模型,也会遇到Token限制,或者是显存溢出问题。

  这个时候就可以用到LangChain中的Chroma来构建我们的向量知识库,具体流程如下:

PyPDFLoader(加载PDF文档)–>文本分割–>向量化–>构造向量库

2.实现方法

1.定义我们的文件路径并加载

from langchain.document_loaders import PyPDFLoader, UnstructuredFileLoader
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.vectorstores import Chroma

loader = PyPDFLoader(file_path)
docs = loader.load()

2.文本分割
chunk_size:为分割大小
chunk_overlap: 是为了避免完整的句子被分割导致LLM理解错误

text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=200)
docs = text_splitter.split_documents(docs)

3.向量化并构造向量数据库
我这边使用的Embdding模型是shibing624/text2vec-base-multilingual

embedding = HuggingFaceEmbeddings(model_name=config.EMBEDDING_MODEL_PATH)
# 构造向量库+conversation_id
persist_directory = os.path.join(config.KNOWLEDGE_FILE_PATH, kb_name)

# 创建向量数据库
vectordb = Chroma.from_documents(
    documents=docs,
    embedding=embedding,
    persist_directory=persist_directory
)
print("vectordb:", vectordb._collection.count())
vectordb.persist() # 向量持久话

4.用户提问,检索对应的片段,交给LLM处理回答
我们可以根据用户的Query来进行匹配文章内容,进而构造prompt来进行提问

embedding = HuggingFaceEmbeddings(model_name=config.EMBEDDING_MODEL_PATH)
vectordb = Chroma(persist_directory=persist_directory, embedding_function=embedding)
print(vectordb._collection.count())
logger.info("Load database building finished. %s", time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))

# docs = vectordb.similarity_search(query, k=3)
docs = vectordb.similarity_search(query, k=5)

page = list(set([docs.metadata['page'] for docs in docs]))
page.sort()

context = [docs.page_content for docs in docs]
prompt = f"已知PDF内容:\n{context}\n根据已知信息回答问题:\n{query}\n所有的回答都根据已知信息"

GitHub已经开源:
https://github.com/1264204425/PdfReader-LangChian-LLM
代码写的较烂轻喷

在这里插入图片描述
在这里插入图片描述

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值