Skip to content

从零上手 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 包括:

  • PyPDFLoader
  • JSONLoader
  • Docx2txtLoader
  • UnstructuredFileLoader
  • PandasDataFrameLoader

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 的形式返回。