RAG(四) LangChain 使用PyPDFLoader加载 PDF 并实现内容总结功能

一、核心知识点解析

1. PyPDFLoader 详细用法(重点补充)

PyPDFLoader是 LangChain-Community 库中最常用的 PDF 加载器之一,底层基于pypdf库实现,专门用于从 PDF 文件中提取文本内容,并封装为 LangChain 标准的Document对象。

1.1 基本初始化
# 方式1:本地文件路径(推荐) loader = PyPDFLoader("./pdf/a.pdf") # 方式2:远程PDF文件URL(需确保网络可访问) loader = PyPDFLoader("https://example.com/sample.pdf")
  • 支持本地绝对路径 / 相对路径远程 HTTP/HTTPS URL
  • 若文件不存在 / URL 无法访问,会直接抛出FileNotFoundError或网络相关异常。
1.2 核心方法
方法名作用返回值
load()加载整个 PDF,不分割页面包含 1 个Document对象的列表(所有页面文本拼接)
load_and_split()加载 PDF 并按页面分割包含 N 个Document对象的列表(N 为 PDF 页数,每个对象对应 1 页)
lazy_load()惰性加载(逐页读取,节省内存)生成器对象,遍历可获取每页的Document对象

示例对比

# 1. load():所有内容合并为1个Document full_doc = loader.load() print(f"load()返回数量:{len(full_doc)}") # 输出:1 print(f"内容:{full_doc[0].page_content[:100]}") # 前100个字符 # 2. load_and_split():按页面分割为多个Document page_docs = loader.load_and_split() print(f"load_and_split()返回数量:{len(page_docs)}") # 输出:PDF的总页数 print(f"第1页内容:{page_docs[0].page_content[:100]}") # 3. lazy_load():惰性加载(适合超大PDF) for doc in loader.lazy_load(): print(f"当前页内容:{doc.page_content[:50]}") break # 仅演示,实际可遍历所有页
1.3 Document 对象结构

PyPDFLoader返回的Document对象是 LangChain 处理非结构化数据的标准格式,核心属性:

# 取第1页的Document对象 page = page_docs[0] # 核心属性1:页面文本内容(最常用) print(page.page_content) # 核心属性2:元数据(包含PDF的关键信息) print(page.metadata) # 典型输出: # { # 'source': './pdf/a.pdf', # 文件路径/URL # 'page': 0 # 页码(从0开始计数) # }
  • page_content:字符串类型,存储当前页的纯文本内容(去除 PDF 格式、图片、表格,仅保留文字)。
  • metadata:字典类型,存储文件来源、页码等元数据,可用于后续的内容溯源、分页总结等场景。
1.4 高级用法:指定页码范围加载

若只需加载 PDF 的部分页面(如仅第 1-5 页),可结合切片实现:

# 步骤1:先惰性加载所有页 all_pages = list(loader.lazy_load()) # 步骤2:切片获取指定页码(0为第1页,左闭右开) target_pages = all_pages[0:5] # 第1-5页 # 步骤3:拼接指定页的内容 target_content = "\n".join([p.page_content for p in target_pages])

在大模型应用开发中,处理 PDF 文档并基于文档内容进行分析、总结是非常常见的需求。LangChain 作为一站式的 LLM 应用开发框架,提供了简洁高效的 PDF 处理工具链。本文将基于实际代码,详细讲解如何使用 LangChain 加载 PDF 文件、提取文本内容,并调用 DeepSeek 大模型完成文档总结。

二、环境准备

在开始编码前,需要先安装所需的依赖包,并配置 API 密钥:

1. 安装依赖

# 核心依赖:LangChain框架及PDF处理库 pip install langchain langchain-community langchain-core langchain-openai # PDF处理依赖(PyPDFLoader底层依赖pypdf) pip install pypdf python-dotenv

2. 配置 API 密钥

创建.env文件,填入 DeepSeek 的 API 密钥(需提前在 DeepSeek 官网申请):

env

DEEPSEEK_API_KEY=你的deepseek_api_key

三、完整代码实现

以下是加载 PDF 并实现内容总结的完整可运行代码,每一步都添加了详细注释:

