从零上手 LangChain Document Loaders:分步指南(2025 更新)
Updated on
自 2023 年以来,LangChain 发展非常迅速。如果你在探索 Retrieval-Augmented Generation(RAG)、构建对话类应用,或在 LLM 流水线中集成外部知识,Document Loaders 已经成为最关键的组件之一。
这篇指南会从 2025 年最新视角,为你提供对 LangChain Document Loaders 的清晰、准确且现代化的理解:它们如何工作、如何正确使用,以及如何在其之上构建真实世界的应用。
什么是 LangChain?
LangChain 是一个帮助开发者构建 LLM 驱动应用的框架,它会用到这些工具:
- Document Loaders(文档加载器)
- Text Splitters(文本分割器)
- Vector Stores(向量库)
- Retrievers(检索器)
- Runnables 与 LCEL(LangChain Expression Language)
在现代 LangChain(0.1–0.2+)中,构建应用的一般流水线是:
Load → Split → Embed → Store → Retrieve → Generate
Document Loaders 负责的就是第一步:
把真实世界的数据变成适合 LLM 处理的 “Document” 对象。
什么是 LangChain Document Loaders?
一个 LangChain Document 对象包含两个字段:
{
"page_content": "<raw text>",
"metadata": {...}
}Document Loaders 会把外部数据源——文件、URL、API、PDF、CSV、YouTube 字幕等——转换成 Document 对象列表。
示例:加载一个 .txt 文件
from langchain_community.document_loaders import TextLoader
loader = TextLoader("./data/sample.txt")
docs = loader.load()返回结果:
{
"page_content": "Welcome to LangChain!",
"metadata": { "source": "./data/sample.txt" }
}LangChain 中的 Document Loaders 类型
LangChain 提供了几十种 loader,但大致可以分为三类。
1. Transform Loaders(本地文件格式)
用于加载结构化或非结构化的本地文件,例如:
CSV 示例(现代导入方式)
from langchain_community.document_loaders import CSVLoader
loader = CSVLoader("./data/data.csv")
docs = loader.load()每一行 CSV 数据会变成一个 Document。
常见的 transform loaders 包括:
PyPDFLoaderJSONLoaderDocx2txtLoaderUnstructuredFileLoaderPandasDataFrameLoader
2. 公共数据集或 Web 服务 Loaders
这些 loader 直接从在线公开来源抓取文本。
Wikipedia 示例
from langchain_community.document_loaders import WikipediaLoader
loader = WikipediaLoader("Machine_learning")
docs = loader.load()3. 私有 / 需鉴权的数据源 Loaders
用于接入内部服务,例如:
- 公司内部 API
- 内部 CMS
- SQL 数据库
- SharePoint
- Slack
- Gmail
这类通常需要凭证,而且往往要编写自定义 loader。
Document Loaders 在现代 RAG 流水线中的位置
Document Loaders 只负责加载原始文本。
它们不会:
- 生成 embeddings
- 创建 “chains”
- 生成 “memory vectors”
(这是一个很常见的误解。)
正确的流水线是:
Loader → Splitter → Embeddings → Vector Store → Retriever → LLM以 PDF 为例:
from langchain_community.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_openai import OpenAIEmbeddings
from langchain_community.vectorstores import Chroma
loader = PyPDFLoader("file.pdf")
docs = loader.load()
splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
chunks = splitter.split_documents(docs)
embeddings = OpenAIEmbeddings()
db = Chroma.from_documents(chunks, embeddings)现代 LangChain Document Loaders 的使用场景
示例 1:加载并切分文件以构建索引
from langchain_community.document_loaders import TextLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
loader = TextLoader("article.txt")
docs = loader.load()
splitter = RecursiveCharacterTextSplitter(
chunk_size=800, chunk_overlap=150
)
chunks = splitter.split_documents(docs)示例 2:读取 CSV 以进行数据理解
from langchain_community.document_loaders import CSVLoader
loader = CSVLoader("data.csv")
docs = loader.load()
for doc in docs:
print(doc.page_content)示例 3:加载 YouTube 字幕(2025 正确用法)
from langchain_community.document_loaders import YoutubeLoader
loader = YoutubeLoader.from_youtube_url(
"https://www.youtube.com/watch?v=O5nskjZ_GoI",
add_video_info=True
)
docs = loader.load()这里不需要你自己管理 tokenizer 或模型 —— LangChain 只负责加载文本。
示例 4:Pandas DataFrame → Documents
from langchain_community.document_loaders import DataFrameLoader
loader = DataFrameLoader(dataframe, page_content_column="text")
docs = loader.load()基于 LangChain Document Loaders 的真实应用
下面是三个实用且贴合 2025 用法的示例。
构建一个类 ChatGPT 的 PDF 问答应用(现代 RAG)
from langchain_community.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain_community.vectorstores import Chroma
# 1. Load
pages = PyPDFLoader("./SpaceX.pdf").load()
# 2. Split
splitter = RecursiveCharacterTextSplitter(chunk_size=1000, overlap=150)
chunks = splitter.split_documents(pages)
# 3. Embed & store
db = Chroma.from_documents(chunks, OpenAIEmbeddings())
# 4. Ask questions
retriever = db.as_retriever()
llm = ChatOpenAI(model="gpt-4.1")
from langchain.chains import RetrievalQA
qa = RetrievalQA.from_chain_type(llm, retriever=retriever)
qa.run("Summarize the mission in 3 bullet points.")构建一个 YouTube 字幕问答应用
loader = YoutubeLoader.from_youtube_url(url)
docs = loader.load()
chunks = RecursiveCharacterTextSplitter.from_tiktoken_encoder().split_documents(docs)
db = Chroma.from_documents(chunks, OpenAIEmbeddings())
qa.run("Explain the main argument of this video")构建一个网站问答机器人(基于 Sitemap)
from langchain_community.document_loaders.sitemap import SitemapLoader
loader = SitemapLoader("https://docs.chainstack.com/sitemap.xml")
docs = loader.load()然后复用与 PDF/YouTube 相同的 切分 → 向量化 → 检索 → 对话 流水线即可。
总结
LangChain Document Loaders 是任何 RAG 工作流的基础。它们可以帮助你:
- 从几乎任意数据源加载内容
- 将文本规范化为统一的
Document格式 - 构建可检索的数据集
- 在你的私有内容上实现对话、摘要和问答能力
结合最新的 loaders 和 2025 年推荐的 LangChain 用法,你可以在 PDF、网站、YouTube 视频、CSV 等多种数据之上,构建功能强大的 AI 应用。
常见问题(FAQ)
什么是 LangChain Document Loader?
Document Loader 会把文件、URL、API 等外部数据源转换成 LangChain 的 Document 对象,供后续流水线使用。
Document Loaders 会创建 embeddings 或索引吗?
不会。Loader 只负责加载原始文本。生成 embeddings 和建立索引是单独的步骤。
处理 PDF 时推荐用哪个 loader?
PyPDFLoader 是 LangChain 中最稳定、最推荐的 PDF 文本提取方案。
YouTube loader 是如何工作的?
它会通过 YouTube API 或社区字幕抓取视频的文本内容,并将其以 Document 的形式返回。