一、核心存储模块(数据存储核心)
Llamaindex的存储模块负责管理处理后的数据,分为四大核心存储类型,各有分工、相互配合,同时支持自定义扩展。
2.1 向量存储(Vector Store)
核心定义:用于存储文档经过Embedding(嵌入)处理后生成的向量(Vector),是Llamaindex实现“语义检索”的核心。
核心作用:将文本(文档、句子、段落)转换成计算机可理解的高维向量,通过“向量相似度计算”(如余弦相似度),快速找到与用户查询最相关的内容,解决“关键词检索无法匹配语义”的问题。
常见实现:默认使用LlamaIndex内置向量存储,也可集成第三方向量数据库(如Pinecone、Chroma、Milvus、FAISS),适配不同数据规模(小数据用内置,大数据用第三方)。
关键细节:向量存储只存“向量数据”和对应的“文档引用”,不存原始文档内容,核心是“高效检索相似内容”。
2.2 文档存储(Document Store)
核心定义:用于存储原始文档及其相关元数据(如文档名称、创建时间、来源),是所有数据的“原始载体”。
核心作用:保存未经拆分、未做Embedding的原始文档,当向量存储检索到相关向量后,会通过“文档引用”从这里获取原始文本,供后续处理和回答生成。
常见实现:支持本地文件(如JSON、CSV)、数据库(如PostgreSQL、MongoDB),也可集成云存储(如AWS S3),核心是“安全、完整保存原始数据”。
注意:文档存储不负责检索,只负责“存储和读取原始文档”,与向量存储是“互补关系”。
2.3 索引存储(Index Store)
核心定义:用于存储索引的结构信息,而非原始数据或向量,是Llamaindex管理索引的“核心枢纽”。
核心作用:记录索引的类型(如Vector Index、Tree Index)、索引与文档/向量的关联关系、索引的配置参数等,确保索引可以被快速加载、修改和复用。
简单理解:索引是“数据的组织方式”,索引存储就是“保存这种组织方式的说明书”,避免每次使用时都重新构建索引,提升效率。
2.4 键值存储(Key-Value Store)
核心定义:以“键(Key)-值(Value)”对的形式,存储Llamaindex运行过程中的辅助数据,是一种轻量级存储。
核心作用:存储非向量、非原始文档的辅助信息,比如:索引的缓存数据、会话历史(聊天引擎用)、Embedding模型的配置、节点的元数据映射等。
常见实现:内置支持SQLite、JSON文件,也可集成Redis等键值数据库,核心是“快速读取和写入辅助数据”,提升框架运行效率。
2.5 自定义存储(Custom Store)
核心定义:当上述四种默认存储无法满足业务需求(如特殊数据库、私有存储协议)时,用户可通过Llamaindex提供的接口,自定义实现的存储模块。
核心要求:需遵循Llamaindex的存储抽象接口(如VectorStore、DocumentStore抽象类),实现对应的核心方法(如向量的增删改查、文档的读写),即可无缝集成到Llamaindex框架中。
应用场景:企业内部私有存储、特殊格式数据存储(如加密文档)、与现有系统的存储兼容等。
二、核心引擎模块(功能核心)
引擎模块是Llamaindex的“功能入口”,负责将存储的数据与LLM结合,实现检索、聊天等核心功能,核心包括查询引擎和聊天引擎。
3.1 查询引擎(Query Engine)
核心定义:Llamaindex最核心的功能模块,负责“接收用户查询 → 检索相关数据 → 结合LLM生成回答”的完整流程,是“检索+生成”的核心载体。
核心作用:将用户的自然语言查询,转换成可执行的检索操作,从存储模块中获取相关数据,再将数据和查询一起传递给LLM,让LLM基于检索到的私有数据生成回答。
常见类型:
Vector Query Engine:基于向量存储的语义检索,适合精准匹配用户查询的语义,是最常用的查询引擎。
Tree Query Engine:基于树状索引,适合多文档、层级化的查询(如总结多个文档的核心观点)。
Keyword Query Engine:基于关键词检索,适合简单、明确的关键词查询(效率高,但语义匹配能力弱)。
关键细节:查询引擎可配置检索参数(如检索数量、相似度阈值),也可结合节点后处理器、响应合成器优化回答质量。
3.2 聊天引擎(Chat Engine)
核心定义:基于查询引擎扩展而来,专门用于“多轮聊天”场景,支持上下文记忆,让LLM可以结合历史聊天记录和私有数据,进行连贯的对话。
核心区别:与查询引擎的“单次查询-单次回答”不同,聊天引擎会保存会话历史(通常存在键值存储中),每次回答时都会结合历史记录,避免“上下文断裂”。
核心作用:实现“私有数据+多轮对话”,比如:基于企业文档进行多轮咨询、基于个人笔记进行连贯问答等。
常见类型:Simple Chat Engine(简单会话,适合小规模数据)、ContextChat Engine(上下文会话,支持复杂多轮对话)。
三、核心流程模块(检索与回答优化)
检索、节点后处理器、响应合成器,是查询引擎/聊天引擎工作流程中的关键环节,负责优化检索结果、提升回答质量。
4.1 检索(Retrieval)
核心定义:从存储模块(主要是向量存储)中,根据用户查询,获取“最相关数据”的过程,是回答生成的“数据基础”。
核心流程:
用户输入查询(自然语言);
Llamaindex将查询转换成向量(通过Embedding模型);
向量存储通过相似度计算,返回Top N个最相关的向量对应的“节点”(文档拆分后的最小单元);
检索结果传递给节点后处理器,进行进一步优化。
关键指标:检索准确率(找到的内容是否与查询相关)、检索效率(获取结果的速度),可通过调整向量存储、检索参数优化。
4.2 节点后处理器(Node Postprocessor)
核心定义:对检索到的“节点”(检索结果)进行二次处理,过滤无效信息、提升相关性,为后续回答合成做准备。
核心作用:解决“检索结果可能包含无关信息、重复信息”的问题,优化输入到LLM的数据质量。
常见类型:
Similarity Postprocessor:按相似度排序,过滤相似度低于阈值的节点(最常用);
Metadata Filter Postprocessor:根据节点的元数据(如文档来源、时间)过滤节点;
Duplicate Postprocessor:去除重复的节点,避免冗余信息;
Keyword Postprocessor:过滤不包含查询关键词的节点,提升精准度。
4.3 响应合成器(Response Synthesizer)
核心定义:将“经过节点后处理器优化后的检索结果”与“用户查询”结合,传递给LLM,生成最终回答的模块,是“生成回答”的核心。
核心作用:负责将检索到的分散节点(如多个文档的片段)进行整合、总结,引导LLM基于这些数据生成“连贯、准确、不偏离查询”的回答,避免LLM脱离私有数据“瞎回答”。
常见类型:
Refine Synthesizer:逐步优化回答,先基于第一个节点生成初步回答,再结合后续节点补充、修正(适合多节点、复杂查询);
Compact And Refine Synthesizer:先将所有节点压缩成简洁摘要,再生成回答(提升效率,适合大量节点);
Tree Summarize Synthesizer:将节点按层级分组,先总结每组内容,再汇总成最终回答(适合多文档总结)。
四、学习总结
Llamaindex的核心逻辑的是:数据存储 → 检索 → 处理 → 生成,各模块分工明确:
存储模块(向量/文档/索引/键值):负责“存好数据”,为后续操作提供基础;
检索:负责“找到相关数据”,从存储中快速提取有用信息;
节点后处理器:负责“优化数据”,过滤无效、冗余信息;
响应合成器+引擎(查询/聊天):负责“生成回答”,结合LLM和处理后的数据,输出精准、连贯的结果。
自定义存储则为框架提供了灵活性,适配不同业务场景,让Llamaindex可以无缝集成到各类系统中。