Lazy loaded image
📑构建一个基于PDF的问答系统 | 🦜️🔗 LangChain
Words 1954Read Time 5 min
2024-12-31
2024-12-31
type
status
date
slug
summary
tags
category
icon
password
comment
Status
20行代码构建一个PDF文件的问答系统
在企业中的文件或者学习的资料通常都是使用PDF文件传输,文件中往往包含了其他来源无法获得的关键非结构化数据。它们可能非常长,并且与纯文本文件不同,通常不能直接输入到大模型的提示词中。
我们将创建一个可以回答关于PDF文件中问题的问答系统,我们可以使用LangChain提供的文档加载器去加载文件,以获取大模型(LLM)可用的文本,然后创建一个 RAG 链去回答问题,并且给出参考引用的来源。
本教程将略过一些在RAG教程中更深入介绍的概念,所以如果您还没有看过,可能需要先去学习相关内容

加载文档

首先需要加载选择的PDF文件,我们将使用耐克的年度报告,这篇报告长度超过100页,混合了数据图表和文本,你可以选择自己的任何文件。
选择好PDF文档后,下一步就是将文档加载成大语言模型易于理解的文本格式。
这里我们使用 PyPDFLoader 包去读取文件。
PyPDFLoader 为我们做了哪些事情呢:
  • 加载PDF文件到系统内存;
  • 然后使用 pypdf 提取文本数据;
  • 最终,它为PDF的每一页创建了一个Document 文档的对象,其中包含页面内容以及一些关于文本在文档中来源位置的元数据。
LangChain 有许多其他针对不同数据源的文档加载器,或者也可以创建自定义的文档加载器。

RAG 问答

 
现在我们准备好了检索器retrieval需要加载的文档,
  • 接下来将使用文本分割器,将文档分割成适应大模型上下文窗口的更小片段。
  • 最后就可以使用创建好的向量数据库构建一个retriever 检索器。
最后我们使用Langchain为我们提供的内置构造方法,来构建最终的RAG链rag_chain
可看到,在返回的结果中不仅包含了最终的答案,还包含了大模型用来生成答案的PDF引用内容。
我们打印一下引用的内容及其元数据,可以看到结果不仅包含了页面内容块的文档,还保留了最初加载它们时的原始元数据,来源和页码:
上面的文章片段来源于的pdf文档及其页码,我们可以使用这些数据来显示答案来自哪个PDF的哪一页,允许用户快速验证答案是基于原始材料的哪些内容。

总结

本文中,我们使用了不到20行代码,创建了一个PDF文件问答系统。该系统能够加载PDF文件,提取文本内容,通过文本分割和向量存储构建检索器,并最终利用RAG链给出问题的回答,同时提供答案的引用来源和元数据。
 
官网链接:
上一篇
建立一个将自然语言的问题转换成结构化对象并查询的RAG应用| 🦜️🔗 LangChain
下一篇
主流国产大模型工具调用测试| 🦜️🔗 LangChain