从Java转行大模型应用,LlamaIndex基本概念学习
·
一、基本概念
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 附加元数据。
- 价值:支持元数据过滤检索、答案溯源、内容分类。
十二、核心总结
- 数据层:连接器→文档→节点,完成接入 - 分块 - 标准化;
- 处理层:分割器→解析器→摄取管道→元数据提取,实现数据增强;
- 索引层:向量 / 属性图 / 文件管理索引,适配不同检索场景;
- 应用层:索引→检索器→查询引擎→LLM,完成RAG 全链路。
更多推荐


所有评论(0)