1. 数据接入层(Data Ingestion)
数据接入层负责从各种数据源加载原始数据并转换为标准化格式。该层包含两个核心抽象:
- Document:外部数据源的原始表示,可以是一个 PDF 文件、一个网页、一段数据库查询结果或 API 响应。每个 Document 存储原始文本内容以及元数据(如文件名、创建日期、来源 URL)和关系信息(与其他 Document 或 Node 的连接)。
- Node:Document 被解析后的原子数据单元,是 LlamaIndex 中检索的最基本单位。Node 包含实际文本内容、从父 Document 继承的元数据,以及指向其他 Node 的关系指针(如前一个/后一个 Node)。
数据通过 Data Connector(也称为 Reader)从不同数据源接入,LlamaHub 生态提供了 300 多种集成包,覆盖云存储(Amazon S3、Google Drive)、生产力工具(Notion、Slack、Confluence)、数据库(PostgreSQL、MySQL、MongoDB)、文件格式(PDF、CSV、DOCX、HTML)等类型。
2. 索引层(Index Layer)
索引层将解析后的 Node 组织成可搜索的数据结构,以便高效检索相关信息。LlamaIndex 支持多种索引类型,针对不同的检索策略进行优化。
3. 检索层(Retrieval Layer)
检索层负责根据用户查询从索引中获取最相关的 Node。核心组件包括:
- Retriever:定义如何从索引中高效检索相关上下文,支持向量检索、关键词检索、混合检索等多种策略。
- Node Parser:控制文档分块策略,支持固定大小分块、句子级分割、语义分块等。
- Postprocessor:对检索结果进行后处理,如重排序、元数据过滤、上下文窗口扩展等。
4. 编排层(Orchestration Layer)
编排层负责协调检索、生成和多步骤工作流。核心组件包括:
- Workflows:事件驱动、异步优先的工作流引擎,通过 @step 装饰器定义步骤,步骤之间通过类型化事件(Event)进行通信,支持分支、循环、并行执行和状态持久化。
- Router:根据查询内容将请求路由到不同的检索策略或索引。
5. 应用层(Application Layer)
应用层提供面向最终用户的交互接口:
- Query Engine:将检索器和响应合成器组合成端到端管道,接收用户问题、检索相关 Node、使用 LLM 合成连贯答案。
- Chat Engine:支持多轮对话的交互接口,维护对话历史和上下文。
- Agent:具备自主推理和行动能力的智能体,可以调用工具、执行多步骤任务、维护记忆并进行反思。