news 2026/5/7 0:09:11

全网最细:Rag+LangChain 文档加载全实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
全网最细:Rag+LangChain 文档加载全实战

一、前言

在基于 LangChain 构建 RAG 检索增强生成系统时,文档加载是整个项目的第一步、也是最基础最关键的一环。无论后续向量嵌入、向量数据库、检索链、大模型问答做得多完善,只要文档加载解析出错、乱码、漏内容、格式解析不全,整个 RAG 系统的问答准确率都会大打折扣。

LangChain 官方内置了海量文档加载器,支持日常开发中几乎所有常见格式:TXT、Markdown、PDF、Word、Excel、CSV、网页 URL、本地文件夹批量加载等。本文聚焦纯文档加载模块,介绍环境准备 + 各类文档加载实战代码 + 逐行详细注释 + 常见报错解决方案 + 批量加载封装,全程可直接复制运行,适合入门学习、项目直接复用。


一、环境安装(仅加载依赖)

bash

运行

# 核心框架 pip install langchain langchain-community # 文档解析依赖 pip install pypdf # PDF pip install python-docx # Word pip install pandas openpyxl # Excel/CSV pip install beautifulsoup4 lxml # 网页 pip install charset-normalizer # 自动识别编码,解决乱码

二、核心概念(仅看这一段就够)

  1. 加载器(Loader):LangChain 针对每种文件格式提供专用加载器
  2. Document 对象:加载后统一返回格式,包含:
    • page_content:文档文本内容
    • metadata:元数据(路径、页码、标题等)
  3. 返回值:所有加载器最终都返回列表[Document]

三、实战代码:全格式文档加载(带超强注释)

3.1 TXT 文本文档加载(最基础)

python

运行

# 导入TXT专用加载器 from langchain.document_loaders import TextLoader # 导入编码自动检测工具 from charset_normalizer import from_path def load_txt(file_path: str): """ 加载TXT文档,自动解决中文乱码 """ # 自动检测文件编码(UTF-8/GBK/ASCII 自动识别) encoding = from_path(file_path).best().encoding # 初始化加载器 loader = TextLoader(file_path, encoding=encoding) # 执行加载 documents = loader.load() # 输出加载信息 print(f"【TXT加载成功】路径:{file_path} | 编码:{encoding} | 文本长度:{len(documents[0].page_content)}") return documents # 调用 # docs = load_txt("测试.txt")

3.2 Markdown 文档加载

python

运行

from langchain.document_loaders import MarkdownLoader from charset_normalizer import from_path def load_md(file_path: str): """ 加载MD文档,自动解析语法、提取纯文本 """ encoding = from_path(file_path).best().encoding loader = MarkdownLoader(file_path, encoding=encoding) documents = loader.load() print(f"【MD加载成功】路径:{file_path} | 内容长度:{len(documents[0].page_content)}") return documents # 调用 # docs = load_md("说明文档.md")

3.3 PDF 文档加载(带页码、元数据)

python

运行

from langchain.document_loaders import PyPDFLoader def load_pdf(file_path: str): """ 加载PDF,自动分页,自带页码元数据 """ loader = PyPDFLoader(file_path) # 分页加载,每页生成一个Document对象 documents = loader.load() print(f"【PDF加载成功】路径:{file_path} | 总页数:{len(documents)}") # 打印前3页元数据(页码) for i, doc in enumerate(documents[:3]): print(f" 第{doc.metadata['page']+1}页,内容长度:{len(doc.page_content)}") return documents # 调用 # docs = load_pdf("企业知识库.pdf")

3.4 Word(.docx)文档加载

python

运行

from langchain.document_loaders import Docx2txtLoader def load_word(file_path: str): """ 加载Word文档(仅支持 .docx,不支持旧版 .doc) """ loader = Docx2txtLoader(file_path) documents = loader.load() print(f"【Word加载成功】路径:{file_path} | 内容长度:{len(documents[0].page_content)}") return documents # 调用 # docs = load_word("合同模板.docx")

3.5 CSV 表格加载

python

运行

from langchain.document_loaders import CSVLoader def load_csv(file_path: str): """ 加载CSV表格,按行解析 """ loader = CSVLoader(file_path, encoding="utf-8") documents = loader.load() print(f"【CSV加载成功】路径:{file_path} | 总行数:{len(documents)}") return documents # 调用 # docs = load_csv("产品清单.csv")

3.6 Excel(.xlsx)加载

python

运行

from langchain.document_loaders import UnstructuredExcelLoader def load_excel(file_path: str): """ 加载Excel,支持多工作表 """ loader = UnstructuredExcelLoader(file_path, mode="elements") documents = loader.load() print(f"【Excel加载成功】路径:{file_path} | 数据块数量:{len(documents)}") return documents # 调用 # docs = load_excel("销售数据.xlsx")

3.7 网页 URL 在线加载

python

运行

