当前位置: 首页 > news >正文

基于LangChain的RAG与Agent智能体开发 - 文档加载器

大家好,我是小锋老师,最近更新《2027版 基于LangChain的RAG与Agent智能体 开发视频教程》专辑,感谢大家支持。

本课程主要介绍和讲解RAG,LangChain简介,接入通义千万大模型 ,Ollama简介以及安装和使用,OpenAI 库介绍和使用,以及最重要的基于LangChain实现RAG与Agent智能体开发技术。

视频教程+课件+源码打包下载 :

链接:https://pan.baidu.com/s/1_NzaNr0Wln6kv1rdiQnUTg
提取码:0000

基于LangChain的RAG与Agent智能体开发 - 文档加载器

在企业里使用LangChain进行知识库或问答系统构建时,文档加载器(Document Loader)主要是用来把企业内部的各种信息源转化成 LangChain 可以处理的Document对象。

文档加载器官方文档:

https://docs.langchain.com/oss/python/integrations/document_loaders

根据企业实际使用场景,最常见的三种文档类型通常是:


1. PDF 文档

  • 用途:合同、政策手册、技术文档、报告、PPT 导出的 PDF 等。

  • 加载器:

    • PyPDFLoader:基本 PDF 文档加载。

    • UnstructuredPDFLoader:使用unstructured库解析 PDF,可处理复杂排版。

    • PDFMinerLoader/PyMuPDFLoader:解析更复杂的 PDF,支持文字、图片等内容。

  • 企业场景

    • 法律、财务文档知识库。

    • 产品技术说明书或内部培训资料。


2. Word / Office 文档

  • 用途:合同模板、项目报告、会议纪要、内部文档。

  • 加载器:

    • UnstructuredWordLoader:基于unstructured库,支持.doc.docx

    • Docx2txtLoader:简单的.docx文本提取。

  • 企业场景:

    • HR 文档管理(考勤、合同、员工手册)。

    • 内部项目文档或工作总结。


3. Markdown / 文本文件

  • 用途:企业内部知识库、Wiki、开发文档。

  • 加载器:

    • TextLoader:加载纯文本文件.txt

    • UnstructuredMarkdownLoader:加载.md,保留标题层级和结构信息。

  • 企业场景:

    • 开发团队的 README、Wiki 文档。

    • 产品 FAQ、知识管理系统内容。


💡补充说明

  • 企业有时也会加载HTML、CSV、数据库、网页内容等,但 PDF、Word、Markdown/文本是最常见、加载量最大的。

  • 在实际企业落地中,通常会结合分段、嵌入向量化来处理这些文档,让问答系统更高效。

接下来课程我们准备了一些测试数据:

CSVLoader文档加载器

CSVLoader是 LangChain 中专门用于加载逗号分隔值(CSV)文件的文档加载器。它将 CSV 文件的每一行数据转换为一个独立的Document对象,非常适合处理销售报表、用户数据、财务记录等结构化表格数据 。

有两个加载方法:

1,load()方法,一次性加载全部文档内容

2,lazy_load()方法,延迟加载,适合数据库很大的文档。

我们先看一个load()加载示例:

from langchain_community.document_loaders import CSVLoader ​ # 创建CSV加载器对象 loader = CSVLoader( file_path="../data/员工信息.csv", # 文件路径 encoding="utf-8", # 文件编码 ) ​ # 一次性加载数据 documents = loader.load() print(documents) ​ for doc in documents: print("===" * 20) print(doc) print(doc.page_content)

运行输出:

再看一个延迟加载示例:

from langchain_community.document_loaders import CSVLoader ​ # 创建CSV加载器对象 loader = CSVLoader( file_path="../data/员工信息.csv", # 文件路径 encoding="utf-8", # 文件编码 ) ​ for doc in loader.lazy_load(): print("===" * 20) print(doc) print(doc.page_content)

运行输出:

CSVLoader还有一个csv_args配置参数

csv_argsCSVLoader中用于自定义 CSV 解析行为的一个字典参数。它直接透传给 Python 标准库csv.DictReader,允许开发者灵活处理各种格式的 CSV 文件(如自定义分隔符、引号字符、编码方式等)。下表列出了最常用的配置参数及其说明:

参数名类型默认值说明
delimiterstr','字段分隔符,默认为逗号。若文件为制表符分隔,可设为'\t'
quotecharstr'"'用于包裹包含特殊字符(如分隔符、换行符)的字段的引号字符。
escapecharstrNone转义字符,用于转义引号内的分隔符或引号本身(例如设置为'\\')。
doublequoteboolTrue当字段内出现引号时是否用两个引号表示一个引号。若为False,则需配合escapechar使用。
skipinitialspaceboolFalse是否忽略分隔符后面的空白字符。
lineterminatorstr'\r\n'行终止符,通常无需修改。
quotingintcsv.QUOTE_MINIMAL控制何时使用引号。可选值:csv.QUOTE_ALL(全部加引号)、csv.QUOTE_MINIMAL(仅当需要时)、csv.QUOTE_NONNUMERIC(非数字加引号)、csv.QUOTE_NONE(不使用引号)。
fieldnameslistNone指定列名列表。如果 CSV 文件没有表头行,可以通过此参数显式定义列名。
restkeystrNone当一行中的字段数多于fieldnames时,多余的字段将以此键名存储。
restvalstrNone当一行中的字段数少于fieldnames时,缺失的字段将以此值填充。
from langchain_community.document_loaders import CSVLoader ​ # 创建CSV加载器对象 loader = CSVLoader( file_path="../data/员工信息.csv", # 文件路径 encoding="utf-8", # 文件编码 csv_args={ "delimiter": ",", # 分隔符 "quotechar": '"', # 引号字符 "fieldnames": ["id", "name", "age", "gender", "department", "position", "salary", "experience"], # CSV字段名 } ) ​ # 一次性加载数据 documents = loader.load() print(documents) ​ for doc in documents: print("===" * 20) print(doc.page_content)

运行结果:

TextLoader文档加载器

TextLoader是 LangChain 中最基础的文档加载器之一,专门用于从纯文本文件(如 .txt)中读取内容。它会将整个文件作为一个Document对象加载,其中page_content包含文件的全部文本,metadata默认只包含文件路径(source)。该加载器非常适合处理日志文件、配置文件、简单的文本文档等不需要复杂解析的数据源。

🔧 TextLoader 的核心参数

TextLoader的配置相对简单,主要用于处理文件路径和编码问题。其核心参数如下表所示:

参数名类型默认值说明
file_pathstrPath必需要加载的文本文件的路径。
encodingstrNoneNone指定文件的编码格式,如"utf-8""gbk"。若不指定,则使用系统默认编码。
autodetect_encodingboolFalse若设为True,则会自动检测文件编码(使用chardet或类似库),避免因编码不匹配导致的UnicodeDecodeError

加载后,生成的Document对象包含:

  • page_content:文件的全部文本内容(字符串)。

  • metadata:一个字典,默认包含{'source': '文件路径'}

我们来看一个示例:

from langchain_community.document_loaders import TextLoader ​ # 创建TextLoader对象 loader = TextLoader( file_path="../data/langchain文档.txt", encoding="utf-8", ) ​ # 一次性加载数据 documents = loader.load() ​ print(len(documents), documents) print(documents[0].page_content)

PyPDFLoader文档加载器

PyPDFLoader是 LangChain 中最常用的 PDF 文档加载器之一,基于pypdf库(原PyPDF2)实现。它专门用于从 PDF 文件中提取文本内容,并将每一页转换为一个独立的Document对象。这种按页分割的设计使得后续处理(如文本分割、向量化)更加灵活,特别适合处理产品手册、财报、合同、技术文档等企业常见的 PDF 文件。

🔧 PyPDFLoader 的核心参数

PyPDFLoader的配置相对简单,主要关注文件路径和提取模式。其核心参数如下表所示:

参数名类型默认值说明
file_pathstrPath必需要加载的 PDF 文件的路径。
passwordstrNoneNone如果 PDF 文件受密码保护,提供密码以解密。
extract_imagesboolFalse是否尝试从 PDF 中提取图像(需要额外依赖)。
headersdictNone如果file_path是 URL,可提供 HTTP 请求头。
modestrpage默认page模式,根据页来拆分文档,single模式返回一个文档

加载后,PDF 的每一页会生成一个独立的Document对象:

  • page_content:该页提取的文本内容。

  • metadata:包含文件来源(source)、页码(page,从 0 开始)等信息。

首先安装下依赖库pypdf

pip install pypdf -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn

我们来看一个示例:

from langchain_community.document_loaders import PyPDFLoader ​ # 创建PyPDFLoader对象 loader = PyPDFLoader( file_path="../data/langchain文档.pdf", ) ​ documents = loader.load() print(len(documents), documents) for doc in documents: print("===" * 20) print(doc.page_content)

运行输出:

默认是page页模式,也就是每一页生成一个docment文档。但是这种分法不太好,我们后面这些文档都是要进行向量化,存向量数据库,需要根据实际的段落语义来进行文档分割,等下一个章节,我们会专门讲下文档分割器。所以这里我们要设置成single模式,直接返回一个document文档,然后用文档分割器进行文档分割。

我们修改下:

from langchain_community.document_loaders import PyPDFLoader ​ # 创建PyPDFLoader对象 loader = PyPDFLoader( file_path="../data/langchain文档.pdf", mode="single" # 默认是page,根据PDF页来进行拆分,如果是single,则将PDF整体作为单页进行拆分 ) ​ documents = loader.load() print(len(documents), documents) for doc in documents: print("===" * 20) print(doc.page_content)

运行结果:

如果是加密PDF文档,需要加上password属性。

from langchain_community.document_loaders import PyPDFLoader ​ # 创建PyPDFLoader对象 loader = PyPDFLoader( file_path="../data/锋哥的网站.pdf", password="123456" ) ​ documents = loader.load() print(len(documents), documents[0].page_content)

运行输出:

Docx2txtLoader文档加载器

Docx2txtLoader是 LangChain 中专用于加载 Microsoft Word 文档(.docx 格式)的加载器。它基于docx2txt库实现,能够从 Word 文件中提取纯文本内容,并将整个文档作为一个Document对象加载。这个加载器非常适合处理企业中大量存在的制度文档、产品需求说明书、项目报告、合同草案等 Word 格式的文件。

🔧 Docx2txtLoader 的核心参数

Docx2txtLoader的配置非常简单,主要关注文件路径。其核心参数如下表所示:

参数名类型默认值说明
file_pathstrPath必需要加载的 Word 文档(.docx)的路径。
encodingstrNoneNone指定文本编码,通常无需设置。

加载后,整个 Word 文档会生成一个Document对象:

  • page_content:从 Word 文档中提取的完整文本内容。

  • metadata:默认包含文件来源(source)信息。

首先安装下依赖库docx2txt

pip install docx2txt -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn

我们来看一个示例:

from langchain_community.document_loaders import Docx2txtLoader ​ # 创建Docx2txtLoader对象 loader = Docx2txtLoader( file_path="../data/langchain文档.docx", ) ​ # 一次性加载数据 documents = loader.load() print(len(documents), documents[0].page_content)

运行输出:

http://www.jsqmd.com/news/550466/

相关文章:

  • Qwen-Image-Edit-F2P在Java生态中的应用:图像处理服务开发
  • 突破大文件传输瓶颈:aliyunpan快传链接技术全解析
  • 效率提升:用快马一键生成可复用tk登录组件,告别重复编码
  • labelCloud:开源3D点云标注工具的全面解析与实战指南
  • 专注核心创新:用快马AI生成openclaw101开发效率工具链
  • Qwen3-32B保姆级部署教程:3步搞定,零基础也能快速上手
  • 逆向设计新范式:深度学习驱动的声学超材料智能优化!
  • AIGlasses_for_navigation效果展示:移动端适配视频流中实时盲道检测效果
  • openstack配置九州云安装步骤(Skyline)
  • 知识图谱实战(BILSTM+CRF)【第五章】
  • python-flask-djangol框架的 综合游戏攻略社区论坛交流系统的设计
  • 3步解决Atlas OS中Xbox登录错误0x89235107的实用方案
  • 当 AI 开始制造 AI:递归自我提升时代的人类工程师生存指南
  • 服务器CPU飙到300%?手把手教你排查并清理Linux kswapd0挖矿病毒(附日志分析技巧)
  • FastReport之实现打印固定行数,不足补打空白行的办法
  • 别再死磕Release了!用Debug模式打包Qt exe,一次搞定所有dll依赖(附GPT脚本生成技巧)
  • 用PyTorch复现掌纹识别顶会论文:从VGG16到ResNet152的模型蒸馏踩坑实录
  • 利用快马平台快速原型:在Ubuntu上验证OpenClaw数据抓取工具
  • 从视频流到网络包:一个IP搞定多路数据缓冲!AXI Virtual FIFO Controller在Zynq上的实战应用
  • 利用快马平台与git快速构建可迭代的web应用原型
  • 3个实用方法让Windows系统性能提升40%:从卡顿到流畅的优化指南
  • 黄仁勋最新演讲:未来你的工资可能是“年薪+Token”,不会用AI的人危险了
  • 宠物围栏与护栏设计是什么?主要包括哪些特色?
  • 为什么你的视觉检测准确率卡在92.7%?(揭秘工业现场3类未标注异常数据导致的模型过拟合代码根源)
  • 协作机器人研究范式革新:OpenArm开源平台的低成本高自由度实践
  • 零代码搞定工业质检:用阿里云百炼+PAI,2天从产线图片到AI模型部署全流程
  • 前端使用AI试水报告
  • 卡沐咨询费用高吗
  • abaqus晶体塑性有限元分析 晶体塑性黄永刚 晶体塑性有限元 粘塑性自洽晶体塑性 梯度 损伤...
  • 计算机毕业设计springboot工学院学生综合测评管理系统 SpringBoot框架下工科院校学生多维能力评价平台 基于Java技术的工程类高校学生综合素质考核系统