一、基本概念

LlamaIndex 是面向 LLM 的RAG 数据编排框架,核心解决私有数据接入、分块、索引、检索与生成问题,以低门槛、高可扩展为设计原则,支撑从 POC 到生产级知识库、问答系统。核心流程:数据源→数据连接器→文档→节点解析→索引→检索→生成回答。

二、提示(Prompt)

  • 作用:定义 LLM 行为,控制回答风格、格式、约束(如引用来源、简洁度)。
  • 集成:与查询引擎绑定,检索到节点后,将上下文 + 问题 + 提示送入 LLM 生成答案。
  • 关键:提示需适配分块粒度,避免过长上下文;生产中用模板化提示提升稳定性。

三、加载(Loading)

将异构数据转为 LlamaIndex 可处理格式,是 RAG 第一步。

  • 目标:统一输入为Document对象,保留原始内容与元数据。
  • 方式:通过Reader / 数据连接器读取,支持本地文件、数据库、SaaS、API 等。

四、文档(Document)与节点(Node)

文档(Document)

  • 定义:完整数据源载体(一篇 PDF、一个 API 响应、一个数据库记录)。
  • 核心字段:text(文本)、metadata(元数据:文件名、作者、路径等)、doc_id(唯一标识)、relationships(关联关系)。
  • 原则:不做加工,保持原始完整性,解析与分块交给下游组件。

节点(Node)

  • 定义:Document 分块后的检索原子单元,适配 LLM 上下文限制。
  • 核心字段:node_id、text、metadata(继承 + 自定义)、embedding、relationships、起止字符索引(支持溯源)。
  • 关系:支持父子、前后节点,支撑多粒度检索与上下文补全。

五、目录读取器(Directory Reader)

  • 代表:SimpleDirectoryReader(最常用)。
  • 能力:自动识别目录下 20 + 文件格式(PDF/MD/TXT/CSV 等),一键加载为 Document 列表。
  • 用法
from llama_index.core import SimpleDirectoryReader
documents = SimpleDirectoryReader("./data").load_data()
  • 特性:支持指定文件后缀、过滤文件、文件名作为 doc_id,简化批量加载。

六、数据连接器(Data Connectors)

  • 定位:LlamaHub 生态,160 + 数据源适配器,对接各类原始数据。
  • 分类:
    • 非结构化:PDF、Word、网页、Notion、Slack;
    • 结构化:MySQL、PostgreSQL、MongoDB、CSV;
    • 云存储:S3、Azure Blob。
  • 价值:屏蔽数据源差异,统一输出 Document,降低接入成本。

七、节点解析器(Node Parser)

  • 作用:将 Document 切分为 Node,控制分块策略,直接影响检索精度。
  • 核心:内置多种解析器,适配不同文本结构。
  • 常用:SentenceSplitter(按句子 / Token 切分,支持 chunk_size、chunk_overlap)。
  • 用法:
from llama_index.core.node_parser import SentenceSplitter
splitter = SentenceSplitter(chunk_size=1024, chunk_overlap=200)
nodes = splitter.get_nodes_from_documents(documents)

八、文本分割器(Text Splitter)

  • 定位:节点解析器的底层实现,专注文本切分规则。
  • 类型:
    • TokenTextSplitter:按 Token 数分割(适配 LLM 上下文);
    • SentenceSplitter:按句子边界分割(保留语义完整性);
    • MarkdownNodeParser:按 Markdown 标题层级分割(保留结构)。
  • 关键参数:chunk_size(块大小)、chunk_overlap(重叠区,防信息切断)。

九、摄取管道(Ingestion Pipeline)

  • 定义:数据处理工作流,串联分割、元数据提取、嵌入、索引等步骤。
  • 组件:transformations 列表(分割器→提取器→嵌入模型)。
  • 价值:模块化、可复用、支持缓存,批量处理更高效。
  • 用法:
from llama_index.core.ingestion import IngestionPipeline
from llama_index.core.node_parser import SentenceSplitter
from llama_index.core.extractors import TitleExtractor
pipeline = IngestionPipeline(
    transformations=[SentenceSplitter(chunk_size=512), TitleExtractor()]
)
nodes = pipeline.run(documents=documents)

十、索引(Index)

  • 定义:对 Node 集合的结构化组织,实现快速检索。
  • 核心:将文本转为向量 / 关键词 / 图结构,匹配不同查询场景。
  • 原则:按需选择索引,支持多索引混合检索。

1. 向量存储索引(VectorStoreIndex)

  • 最常用,语义检索核心
  • 原理:将 Node 转为 Embedding,存入向量库,按相似度 Top-K 召回。
  • 适用:智能问答、语义搜索、总结。
  • 用法:
from llama_index.core import VectorStoreIndex
index = VectorStoreIndex.from_documents(documents)
  • 支持:内存 / Chroma/Pinecone/Milvus 等向量存储,支持持久化。

2. 属性图表索引(PropertyGraphIndex)

  • 定位:实体 - 关系 - 属性图谱索引,整合结构化 + 非结构化数据。
  • 原理:自动抽取实体、关系、属性,构建属性图,支持图检索 + 向量混合检索。
  • 适用:知识推理、关系问答、行业知识库(医疗 / 金融)。
  • 集成:对接 Neo4j、NebulaGraph 等图数据库。

3. 文件管理索引(DocumentManagementIndex/KeywordTableIndex)

  • 注:常称关键词表 / 文档管理索引,侧重精确匹配与文件维度管理。
  • 原理:构建关键词倒排索引,按 BM25 / 关键词精确检索。
  • 适用:精确术语查询、文件名 / 标签过滤、批量文档管理。
  • 价值:弥补向量检索在专有名词、编号上的不足。

十一、元数据提取(Metadata Extraction)

  • 定义:为 Document/Node 补充结构化信息,提升检索精准度与可解释性。
  • 核心提取器:
    • TitleExtractor:提取标题;
    • SummaryExtractor:生成摘要;
    • KeywordExtractor:抽取关键词;
    • EntityExtractor:识别实体(人名 / 机构 / 时间)。
  • 用法:集成到摄取管道,自动为 Node 附加元数据。
  • 价值:支持元数据过滤检索、答案溯源、内容分类。

十二、核心总结

  1. 数据层:连接器→文档→节点,完成接入 - 分块 - 标准化
  2. 处理层:分割器→解析器→摄取管道→元数据提取,实现数据增强
  3. 索引层:向量 / 属性图 / 文件管理索引,适配不同检索场景
  4. 应用层:索引→检索器→查询引擎→LLM,完成RAG 全链路
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