吴恩达《LangChain LLM 应用开发精读笔记》8-Document Loading 文档加载

大家好,我是飞哥!👋

欢迎来到吴恩达《LangChain:Chat with Your Data》系列课程的第二讲。上一讲我们了解了 RAG 的全流程,今天我们正式开工,攻克第一关:Document Loading (文档加载)


1. 为什么:Garbage In, Garbage Out 🗑️

💡 场景锚定

做饭要先买菜洗菜,训练 AI 也是一样。如果你喂给 AI 的数据格式乱七八糟、乱码满天飞,那么 AI 输出的答案肯定也是一塌糊涂。

  • PDF 里有复杂的表格和页眉页脚。
  • 网页里有一堆广告和导航栏。
  • YouTube 视频只有声音没有文字。

⚠️ 核心痛点

我们需要一个"万能转换器",把这些五花八门的数据源(PDF, HTML, Audio, Notion)统一转换成 AI 能读懂的标准格式。


2. 是什么:LangChain 的 Document Loaders 🏗️

LangChain 提供了超过 80 种文档加载器(Document Loaders),它们的作用就是把各种非结构化数据加载为统一的 Document 对象。

🗂️ 80+ 种文档格式大揭秘 (分类概览)

虽然我们不可能把 80 种全列出来,但我们可以把它们分成三大类:

  1. 公共非结构化数据 (Public Unstructured Data)
    • 网页/互联网:HTML 网页、YouTube 视频字幕、Twitter 推文、Hacker News 帖子、GitHub 代码库等。
  2. 私有非结构化数据 (Proprietary Unstructured Data)
    • 本地文件:PDF、Word 文档、PowerPoint 幻灯片、Markdown 文件、TXT 纯文本。
    • 第三方SaaS工具:Notion 笔记、Figma 设计稿、Slack 聊天记录、Confluence。
  3. 结构化数据 (Structured Data)
    • 表格与数据库:CSV 表格、JSON 文件、Airbyte 数据源、Stripe 账单数据、Airtable 表格等(提取其中的文本字段用于问答)。

一个标准的 Document 对象包含两部分:

  1. page_content: 文档的文本内容(比如 PDF 的一页文字)。
  2. metadata: 文档的元数据(比如文件名、页码、来源 URL)。

3. 怎么用:实战代码 💻

3.1 加载 PDF (PyPDFLoader) 📄

这是最常见的需求。我们使用 PyPDFLoader 来处理 PDF 文件。

提示 :为了保证代码可运行,脚本中默认会自动下载一个示例 PDF (helloworld.pdf)。如果你想加载自己的 PDF,只需修改代码中的路径即可。

python 复制代码
from langchain_community.document_loaders import PyPDFLoader

# 加载 PDF (示例代码加载的是 Andrew Ng 的讲义,脚本实际运行可能加载的是 helloworld.pdf)
loader = PyPDFLoader("docs/cs229_lectures/MachineLearning-Lecture01.pdf")
pages = loader.load()

# 查看页数
print(len(pages)) 
# 输出: 22 (脚本实际输出可能为 1)

# 查看第一页内容(前200字符)
print(pages[0].page_content[0:200]) 
# 输出: MachineLearning-Lecture01 ... (脚本实际输出: Hello, world!)

# 查看元数据
print(pages[0].metadata)
# 输出: {'source': '...', 'page': 0}

3.2 加载 YouTube 音频 (YoutubeAudioLoader + OpenAIWhisper) 📺

想让 AI 总结 YouTube 视频?我们可以先提取音频,再用 OpenAI 的 Whisper 模型转录成文字。

注意 :这需要安装 yt_dlp, pydub, librosa 以及 ffmpeg。同时需要 OpenAI API Key (Whisper 服务)。

python 复制代码
from langchain_community.document_loaders.generic import GenericLoader
from langchain_community.document_loaders.parsers import OpenAIWhisperParser
from langchain_community.document_loaders.blob_loaders.youtube_audio import YoutubeAudioLoader

url = "https://www.youtube.com/watch?v=jGwO_UgTS7I"
save_dir = "docs/youtube/"

# 组合加载器:下载音频 + 转录文字
loader = GenericLoader(
    YoutubeAudioLoader([url], save_dir),
    OpenAIWhisperParser()
)
docs = loader.load()

print(docs[0].page_content[0:500])
# 输出: Welcome to CS229 Machine Learning. Andrew Ng here. ...

3.3 加载网页 (WebBaseLoader) 🌐

想爬取网页内容?WebBaseLoader 可以帮你搞定。它会自动去除 HTML 标签,只保留文本。

python 复制代码
from langchain_community.document_loaders import WebBaseLoader

loader = WebBaseLoader("https://github.com/basecamp/handbook/blob/master/37signals-is-you.md")
docs = loader.load()

print(docs[0].page_content[:500])
# 输出: 37signals Is You ...

3.4 加载 Notion (NotionDirectoryLoader) 📝

Notion 是很多人的知识库。你可以先将 Notion 页面导出为 Markdown/CSV,然后加载。

python 复制代码
from langchain_community.document_loaders import NotionDirectoryLoader

loader = NotionDirectoryLoader("docs/Notion_DB")
docs = loader.load()

print(docs[0].page_content[:200])
# 输出: # Blendle's Employee Handbook ...

📝 飞哥总结

  1. 标准化接口 :无论来源是 PDF 还是 YouTube,加载后都是统一的 Document 对象。
  2. 元数据很重要metadata(如页码、来源)在后续的检索环节非常有用,可以帮你定位答案的出处。
  3. 依赖管理 :不同的 Loader 需要不同的依赖包(如 pypdf, yt_dlp),用到什么装什么。

一句话记住它 💡:Document Loaders 就像是 AI 的"进食口",把各种"生食"(原始数据)加工成 AI 能消化的"熟食"(标准文档对象)!

相关推荐
中屹指纹浏览器2 小时前
2026年设备指纹追踪与浏览器虚拟环境技术深度解析——从风控原理到安全隔离实践
经验分享·笔记
星轨初途2 小时前
郑州轻工业大学“筑梯杯” 2025级新生程序设计大赛暨省内高校邀请赛——题解
android·c++·经验分享·笔记·算法
怕浪猫2 小时前
第4章 提示工程基础:Prompt Templates
langchain·llm·ai编程
资深流水灯工程师2 小时前
BMI270应用笔记1:BMI270结构体详解
笔记
小超同学你好2 小时前
LangGraph 12. Learning & Adaptation,用 LangGraph 写一个会「改进自己」的智能体(含代码示例)
人工智能·语言模型·langchain
童话名剑2 小时前
YOLO v5(学习笔记)
笔记·学习·yolo
程知农3 小时前
Android的配置笔记
android·笔记
1941s3 小时前
08-智能体开发实战指南(八):UI 集成与生产部署
人工智能·python·langchain
求真求知的糖葫芦3 小时前
硅基 PA 学习笔记 (一)应用于毫米波5G的一种大功率宽带多初级基于DAT的Doherty功率放大器学习笔记(上)
笔记·学习·5g