LangChain文档加载器全解析:类型汇总+手把手实操教程
在LangChain开发中,文档加载是数据接入的第一步,也是最基础的核心环节——无论你是搭建知识库问答、实现文档总结,还是做文本分析类应用,都需要先通过「文档加载器」将本地文件、网页、数据库等各类数据源,转换成LangChain可识别的标准Document对象(包含page_content内容和metadata元数据)。
之前有很多同学问我,LangChain到底有多少种文档加载器?不同格式的文件该怎么正确加载?今天就结合实操,把LangChain文档加载器的类型、用法一次性讲透,全程附可直接复制运行的代码,新手也能快速上手。
一、LangChain文档加载器分类(按数据源划分)
LangChain的文档加载器全部集成在langchain-community包中(旧版在langchain包内),核心按「数据源类型」可分为5大类,每类对应常用场景和具体加载器,用表格整理更清晰,方便大家按需查找:
| 分类 | 常用加载器 | 适用场景 | 关键备注 |
|---|---|---|---|
| 本地文件格式(最常用) | TextLoader | TXT纯文本文件 | 轻量高效,需指定编码避免中文乱码 |
| PyPDFLoader | PDF文件 | 轻量优先,每页生成1个Document对象 | |
| PDFPlumberLoader | PDF文件(复杂格式) | 可提取表格、精准定位文本,依赖pdfplumber | |
| Docx2txtLoader/DocxLoader | Word(.docx)文档 | 前者简单易用,后者支持提取样式 | |
| CSVLoader | CSV表格文件 | 每行生成1个Document,可自定义分隔符 | |
| ExcelLoader | Excel(.xls/.xlsx)文件 | 依赖pandas、openpyxl,支持多工作表 | |
| UnstructuredFileLoader | 多格式通用(TXT/PDF/DOCX/MD等) | 新手首选,无需区分文件格式,依赖unstructured | |
| 网页/网络资源 | WebBaseLoader | 任意网页内容加载 | 基于BeautifulSoup,可解析网页结构 |
| YoutubeLoader | YouTube视频内容 | 提取字幕或语音转文字,依赖pytube | |
| WikipediaLoader | 维基百科页面内容 | 可按标题、URL加载,支持多语言 | |
| 云服务/远程存储 | S3Loader | AWS S3存储桶文件 | 需配置AWS密钥,支持批量加载 |
| GoogleDriveLoader | 谷歌云盘文件/文件夹 | 需授权,支持文档、表格等多种格式 | |
| NotionLoader | Notion数据库/页面 | 需Notion API密钥,支持批量同步 | |
| 数据库 | SQLDatabaseLoader | 关系型数据库(MySQL/PostgreSQL等) | 执行SQL查询,将结果转为Document |
| MongoDBLoader | MongoDB文档数据库 | 支持按条件查询,批量加载文档 | |
| 特殊类型 | AudioLoader | 音频文件(MP3/WAV等) | 需配合ASR模型(如Whisper)转文字 |
| CodeLoader | 代码文件(Python/Java等) | 支持语法解析,保留代码结构 |
二、实操教程:手把手加载各类文件(LangChain最新版)
核心前提:LangChain最新版(v0.1+)将文档加载器迁移到了langchain-community包中,所以第一步必须安装核心依赖,后续按需安装对应文件格式的依赖即可。
前置准备:安装核心依赖
# 核心包(必装):包含所有文档加载器pipinstalllangchain langchain-community# 按需安装文件格式依赖(根据自己要加载的文件选择)pipinstallpypdf# PDF加载(PyPDFLoader)pipinstallpdfplumber# PDF复杂加载(PDFPlumberLoader)pipinstallpython-docx# Word文档加载pipinstallpandas openpyxl# Excel/CSV加载pipinstallunstructured# 通用加载器(UnstructuredFileLoader)pipinstallbeautifulsoup4# 网页加载(WebBaseLoader)pipinstallpytube# YouTube视频加载示例1:加载TXT文件(最简单,新手入门)
TXT文件是最基础的格式,加载无需复杂配置,重点注意指定编码(utf-8),避免中文乱码。
fromlangchain_community.document_loadersimportTextLoader# 1. 初始化加载器:指定文件路径和编码loader=TextLoader(file_path="test.txt",# 替换成你的TXT文件路径encoding="utf-8"# 中文文件必加,避免乱码)# 2. 加载文件:返回Document对象列表(TXT只有1个对象)documents=loader.load()# 查看加载结果print("=== TXT加载结果 ===")print("文本内容(前200字):",documents[0].page_content[:200])print("元数据(文件信息):",documents[0].metadata)# 包含文件路径、编码等示例2:加载PDF文件(最常用场景)
推荐使用PyPDFLoader(轻量),如果PDF有表格、复杂排版,改用PDFPlumberLoader。注意:PDF每页会生成1个Document对象,方便后续按页处理。
fromlangchain_community.document_loadersimportPyPDFLoader# 1. 初始化加载器(替换成你的PDF路径)loader=PyPDFLoader("test.pdf")# 2. 加载文件:每页1个Document,返回列表documents=loader.load()# 查看结果print("=== PDF加载结果 ===")print(f"PDF总页数:{len(documents)}")print("第1页内容(前300字):",documents[0].page_content[:300])# 若PDF有表格,改用PDFPlumberLoader# from langchain_community.document_loaders import PDFPlumberLoader# loader = PDFPlumberLoader("test.pdf")# documents = loader.load()示例3:加载Word(DOCX)文件
两种加载器可选:Docx2txtLoader(简单,无需关注样式)、DocxLoader(复杂,可提取字体、段落样式),新手用前者即可。
fromlangchain_community.document_loadersimportDocx2txtLoader# 1. 初始化加载器(替换成你的DOCX路径)loader=Docx2txtLoader("test.docx")# 2. 加载文件:整个Word文档生成1个Document对象documents=loader.load()# 查看结果print("=== Word加载结果 ===")print("文档内容(前300字):",documents[0].page_content[:300])示例4:加载CSV/Excel表格文件
CSV用CSVLoader,Excel用ExcelLoader,两者用法类似,重点可自定义编码、分隔符(CSV)、工作表(Excel)。
# 示例4.1:加载CSV文件fromlangchain_community.document_loadersimportCSVLoader loader=CSVLoader(file_path="test.csv",encoding="utf-8",delimiter=",",# 分隔符,默认逗号,Excel导出的CSV可用csv_args={"quotechar":'"'}# 可选,处理字段包含引号的情况)documents=loader.load()# 每行1个Document对象print("=== CSV加载结果 ===")print(f"CSV总行数:{len(documents)}")print("第一行内容:",documents[0].page_content)# 示例4.2:加载Excel文件fromlangchain_community.document_loadersimportExcelLoader loader=ExcelLoader(file_path="test.xlsx",sheet_name="Sheet1"# 指定工作表,默认第一个工作表)documents=loader.load()# 每行1个Document对象print("=== Excel加载结果 ===")print(f"Excel总行数:{len(documents)}")print("第一行内容:",documents[0].page_content)示例5:通用加载器(新手福音,多格式适配)
如果不想区分文件格式,不管是PDF、DOCX还是TXT,直接用UnstructuredFileLoader,一行代码切换文件路径即可,适合多格式混合的场景。
fromlangchain_community.document_loadersimportUnstructuredFileLoader# 支持PDF/DOCX/TXT/MD等,只需替换文件路径loader=UnstructuredFileLoader(file_path="test.pdf",# 换成test.docx、test.txt也能正常加载encoding="utf-8")documents=loader.load()print("=== 通用加载器结果 ===")print("文件内容(前200字):",documents[0].page_content[:200])补充:加载后的数据处理(必学技巧)
加载后的documents是Document对象列表,若文件过大(如几百页PDF),直接使用会导致后续模型处理超时,建议进行「文档分割」,保持上下文连贯的同时,控制单篇内容长度。
fromlangchain_text_splittersimportCharacterTextSplitter# 初始化文本分割器text_splitter=CharacterTextSplitter(chunk_size=500,# 每个分片500个字符(可调整)chunk_overlap=50# 分片间重叠50个字符,保持上下文连贯)# 分割加载后的文档split_docs=text_splitter.split_documents(documents)print(f"分割前文档数:{len(documents)}")print(f"分割后文档数:{len(split_docs)}")print("分割后第一个分片:",split_docs[0].page_content)三、常见问题&避坑技巧
中文乱码:所有加载器都指定encoding=“utf-8”,若仍乱码,尝试encoding=“gbk”(适配Windows系统导出的文件)。
PDF加载失败:检查是否安装pypdf依赖,复杂PDF(加密、扫描件)需先解密或OCR识别(LangChain不直接支持OCR,需先借助Tesseract等工具转文字)。
依赖冲突:若安装后报错,尝试升级依赖(pip install --upgrade langchain langchain-community),或指定兼容版本。
批量加载:若需加载多个同类型文件(如多个PDF),可使用DirectoryLoader(遍历文件夹),无需逐个初始化加载器。
四、总结
LangChain文档加载器的核心优势的是「统一接口+多源适配」——无论数据源是本地文件、网页还是数据库,都能通过相同的load()方法加载,转换成标准Document对象,为后续的文本处理、模型调用提供统一格式。
对于新手来说,优先掌握「本地文件加载」和「通用加载器」,就能覆盖80%的开发场景;后续有网页、数据库等需求,再针对性学习对应加载器即可。
最后提醒:所有代码均基于LangChain最新版(v0.1+),若使用旧版,需调整导入路径(旧版从langchain导入,新版从langchain_community导入),避免报错。
如果大家在实操中遇到具体问题,欢迎在评论区留言,后续会补充更多特殊场景的加载技巧~