2026/4/18 14:35:56
网站建设
项目流程
论坛类网站开发报价,上海 网站建设 外包it,连云港做企业网站公司,html购物网站源代码一、核心知识点解析1. PyPDFLoader 详细用法#xff08;重点补充#xff09;PyPDFLoader是 LangChain-Community 库中最常用的 PDF 加载器之一#xff0c;底层基于pypdf库实现#xff0c;专门用于从 PDF 文件中提取文本内容#xff0c;并封装为 LangChain 标准的Document对…一、核心知识点解析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(fload()返回数量{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(fload_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-dotenv2. 配置 API 密钥创建.env文件填入 DeepSeek 的 API 密钥需提前在 DeepSeek 官网申请envDEEPSEEK_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_urlhttps://api.deepseek.com/v1, # DeepSeek的API基础地址 modeldeepseek-chat, # 使用的模型名称 api_keySecretStr(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)