加载器、分割器与向量存储
使用 DocumentLoaders 处理 PDF/HTML,使用 TextSplitters 进行分块,并使用 VectorStores 进行检索。
加载器、分割器与向量存储 是 CoddyKit 上的免费 AI Agents 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 AI Agents 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 AI Agents 课程共包含 4 节课。
本课时的部分内容尚未翻译,以英文显示。
LangChain 中 RAG 的三大支柱
- 文档加载器 — 将原始数据读入 Documents
- 文本分割器 — 将 Documents 切分成块
- 向量存储 — 将文本块转换为嵌入并建立索引
文档加载器
LangChain 提供了 100 多种加载器。示例:
from langchain_community.document_loaders import PyPDFLoader, WebBaseLoader, TextLoader
pdf_docs = PyPDFLoader('handbook.pdf').load()
web_docs = WebBaseLoader('https://example.com').load()
md_docs = TextLoader('README.md').load()Document 对象
每个加载器都会返回一个 Documents 列表:
doc = pdf_docs[0]
print(doc.page_content) # the text
print(doc.metadata) # {'source': 'handbook.pdf', 'page': 1}常用加载器
- PyPDFLoader、文件非结构化加载器 — PDF
- WebBaseLoader、SitemapLoader — 网页
- NotionLoader、GoogleDriveLoader — 软件即服务
- GitLoader — 代码仓库
- SQL 数据库加载器 — 数据库行
文本分割器
将 Documents 转换为更小的文本块:
from langchain.text_splitter import RecursiveCharacterTextSplitter
splitter = RecursiveCharacterTextSplitter(
chunk_size=800,
chunk_overlap=100,
separators=['\n\n', '\n', '. ', ' ']
)
chunks = splitter.split_documents(pdf_docs)专用分割器
- MarkdownHeaderTextSplitter — 按标题切分
- RecursiveCharacterTextSplitter — 感知段落和句子边界
- HTML 标题文本分割器 — 感知 HTML 结构
- 特定语言的分割器(Python、Markdown、LaTeX)
感知令牌的切分
使用模型的令牌化器,进行精确到令牌的切分:
splitter = RecursiveCharacterTextSplitter.from_tiktoken_encoder(
encoding_name='cl100k_base',
chunk_size=400,
chunk_overlap=50
)向量存储
将文本块转换为嵌入并存储:
from langchain_openai import OpenAIEmbeddings
from langchain_community.vectorstores import Chroma
embeddings = OpenAIEmbeddings(model='text-embedding-3-small')
store = Chroma.from_documents(
documents=chunks,
embedding=embeddings,
persist_directory='./db'
)Retrieval
retriever = store.as_retriever(search_kwargs={'k': 4})
results = retriever.invoke('What is our return policy?')
for d in results:
print(d.page_content[:200])持久化
如果为 Chroma 提供 persist_directory,它就会将数据持久化到磁盘。重新加载方法如下:
store = Chroma(persist_directory='./db', embedding_function=embeddings)其他向量存储
接口相同,后端不同:
from langchain_community.vectorstores import FAISS, Pinecone, Qdrant, Weaviate
store = FAISS.from_documents(chunks, embeddings)
store.save_local('./faiss_db')MultiVectorRetriever
为小文本块建立索引,但检索较大的父文本块:
from langchain.retrievers import MultiVectorRetriever
# Use the parent-child pattern automatically.自查询检索器
让 LLM 根据自然语言生成元数据过滤条件:
from langchain.retrievers.self_query.base import SelfQueryRetriever
# 'What did Alice say in 2023?' -> filter={author: 'Alice', year: 2023}检索器输出
LangChain 检索器会返回什么?
回顾
加载器 + 分割器 + 向量存储 = 完整的 RAG 技术栈。接下来将学习如何使用 LCEL 将它们组合成完整的链。
常见问题解答
「加载器、分割器与向量存储」课时是免费的吗?
是的 — 「加载器、分割器与向量存储」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 AI Agents 课程的其余内容,请升级到 CoddyKit PRO。 AI Agents 课程共包含 4 节课。
「加载器、分割器与向量存储」这节课中我会学到什么?
使用 DocumentLoaders 处理 PDF/HTML,使用 TextSplitters 进行分块,并使用 VectorStores 进行检索。 你通过在浏览器中直接运行的动手代码来练习 AI Agents,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 AI Agents 需要有经验吗?
无需任何先前经验。CoddyKit 上的 AI Agents 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「加载器、分割器与向量存储」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 AI Agents 课中编写并运行代码吗?
能。每节 AI Agents 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。