# 1. 导入PDF加载器 from langchain_community.document_loaders import PyPDFLoader # 初始化PDF加载器,指定PDF文件路径 # 注意:请将路径替换为你自己的PDF文件路径 loader = PyPDFLoader("./pdf/a.pdf") # 加载PDF并按页面分割(返回Document对象列表) pages = loader.load_and_split() # 2. 拼接所有页面的文本内容 docs = "" for item in pages: # page_content是Document对象中存储文本内容的核心属性 docs += item.page_content # 3. 配置提示词模板 from langchain_core.prompts import ChatPromptTemplate # 定义总结用的提示词模板,{context}是动态填充的PDF文本内容 template = """ {context} 总结上面的内容 """ # 将模板转换为LangChain可调用的Prompt对象 prompt = ChatPromptTemplate.from_template(template) # 4. 配置大模型和输出解析器 from langchain_core.output_parsers import StrOutputParser import os from dotenv import load_dotenv from langchain_openai import ChatOpenAI from pydantic import SecretStr # 加载.env文件中的环境变量 load_dotenv() # 初始化DeepSeek大模型(兼容OpenAI接口规范) llm = ChatOpenAI( base_url="https://api.deepseek.com/v1", # DeepSeek的API基础地址 model="deepseek-chat", # 使用的模型名称 api_key=SecretStr(os.environ["DEEPSEEK_API_KEY"]), # 从环境变量读取API密钥 ) # 初始化输出解析器(将LLM的输出转换为字符串) outputParser = StrOutputParser() # 5. 构建链式调用并执行总结 # LangChain的Runnable接口:Prompt -> LLM -> 输出解析器 chain = prompt | llm | outputParser # 调用链,传入PDF文本内容作为context参数 result = chain.invoke({"context": docs}) # 打印总结结果 print(result)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1120898.shtml

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

相关文章

Taichi终极指南:用Python实现GPU加速的物理仿真

Taichi终极指南:用Python实现GPU加速的物理仿真 【免费下载链接】taichi Productive & portable high-performance programming in Python. 项目地址: https://gitcode.com/GitHub_Trending/ta/taichi 想要在Python中实现媲美C性能的物理仿真吗&#xff…

Textstat:终极文本可读性分析工具完整指南

Textstat:终极文本可读性分析工具完整指南 【免费下载链接】textstat :memo: python package to calculate readability statistics of a text object - paragraphs, sentences, articles. 项目地址: https://gitcode.com/gh_mirrors/tex/textstat 在内容创作…

深入探索xtb量子化学计算工具:从基础到实战的完整指南

深入探索xtb量子化学计算工具:从基础到实战的完整指南 【免费下载链接】xtb Semiempirical Extended Tight-Binding Program Package 项目地址: https://gitcode.com/gh_mirrors/xt/xtb xtb作为一款先进的半经验扩展紧束缚程序包,为化学研究者和学…

RAG(五) 向量存储检索器(Retriever)的使用

在基于检索增强生成(RAG)的问答系统中,向量存储检索器(Retriever) 是连接原始文档与大语言模型(LLM)的核心桥梁。它负责从海量的向量数据中快速找到与用户问题最相关的信息,为 LLM 提…

如何用ms-swift训练自己的智能推荐系统模型?

