
大家好,我是飞哥!👋
欢迎来到吴恩达《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 种全列出来,但我们可以把它们分成三大类:
- 公共非结构化数据 (Public Unstructured Data):
- 网页/互联网:HTML 网页、YouTube 视频字幕、Twitter 推文、Hacker News 帖子、GitHub 代码库等。
- 私有非结构化数据 (Proprietary Unstructured Data):
- 本地文件:PDF、Word 文档、PowerPoint 幻灯片、Markdown 文件、TXT 纯文本。
- 第三方SaaS工具:Notion 笔记、Figma 设计稿、Slack 聊天记录、Confluence。
- 结构化数据 (Structured Data):
- 表格与数据库:CSV 表格、JSON 文件、Airbyte 数据源、Stripe 账单数据、Airtable 表格等(提取其中的文本字段用于问答)。
一个标准的 Document 对象包含两部分:
page_content: 文档的文本内容(比如 PDF 的一页文字)。metadata: 文档的元数据(比如文件名、页码、来源 URL)。
3. 怎么用:实战代码 💻
3.1 加载 PDF (PyPDFLoader) 📄
这是最常见的需求。我们使用 PyPDFLoader 来处理 PDF 文件。
提示:为了保证代码可运行,脚本中默认会自动下载一个示例 PDF (
helloworld.pdf)。如果你想加载自己的 PDF,只需修改代码中的路径即可。
1from langchain_community.document_loaders import PyPDFLoader 2 3# 加载 PDF (示例代码加载的是 Andrew Ng 的讲义,脚本实际运行可能加载的是 helloworld.pdf) 4loader = PyPDFLoader("docs/cs229_lectures/MachineLearning-Lecture01.pdf") 5pages = loader.load() 6 7# 查看页数 8print(len(pages)) 9# 输出: 22 (脚本实际输出可能为 1) 10 11# 查看第一页内容(前200字符) 12print(pages[0].page_content[0:200]) 13# 输出: MachineLearning-Lecture01 ... (脚本实际输出: Hello, world!) 14 15# 查看元数据 16print(pages[0].metadata) 17# 输出: {'source': '...', 'page': 0} 18
3.2 加载 YouTube 音频 (YoutubeAudioLoader + OpenAIWhisper) 📺
想让 AI 总结 YouTube 视频?我们可以先提取音频,再用 OpenAI 的 Whisper 模型转录成文字。
注意:这需要安装
yt_dlp,pydub,librosa以及ffmpeg。同时需要 OpenAI API Key (Whisper 服务)。
1from langchain_community.document_loaders.generic import GenericLoader 2from langchain_community.document_loaders.parsers import OpenAIWhisperParser 3from langchain_community.document_loaders.blob_loaders.youtube_audio import YoutubeAudioLoader 4 5url = "https://www.youtube.com/watch?v=jGwO_UgTS7I" 6save_dir = "docs/youtube/" 7 8# 组合加载器:下载音频 + 转录文字 9loader = GenericLoader( 10 YoutubeAudioLoader([url], save_dir), 11 OpenAIWhisperParser() 12) 13docs = loader.load() 14 15print(docs[0].page_content[0:500]) 16# 输出: Welcome to CS229 Machine Learning. Andrew Ng here. ... 17
3.3 加载网页 (WebBaseLoader) 🌐
想爬取网页内容?WebBaseLoader 可以帮你搞定。它会自动去除 HTML 标签,只保留文本。
1from langchain_community.document_loaders import WebBaseLoader 2 3loader = WebBaseLoader("https://github.com/basecamp/handbook/blob/master/37signals-is-you.md") 4docs = loader.load() 5 6print(docs[0].page_content[:500]) 7# 输出: 37signals Is You ... 8
3.4 加载 Notion (NotionDirectoryLoader) 📝
Notion 是很多人的知识库。你可以先将 Notion 页面导出为 Markdown/CSV,然后加载。
1from langchain_community.document_loaders import NotionDirectoryLoader 2 3loader = NotionDirectoryLoader("docs/Notion_DB") 4docs = loader.load() 5 6print(docs[0].page_content[:200]) 7# 输出: # Blendle's Employee Handbook ... 8
📝 飞哥总结
- 标准化接口:无论来源是 PDF 还是 YouTube,加载后都是统一的
Document对象。 - 元数据很重要:
metadata(如页码、来源)在后续的检索环节非常有用,可以帮你定位答案的出处。 - 依赖管理:不同的 Loader 需要不同的依赖包(如
pypdf,yt_dlp),用到什么装什么。
一句话记住它 💡:Document Loaders 就像是 AI 的“进食口”,把各种“生食”(原始数据)加工成 AI 能消化的“熟食”(标准文档对象)!
《吴恩达《LangChain LLM 应用开发精读笔记》8-Document Loading 文档加载》 是转载文章,点击查看原文。
