🎯 课程主题
实战使用 LangChain 的 TextLoader 和 CSVLoader 加载 TXT 文件和 CSV 文件,掌握 Document Loader 的统一使用模式。
📝 核心知识点
1. Document Loader 统一设计模式
所有 Loader 继承自共同的父类 BaseLoader,API 高度统一:
XXXLoader(file_path=..., 其他必要参数) → .load() → List[Document]
- 输入:文件路径 + 格式相关参数
- 输出:
List[Document] - Document 对象两大核心字段:
page_content:文件的实际文本内容metadata:文档元数据(如来源路径source)
2. TextLoader
用于加载 .txt 纯文本文件。
关键参数:
| 参数 | 说明 |
|---|---|
file_path | 文件路径(相对或绝对) |
encoding | 文件编码,必须与文件实际编码一致(如 utf-8、gbk) |
TXT 文件加载结果:一个文件 → 返回一个 Document 对象(List 中只有一个元素)
3. CSVLoader
用于加载 .csv 表格文件。
关键参数:
| 参数 | 说明 |
|---|---|
file_path | 文件路径 |
CSV 文件加载结果:CSV 中每一行 → 返回一个 Document 对象(有几行数据就有几个 Document)
🏗️ 架构与工作流
┌──────────────────┐
TXT 文件 →│ TextLoader │ → load() → List[Document] (1个元素)
│ file_path= │ ├─ page_content: 文件全文
│ encoding= │ └─ metadata: {"source": "路径"}
└──────────────────┘
┌──────────────────┐
CSV 文件 →│ CSVLoader │ → load() → List[Document] (N个元素,N=行数)
│ file_path= │ 每个 Document:
└──────────────────┘ ├─ page_content: 该行内容
└─ metadata: {"source": "路径", "row": N}
💻 代码实战
TextLoader 示例
from langchain_community.document_loaders import TextLoader
# 加载 UTF-8 编码的 TXT 文件
loader = TextLoader(
file_path="../asset/load/01-utf8.txt",
encoding="utf-8"
)
docs = loader.load()
print(docs) # [Document(...)]
print(docs[0]) # 第一个 Document 对象
print(docs[0].metadata) # {'source': '../asset/load/01-utf8.txt'}
print(docs[0].page_content) # 文件的实际文本内容
注意编码匹配
# 错误示例:文件是 GBK 编码,却用 UTF-8 解码 → 报错
loader = TextLoader(
file_path="../asset/load/02-gbk.txt",
encoding="utf-8" # ❌ 不匹配!
)
# 正确示例:编码必须与文件存储时的编码一致
loader = TextLoader(
file_path="../asset/load/02-gbk.txt",
encoding="gbk" # ✅ 匹配!
)
docs = loader.load()
CSVLoader 示例
from langchain_community.document_loaders import CSVLoader
loader = CSVLoader(
file_path="../asset/load/03-data.csv"
)
docs = loader.load()
print(docs) # List[Document],元素个数 = CSV 行数
# 4 行数据 → 返回 4 个 Document 对象
for doc in docs:
print(doc.page_content) # 每行的内容
print(doc.metadata) # 包含 source 和 row 等信息
📊 TextLoader vs CSVLoader 对比
| 特性 | TextLoader | CSVLoader |
|---|---|---|
| 目标格式 | .txt 纯文本 | .csv 表格 |
| 必须参数 | file_path, encoding | file_path |
| 导入路径 | langchain_community.document_loaders | 同 |
| 返回 Document 数 | 1 个(整个文件) | N 个(每行一个) |
| encoding 敏感 | ✅ 必须匹配 | 一般不需要指定 |
⚠️ 常见问题与避坑指南
- 编码不匹配:如果文件用 GBK 保存,
encoding必须设为"gbk",否则加载报错。编码声明的是"存储时用的字符集"(解码时需一致) - 文件路径验证:在 PyCharm 中按住
Ctrl点击路径,如果变成超链接则说明路径正确 - page_content vs metadata:
page_content才是给大模型的文本内容,metadata辅助记录来源信息 - 通用套路:所有 Loader 都遵循
XXXLoader(file_path=...) → .load() → List[Document]的统一模式
💡 个人总结与延伸
- LangChain 的 Document Loader 设计体现了策略模式:不同文件格式对应不同 Loader,但对外暴露统一接口
- TextLoader 加载整个文件为单个 Document,适合小文件;大文件建议先切分再处理
- CSVLoader 按行加载为多个 Document,天然适合表格数据的逐行检索场景
- 后续所有 Loader(JSONLoader、PDFLoader 等)都遵循同样的调用模式,一通百通