from langchain.document_loaders import WebBaseLoader def load_url(url: str): """ 加载任意静态网页,自动剔除HTML标签,保留纯文本 """ loader = WebBaseLoader(url) documents = loader.load() print(f"【网页加载成功】URL:{url} | 标题:{documents[0].metadata['title']}") return documents # 调用 # docs = load_url("https://baike.baidu.com/item/人工智能")

四、高级实战:文件夹批量加载(企业级必备)

4.1 批量加载指定格式文档

python

运行

from langchain.document_loaders import DirectoryLoader def batch_load(folder_path: str): """ 批量加载文件夹内所有支持的文档:TXT/MD/PDF/DOCX/CSV 自动跳过损坏文件、不支持格式 """ all_docs = [] # 定义要加载的格式与对应加载器 file_types = { "txt": TextLoader, "md": MarkdownLoader, "pdf": PyPDFLoader, "docx": Docx2txtLoader, "csv": CSVLoader } for ext, loader_cls in file_types.items(): try: loader = DirectoryLoader( path=folder_path, glob=f"*.{ext}", loader_cls=loader_cls, silent_errors=True # 跳过报错文件,不中断程序 ) docs = loader.load() all_docs.extend(docs) print(f"└─ 加载 {ext} 文件:{len(docs)} 个") except: print(f"└─ {ext} 文件无数据或加载失败") print(f"\n【批量加载完成】总计文档:{len(all_docs)} 块") return all_docs # 调用 # all_docs = batch_load("./知识库")

五、高频问题解决方案

5.1 中文乱码

所有文本加载都使用:

python

运行

encoding = from_path(file_path).best().encoding

自动识别编码,100% 解决乱码。

5.2 PDF 加载空白 / 无法读取

原因:扫描件 PDF(图片)无法提取文字,必须用 OCR 工具先转文字。

5.3 Word 加载失败

原因:只支持.docx,不支持.doc旧版格式,需转换格式后再加载。

5.4 批量加载中断

开启silent_errors=True,跳过损坏文件。


六、总结(纯加载核心)

  1. 所有文档最终都转为 Document 对象
  2. 加载器与格式一一对应,专用加载器最稳定
  3. 乱码用编码自动检测
  4. 企业项目直接用批量加载
  5. 本文代码无任何冗余,可直接用于生产环境

专注 RAG 落地开发,只讲硬核实战!关注我,后续更新文档分割、向量库、检索优化、RAG 全流程干货!本文全套加载工具包 + 批量脚本已打包,点赞 + 收藏 + 评论区扣【加载】,立即免费领取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/7 0:06:40

RediSearch v2.10.30 发布:修复严重漏洞,新增多项指标

直击 RediSearch v2.10.30 发布现场RediSearch 是 RedisLabs 团队开发的一个高性能全文搜索引擎,可作为一个 Redis Module 运行在 Redis 上。RediSearch v2.10.30 现已发布,这是 RediSearch 2.10 的一个维护版本。更新紧迫性为 HIGH,存在一个…

作者头像 李华
网站建设 2026/5/7 0:05:49

【软考高级架构】案例题考前突击11:秒杀场景及其技术解决方案

在电商大促、直播带货等业务场景中,秒杀活动因其“瞬时高并发、库存有限、时间敏感”的特性,成为最考验系统架构设计能力的战场之一。秒杀的本质,是在极短时间内将有限的商品库存公平、准确地分配给海量涌入的用户。 一. 秒杀场景的核心痛点 1. 瞬时高并发冲击下的流量洪峰…

作者头像 李华
网站建设 2026/5/7 0:04:50

fre:ac音频转换器:专业级开源解决方案的终极指南

fre:ac音频转换器:专业级开源解决方案的终极指南 【免费下载链接】freac The fre:ac audio converter project 项目地址: https://gitcode.com/gh_mirrors/fr/freac 在数字音频处理领域,寻找一款既功能强大又完全免费的音频转换工具曾是许多用户的…

作者头像 李华
网站建设 2026/5/7 0:01:52

北斗形变监测传感器在水库建设中的应用与系统定制解决方案

本文将探讨北斗形变监测传感器在水库建设中的应用,强调单北斗GNSS在桥梁及结构形变监测中的重要性。尤其是在复杂的地质条件下,单北斗GNSS通过高精度定位和实时数据采集,有效提升了监测的准确性。此外,定制化解决方案通过灵活设计…

作者头像 李华
网站建设 2026/5/6 23:55:40

日志插件开发不踩雷,就看这7个关键决策点:AST解析器选型、结构化日志Schema自动推导、实时高亮响应≤12ms(实测数据支撑)

更多请点击: https://intelliparadigm.com 第一章:VSCode 2026 日志分析插件开发方法论总览 VSCode 2026 引入了全新的日志语义解析引擎(LSE)与扩展宿主沙箱增强机制,为日志分析类插件提供了原生结构化日志流接入、跨…

作者头像 李华