LangChain实战(五):Document Loaders - 从多源加载数据
本文是《LangChain实战课》系列的第五篇,将带你深入了解LangChain中的Document概念,并学习如何使用各种Document Loaders从不同数据源加载数据。
前言
在前几篇文章中,我们学习了LangChain的Model I/O模块,包括Prompts模板和LLMs/ChatModels的使用。今天,我们将进入数据连接(Data Connection)模块,首先学习如何从多种数据源加载文档,这是构建基于私有数据的AI应用的第一步。
Document概念
在LangChain中,Document
是一个基本的数据结构,用于表示一段文本内容及其元数据。一个Document对象通常包含两个主要部分:
page_content
:字符串,表示文档的文本内容。metadata
:字典,包含文档的元数据,如来源、创建时间、作者等。
为什么需要Document?
- 标准化处理:无论数据来自何处,都转换为统一的Document格式,便于后续处理。
- 保留元数据:在加载文档时保留原始元数据,有助于后续的检索和溯源。
- 模块化设计:将数据加载、处理、存储等步骤分离,提高代码的可维护性和复用性。
安装必要的依赖
在使用Document Loaders之前,我们需要安装一些额外的依赖包:
# 安装LangChain核心库(如果尚未安装)
pip install langchain
# 安装常用Document Loaders依赖
pip install pypdf2 # 用于处理PDF文档
pip install docx2txt # 用于处理Word文档
pip install youtube-transcript-api # 用于获取YouTube字幕
pip install beautifulsoup4 # 用于网页抓取
pip install requests # 用于HTTP请求
pip install python-dotenv # 用于管理环境变量
# 可选:安装其他特定数据源的依赖
pip install wikipedia # 用于加载Wikipedia内容
pip install gitpython # 用于加载Git仓库内容
使用各种Document Loaders
LangChain提供了大量的Document Loaders,用于从不同数据源加载文档。我们将介绍几种常用的Loader。
1. 文本文件加载器
文本文件是最简单的数据源,我们可以使用TextLoader
来加载。
from langchain.document_loaders import TextLoader
# 加载文本文件
loader = TextLoader("./example.txt", encoding="utf-8")
documents = loader.load()
# 查看加载的文档内容
print(f"加载了 {len(documents)} 个文档")
print(f"第一个文档的内容: {documents[0].page_content[:200]}...")
print(f"元数据: {documents[0].metadata}")
2. PDF文件加载器
PDF文档是常见的文档格式,我们可以使用PyPDFLoader
来加载。
from langchain.document_loaders import PyPDFLoader
# 加载PDF文件
loader = PyPDFLoader("./example.pdf")
documents = loader.load()
# PDFLoader会将每一页转换为一个Document
print(f"加载了 {len(documents)} 页文档")
for i, doc in enumerate(documents):print(f"第 {i+1} 页内容片段: {doc.page_content[:100]}...")print(f"元数据: {doc.metadata}")
3. Word文档加载器
Word文档也是常见的办公文档格式,可以使用Docx2txtLoader
来加载。
from langchain.document_loaders import Docx2txtLoader
# 加载Word文档
loader = Docx2txtLoader("./example.docx")
documents = loader.load()
print(f"加载了 {len(documents)} 个文档")
print(