1. 项目概述
作为一名长期从事AI应用开发的工程师,我深知文档处理是大模型应用开发中最基础却最容易被忽视的环节。今天我将分享如何用LangChain这个神器,将各种格式的文档(PDF、TXT、HTML等)转化为标准化的数据结构,为后续的RAG(检索增强生成)开发打下坚实基础。
RAG技术之所以重要,是因为它解决了大模型"知识固化"的核心痛点。想象一下,当你问ChatGPT关于公司内部文档的问题时,它往往无法回答——因为它根本"看不到"这些文档。而通过RAG,我们可以让大模型在回答问题时实时查阅指定资料,就像给它配了一个智能秘书。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心原理与工具选型
2.1 为什么选择LangChain?
LangChain之所以成为构建RAG系统的首选框架,主要基于以下考量:
- 标准化接口:提供统一的Document对象规范,无论原始文档是什么格式,最终都会转化为相同结构
- 丰富的加载器:内置支持30+文档格式的加载器,从常见的PDF、Word到特殊的B站字幕、S3存储
- 模块化设计:每个处理步骤(加载、分块、嵌入、检索)都可独立替换,方便定制
- 社区生态:拥有活跃的开源社区,遇到问题容易找到解决方案
提示:虽然LangChain功能强大,但对于超大规模文档处理(如百万级PDF),可能需要考虑结合Apache Tika等企业级工具。
2.2 Document对象解析
LangChain中的Document对象包含三个核心字段:
python复制class Document:
page_content: str # 文档文本内容
metadata: dict # 元数据(来源、页码等)
id: Optional[str] # 唯一标识(可选)
这种设计精妙之处在于:
- 保持内容与元数据的分离,便于后续处理
- 元数据自动记录文档来源,对结果溯源至关重要
- ID字段为后续的版本管理留出扩展空间
3. 实战:文档加载与处理
3.1 PDF文档处理
PDF是最常见但也最棘手的文档格式之一。以下是完整的PDF处理方案:
python复制# 安装依赖(建议使用虚拟环境)
pip install langchain-community pypdf
# PDF加载实现
from langchain_community.document_loaders import PyPDFLoader
def load_pdf(file_path):
loader = PyPDFLoader(file_path)
documents = loader.load()
# 验证加载结果
for i, doc in enumerate(documents[:3]): # 打印前3页信息
print(f"Page {i+1}:")
print(doc.page_content[:200] + "...") # 截取前200字符
print("Metadata:", doc.metadata)
print("-" * 50)
return documents
关键细节说明:
PyPDFLoader会自动将PDF的每一页转换为独立的Document对象- 元数据中包含
source(文件路径)、page(页码)等关键信息 - 对于扫描版PDF,需要先使用OCR工具(如Tesseract)进行文字识别
3.2 文本与HTML文档处理
纯文本和HTML文档的处理相对简单,但有几个注意事项:
python复制from langchain_community.document_loaders import TextLoader, BSHTMLLoader
def load_text(file_path):
loader = TextLo