如何用 ms-swift 训练自己的智能推荐系统模型? 在电商、短视频、社交平台日益依赖“千人千面”推荐的今天,传统基于协同过滤或浅层模型的推荐系统正面临天花板:用户兴趣捕捉不精准、冷启动问题严重、内容多样性差。而大语言模型(L…

货币政策影响模拟与预测

货币政策影响模拟与预测:基于 ms-swift 框架的大模型工程化实践 在中央银行每一次利率调整的背后,都牵动着万亿级资本的流动、企业投资决策的转向以及普通家庭资产负债表的重估。如何精准预判“加息25个基点”对房地产、消费与通胀的连锁反应&#xff1…

RAG(六) 文本分割器的使用

我们上一节将外部数据源加载为 Document 对象。然而,这些文档通常太长,无法直接放入模型的上下文窗口。例如,一个几十页的 PDF 文档转换成文本后,会远远超出大多数模型的 4k、8k 或甚至 128k token 的限制。为了解决这个问题&…

GraphQL-Go自定义标量类型完整实现指南

GraphQL-Go自定义标量类型完整实现指南 【免费下载链接】graphql-go GraphQL server with a focus on ease of use 项目地址: https://gitcode.com/gh_mirrors/gr/graphql-go GraphQL作为现代API开发的核心技术,其强大的类型系统为开发者提供了极大的灵活性。…

STM32 USB大容量存储驱动实现图解说明

让STM32变身U盘:深入拆解USB大容量存储驱动实现全流程 你有没有遇到过这样的场景? 设备在现场运行了一周,日志数据堆满了Flash,但导出却要靠串口专用工具,还得连上电脑跑脚本解析二进制文件——繁琐、低效、用户抱怨…

反检测浏览器终极实战指南:从零搭建到高效部署

反检测浏览器终极实战指南:从零搭建到高效部署 【免费下载链接】camoufox 🦊 Anti-detect browser 项目地址: https://gitcode.com/gh_mirrors/ca/camoufox 在当今严格的网络反爬虫环境下,传统的浏览器自动化工具已经难以应对复杂的检…

ms-swift助力企业构建私有化大模型平台

ms-swift助力企业构建私有化大模型平台 在当前AI技术加速落地的浪潮中,越来越多企业意识到:拥有一个自主可控、高效稳定的大模型能力平台,已不再是“锦上添花”,而是决定智能化竞争力的关键基础设施。然而现实却充满挑战——从选型…

终极小说阅读方案:OwlLook如何彻底解决你的找书烦恼?

终极小说阅读方案:OwlLook如何彻底解决你的找书烦恼? 【免费下载链接】owllook owllook-小说搜索引擎 项目地址: https://gitcode.com/gh_mirrors/ow/owllook 还在为找一本心仪的小说而辗转多个平台吗?OwlLook小说搜索引擎就是你的救星…

Ulysses与Ring-Attention序列并行技术详解

Ulysses与Ring-Attention序列并行技术详解 在大模型训练的工程实践中,一个日益棘手的问题正不断挑战硬件极限:如何高效处理超长序列输入? 随着Qwen3、Llama4等模型支持32k甚至131k上下文,多模态场景中一张高分辨率图像也能轻易生成…

高效M3U8下载神器:Fluent M3U8极速上手指南

高效M3U8下载神器:Fluent M3U8极速上手指南 【免费下载链接】Fluent-M3U8 A cross-platform m3u8/mpd downloader based on PySide6 and QFluentWidgets. 项目地址: https://gitcode.com/gh_mirrors/fl/Fluent-M3U8 Fluent M3U8是一款功能强大的跨平台流媒体…

如何快速搭建专业量化交易系统:终极安装配置指南

如何快速搭建专业量化交易系统:终极安装配置指南 【免费下载链接】vnpy 基于Python的开源量化交易平台开发框架 项目地址: https://gitcode.com/vnpy/vnpy 在当今数字化交易时代,拥有一个稳定可靠的量化交易框架已成为专业投资者的标配。作为国内…

艾尔登法环存档编辑器终极指南:3步掌握游戏数据修改

艾尔登法环存档编辑器终极指南:3步掌握游戏数据修改 【免费下载链接】ER-Save-Editor Elden Ring Save Editor. Compatible with PC and Playstation saves. 项目地址: https://gitcode.com/GitHub_Trending/er/ER-Save-Editor 还在为艾尔登法环中反复刷装备…

WeTTY浏览器终端完整部署指南:5分钟搭建专业Web终端环境

WeTTY浏览器终端完整部署指南:5分钟搭建专业Web终端环境 【免费下载链接】wetty Terminal in browser over http/https. (Ajaxterm/Anyterm alternative, but much better) 项目地址: https://gitcode.com/gh_mirrors/we/wetty 想要在任何地方通过浏览器访问…

SGLang引擎集成实战:ms-swift推理延迟降低50%

SGLang引擎集成实战:ms-swift推理延迟降低50% 在大模型应用日益普及的今天,用户对响应速度的要求已经从“能出结果”转向“秒级甚至毫秒级反馈”。尤其是在智能客服、实时创作助手和多轮对话系统中,哪怕几百毫秒的延迟差异,都可能…

Qwen3Guard-Gen-0.6B:颠覆性轻量级AI安全检测解决方案

Qwen3Guard-Gen-0.6B:颠覆性轻量级AI安全检测解决方案 【免费下载链接】Qwen3Guard-Gen-0.6B 项目地址: https://ai.gitcode.com/hf_mirrors/Qwen/Qwen3Guard-Gen-0.6B 在生成式AI技术迅猛发展的当下,内容安全风险已成为制约行业规模化应用的关键…

Calibre电子书转换终极指南:5分钟搞定所有格式兼容问题

Calibre电子书转换终极指南:5分钟搞定所有格式兼容问题 【免费下载链接】calibre The official source code repository for the calibre ebook manager 项目地址: https://gitcode.com/gh_mirrors/ca/calibre 还在为不同设备上的电子书格式不兼容而头疼吗&a…