首页 > 其他分享 >构建PDF文件问答系统——从文档加载到检索增强生成

构建PDF文件问答系统——从文档加载到检索增强生成

时间:2025-01-02 18:59:59浏览次数:3  
标签:RAG chain langchain 文档 import PDF 加载

技术背景介绍

老铁们,相信你们都知道,PDF格式的文档在信息存储上有它的独有之处,尤其是那些长篇大论的年报或者技术白皮书之类。不过问题来了,这些文档里的非结构化数据本身不太容易直接喂给语言模型(LLM)。所以,今天我们就来聊聊如何搭建一个能从PDF文件中回答问题的系统——也就是利用RAG(检索增强生成)流水线来完成这个任务。

这次教程会简单带过一些在我们RAG教程中更深入探讨的概念,比如文档加载器、向量存储等。如果你对这些不太熟悉,建议先浏览一遍相关内容。

原理深度解析

文档加载

首先,我们需要选择一个PDF加载进来使用。这里,为了演示,我选择了耐克年度公开的SEC报告。你可以换成你喜欢的PDF。

代码示例
%pip install -qU pypdf langchain_community

from langchain_community.document_loaders import PyPDFLoader

file_path = "../example_data/nke-10k-2023.pdf"
loader = PyPDFLoader(file_path)

docs = loader.load()

print(len(docs))

我们使用的是由pypdf包驱动的PDF加载器,它会读取PDF中的文本并生成每页的LangChain文档。

问答系统构建

接下来,我们需要把加载的文档准备好以便后续检索。通过text splitter,我们先把文档分割成较小的文本块,这样更容易放进LLM的上下文窗口。然后,我们将这些文本块加载到向量存储中,并创建一个retriever

代码示例
%pip install langchain_chroma langchain_openai

from langchain_chroma import Chroma
from langchain_openai import OpenAIEmbeddings
from langchain_text_splitters import RecursiveCharacterTextSplitter

text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
splits = text_splitter.split_documents(docs)
vectorstore = Chroma.from_documents(documents=splits, embedding=OpenAIEmbeddings())

retriever = vectorstore.as_retriever()

创建RAG流水线

为了构建最终的RAG流水线,我们会利用一些内置的助手函数:

代码示例
from langchain.chains import create_retrieval_chain
from langchain.chains.combine_documents import create_stuff_documents_chain
from langchain_core.prompts import ChatPromptTemplate

system_prompt = (
    "You are an assistant for question-answering tasks. "
    "Use the following pieces of retrieved context to answer "
    "the question. If you don't know the answer, say that you "
    "don't know. Use three sentences maximum and keep the "
    "answer concise."
    "\n\n"
    "{context}"
)

prompt = ChatPromptTemplate.from_messages(
    [
        ("system", system_prompt),
        ("human", "{input}"),
    ]
)

question_answer_chain = create_stuff_documents_chain(llm, prompt)
rag_chain = create_retrieval_chain(retriever, question_answer_chain)

results = rag_chain.invoke({"input": "What was Nike's revenue in 2023?"})

results

此处,我们的RAG链将返回一个答案以及用于生成答案的上下文文档。

优化建议分享

如果你发现系统在处理大文档时逐渐变慢,可以尝试使用代理服务来提高稳定性。建议大家多尝试不同的向量存储方案,比如Chroma,来优化性能。

补充说明和总结

说白了,这套系统就是通过构建RAG链来从PDF中获取答案。文章中用到的技术和工具,比如LangChain和Chroma,都是为了实现这个目标而选的。我个人一直在用 https://yunwu.ai 提供的一站式大模型解决方案,效果不错。

今天的技术分享就到这里,希望对大家有帮助。开发过程中遇到问题也可以在评论区交流~

—END—

标签:RAG,chain,langchain,文档,import,PDF,加载
From: https://blog.csdn.net/srudfktuffk/article/details/144892692

相关文章

  • worker加载js脚本如何解决跨域?
    在前端开发中,当你尝试从一个域(例如:http://example.com)的Web页面加载另一个域(例如:http://api.another-example.com)的JavaScript脚本时,可能会遇到跨域问题。这是由浏览器的同源策略(Same-OriginPolicy)导致的,它限制了一个源的文档或脚本与另一个源的资源进行交互。为了解决跨域......
  • 一款基于.Net方便、快捷的数据库文档查询、生成工具
    项目介绍SmartSQL是一款方便、快捷的数据库文档查询、导出工具!从最初仅支持SqlServer数据库、CHM文档格式开始,通过不断地探索开发、集思广益和不断改进,又陆续支持Word、Excel、PDF、Html、Xml、Json、MarkDown等文档格式的导出。同时又扩展支持包括SqlServer、MySql、Pos......
  • PDF-XChange Editor Plus(PDF编辑器) v10.4.4.392 便携版
    PDF-XChangePRO-使用PDF的通用解决方案。包含了Tracker软件的三个最佳应用程序的软件包:PDF-XChangeEditorPlus,PDF-Tools和PDF-XChangeStandard。使用PDF-XChangeEditorPlus,您可以创建,查看和编辑图像和PDF文件。PDF-Tools在创建和处理PDF文件方面处于世界领先地位。得益于......
  • 【源码+文档】基于SpringBoot + Vue的企业级工位管理系统
    ......
  • 【源码+文档】基于SpringBoot + Vue的计算机课程管理系统
    ......
  • <script> 标签放在 HTML 文档的 <body> 内底部
    以下是将<script>标签放在HTML文档的<body>内底部的几个重要原因:1.页面加载顺序和性能优化原理:当浏览器解析HTML文档时,它会按顺序执行遇到的元素。如果<script>标签位于<head>中或<body>的顶部,浏览器会在下载和执行脚本时暂停HTML文档的解析和渲染,因为脚本......
  • 虚拟滚动加加载的原理和实现思路
    以下是关于虚拟滚动加加载的原理和实现思路:一、虚拟滚动原理1.基本概念可视区域:用户在屏幕上看到的部分,是实际渲染内容的窗口。只有处于可视区域内的元素才会被渲染到DOM中,而其他部分不会被渲染,从而减少DOM元素的数量,提高性能。2.实现思路数据存储与显示:存储......
  • 如何实现网页加载进度条
    基于HTML5和JavaScript的简单进度条实现原理:利用window.onload事件和document.readyState属性来跟踪页面加载进度。document.readyState有不同的状态值,如loading(正在加载)、interactive(文档已被解析,“交互时间”开始)和complete(文档和所有子资源已完成加载)。实现步骤:首先,在HT......
  • 常见图片懒加载方式有哪些
    原生JavaScript实现懒加载原理:利用浏览器的可视区域(getBoundingClientRect函数可以获取元素相对于视窗的位置)来判断图片是否进入可视区域。当图片进入可视区域时,将图片的src属性设置为真实的图片地址,从而实现懒加载。实现步骤:首先,将图片的src属性设置为一个占位符(通常是一......
  • 专业便捷PDF软件,即开即用
    PDF文件因其小巧的体积、便捷的分享与存储方式,以及卓越的安全性,已成为学习、企业及各类机构中不可或缺的文件格式。无论是在学术研究、课程资料、商业报告还是合同文件中,PDF都能有效保持原有的格式和布局,确保内容在不同设备和平台上完美呈现。此外,PDF文件具备防篡改和加密功......