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

全网最细: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 全流程干货!本文全套加载工具包 + 批量脚本已打包,点赞 + 收藏 + 评论区扣【加载】,立即免费领取

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

相关文章:

  • Android无线通信技术深度解析:蓝牙、WiFi与NFC开发实战
  • 【软考高级架构】案例题考前突击11:秒杀场景及其技术解决方案
  • 如何快速掌握ESP32 Arduino开发:从零开始的完整入门指南
  • 如何快速配置鸣潮自动化工具:面向新手的完整教程
  • DolphinDB数据压缩与存储优化
  • DDD架构学习
  • 多层构建导致镜像过大 Docker Compose 如何优化 build 上下文
  • Pycharm效率翻倍秘籍:从文件模板、字体缩放快捷键到中文插件完整配置流程
  • 手机号查QQ号终极指南:30秒找回遗忘的QQ账号
  • 大语言模型事实核查与时效性评估实战
  • 如何在 openclaw 中快速配置 taotoken 聚合端点实现多模型调用
  • 知识竞赛软件免费版 vs 付费版
  • Docker 学习篇(一)| 认识 Docker
  • 2026 年机房防静电地板全国普及:安全价值与全国化供应格局解析 - 小艾信息发布
  • N_m3u8DL-RE架构深度解析:现代流媒体下载引擎的设计哲学与技术实现
  • Windows预览版一键退出指南:如何快速恢复系统稳定性的完整教程
  • 别让布线毁了信号!深入PCIe链路训练:Polarity Inversion检测与纠正全流程解析
  • GTA5线上小助手:重新定义你的洛圣都游戏体验
  • 别再死磕标准库了!STM32CubeMX+HAL库开发实战,从零到点亮LED(附避坑指南)
  • Allegro 16.6实战:为了信号完整性和良率,我这样设置PCB无盘工艺
  • 内容创作平台集成Taotoken实现多模型文章辅助生成与润色
  • 2026年值得关注的AI大模型接口中转站推荐,这五家让你的开发之路更顺畅
  • 工控机上的游戏手柄:Ubuntu 20.04连接Xbox/北通手柄完整配置与避坑指南
  • SQL 入门 13:SQL 存储过程与函数:封装逻辑与参数处理
  • qmc-decoder终极指南:三步解锁QQ音乐加密文件,实现跨平台音乐自由
  • Ubuntu 18.04离线环境升级GLIBC踩坑记:从报错到成功,我绕过了哪些弯路?
  • 【软考高级架构】案例题考前突击12:软件架构的演化
  • 3分钟搞定M3U8视频下载:告别命令行,拥抱图形化下载神器
  • Go语言构建Webhook转发桥梁:解决内网穿透,实现自动化流程
  • KMS激活脚本终极指南:5分钟免费激活Windows和Office的完整教程