【LangChain指南】Document loaders
LangChain Document Loaders:数据接入的基石
课程目标:
- 理解Document Loaders的核心概念与重要性。
- 掌握加载不同格式数据(PDF, Web, CSV, Directory, JSON, Markdown等)的常用方法。
- 学会根据需求选择合适的加载器和配置参数。
第一部分:Document Loaders 概述
大家好!在构建任何基于LangChain的应用,比如RAG(检索增强生成)系统或智能问答机器人时,第一步往往是“我们如何把外部的数据喂给我们的大语言模型(LLM)?” 这就是 Document Loaders 发挥核心作用的地方。
Document Loaders是LangChain框架中的基础组件,它们的作用是将来自各种不同来源和格式的数据,统一加载并转换成LangChain内部标准的 Document
对象 。你可以把它们想象成数据世界的“翻译官”和“搬运工”,负责将PDF、网页、CSV文件、甚至数据库里的信息,翻译成LLM能够理解和处理的结构化文本 。
每个 Document
对象通常包含两个主要部分:
page_content
: 一个字符串,存放实际的文本内容。metadata
: 一个字典,存放关于这段文本的元信息,比如来源文件路径、页码、作者、创建时间等。
LangChain提供了数百种与不同数据源集成的加载器 ,涵盖了从本地文件系统到网络服务的各种场景 。它们提供了一个标准的接口,让我们可以用相似的方式(通常是调用 .load()
或 .lazy_load()
方法)来加载数据 。
第二部分:核心加载器详解与代码演示
接下来,我们将逐一讲解您提供的链接中涵盖的主要加载器类型,并附上相应的Python代码。
1. 加载PDF文档 (PyPDFLoader
& UnstructuredLoader
)
PDF是最常见的文档格式之一,但其内部结构复杂。LangChain提供了不同层级的解决方案。
- 简单快速提取 (
PyPDFLoader
): 适用于只需要提取纯文本的场景,速度快,但会丢失格式和图片信息。 - 高级布局分析 (
UnstructuredLoader
): 适用于需要保留文档结构(如标题、段落、表格)或处理扫描件(OCR)的场景。
# 安装依赖
# pip install pypdf
# pip install langchain-unstructured # 用于高级解析from langchain_community.document_loaders import PyPDFLoader
from langchain_unstructured import UnstructuredLoader# --- 简单加载 ---
loader_simple = PyPDFLoader("example.pdf")
pages = loader_simple.load() # 返回一个Document列表,每个元素对应一页for i, page in enumerate(pages):print(f"--- Page {i+1} ---")print(f"Metadata: {page.metadata}") # 包含 'source' 和 'page' 信息print(f"Content (first 100 chars): {page.page_content[:100]}...")# --- 高级加载 (需API Key或本地安装依赖) ---
# loader_advanced = UnstructuredLoader(
# file_path="example.pdf",
# strategy="hi_res", # 使用高分辨率策略进行布局分析
# # partition_via_api=True, # 如果使用Unstructured API
# # api_key="your_api_key"
# )
# docs = loader_advanced.load() # 返回多个Document,每个代表一个元素(标题、段落、表格等)
# for doc in docs[:3]:
# print(f"Category: {doc.metadata.get('category', 'Unknown')}")
# print(f"Content: {doc.page_content[:50]}...")
# print("---")
2. 加载网页内容 (WebBaseLoader
& UnstructuredLoader
)
从网页抓取信息是构建知识库的常见需求。
WebBaseLoader
: 基于beautifulsoup4
,适合快速提取整个页面的文本。UnstructuredLoader
: 同样可以用于网页,能更好地解析出标题、列表项等结构。
# 安装依赖
# pip install beautifulsoup4
# pip install langchain-unstructuredfrom langchain_community.document_loaders import WebBaseLoader
from langchain_unstructured import UnstructuredLoader
import bs4url = "https://python.langchain.com/docs/ge