核心概念:Document、Node 与 IngestionPipeline
掌握 LlamaIndex 的数据原子:Document 与 Node 的关系,以及用 IngestionPipeline 编排切分、嵌入与存储。
Document 与 Node
- Document:一份完整数据的容器(PDF、网页、数据库行),携带 content 与 metadata;
- Node:Document 切分后的块(Chunk),是索引与检索的最小单位,并保留指向父文档的引用与位置信息。
from llama_index.core import Document
from llama_index.core.node_parser import SentenceSplitter
doc = Document(text="很长的文档内容……", metadata={"source": "handbook.pdf"})
nodes = SentenceSplitter(chunk_size=512, chunk_overlap=50).get_nodes_from_documents([doc])
print(len(nodes), nodes[0].metadata)
IngestionPipeline:把数据加工流水线化
from llama_index.core.ingestion import IngestionPipeline
from llama_index.core.node_parser import SentenceSplitter
from llama_index.embeddings.openai import OpenAIEmbedding
from llama_index.vector_stores.qdrant import QdrantVectorStore
pipeline = IngestionPipeline(
transformations=[
SentenceSplitter(chunk_size=512, chunk_overlap=50), # 切分
OpenAIEmbedding(), # 嵌入
QdrantVectorStore(...) # 入库
])
pipeline.run(documents=docs)
两个实用特性
- 缓存与增量:Pipeline 自动记录每个 Document 的处理指纹,重复运行只处理新增/变更内容 —— 文档库天天更新的场景省时省钱;
- 元数据即过滤条件:给 Node 挂 metadata(部门/日期/权限),查询时可按条件过滤 —— 多租户 RAG 的基础。
对照本站 RAG 课程:Document/Node ≈ Document/Chunk,IngestionPipeline ≈ 「加载→切分→嵌入→入库」的官方流水线封装。
📝 课后练习
quiz-1 LlamaIndex 中 Node 与 Document 的关系是?