大家好,我是锋哥。最近连载更新《基于LangChain的RAG与Agent智能体》技术专题。
本课程主要介绍和讲解RAG,LangChain简介,接入通义千万大模型,Ollama简介以及安装和使用,OpenAI库介绍和使用,以及最重要的基于LangChain实现RAG与Agent智能体开发技术。同时也配套视频教程 《2027版 基于LangChain的RAG与Agent智能体开发视频教程》
文档加载器
在企业里使用 LangChain 进行知识库或问答系统构建时,文档加载器(Document Loader)主要是用来把企业内部的各种信息源转化成 LangChain 可以处理的 Document 对象。
文档加载器官方文档:
docs.langchain.com/oss/python/…
根据企业实际使用场景,最常见的三种文档类型通常是:
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_args 是 CSVLoader 中用于自定义 CSV 解析行为的一个字典参数。它直接透传给 Python 标准库 csv.DictReader,允许开发者灵活处理各种格式的 CSV 文件(如自定义分隔符、引号字符、编码方式等)。下表列出了最常用的配置参数及其说明:
| 参数名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| delimiter | str | ',' | 字段分隔符,默认为逗号。若文件为制表符分隔,可设为 '\t'。 |
| quotechar | str | '"' | 用于包裹包含特殊字符(如分隔符、换行符)的字段的引号字符。 |
| escapechar | str | None | 转义字符,用于转义引号内的分隔符或引号本身(例如设置为 '\')。 |
| doublequote | bool | True | 当字段内出现引号时是否用两个引号表示一个引号。若为 False,则需配合 escapechar 使用。 |
| skipinitialspace | bool | False | 是否忽略分隔符后面的空白字符。 |
| lineterminator | str | '\r\n' | 行终止符,通常无需修改。 |
| quoting | int | csv.QUOTE_MINIMAL | 控制何时使用引号。可选值:csv.QUOTE_ALL(全部加引号)、csv.QUOTE_MINIMAL(仅当需要时)、csv.QUOTE_NONNUMERIC(非数字加引号)、csv.QUOTE_NONE(不使用引号)。 |
| fieldnames | list | None | 指定列名列表。如果 CSV 文件没有表头行,可以通过此参数显式定义列名。 |
| restkey | str | None | 当一行中的字段数多于 fieldnames 时,多余的字段将以此键名存储。 |
| restval | str | None | 当一行中的字段数少于 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_path | str 或 Path | 必需 | 要加载的文本文件的路径。 |
| encoding | str 或 None | None | 指定文件的编码格式,如 "utf-8"、"gbk"。若不指定,则使用系统默认编码。 |
| autodetect_encoding | bool | False | 若设为 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_path | str 或 Path | 必需 | 要加载的 PDF 文件的路径。 |
| password | str 或 None | None | 如果 PDF 文件受密码保护,提供密码以解密。 |
| extract_images | bool | False | 是否尝试从 PDF 中提取图像(需要额外依赖)。 |
| headers | dict | None | 如果 file_path 是 URL,可提供 HTTP 请求头。 |
| mode | str | page | 默认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_path | str 或 Path | 必需 | 要加载的 Word 文档(.docx)的路径。 |
| encoding | str 或 None | None | 指定文本编码,通常无需设置。 |
加载后,整个 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)
运行输出: