LlamaIndex(以前称为 GPT Index)是一个专注于连接大语言模型(LLM)与私有数据(如 PDF、文档、数据库或 API)的框架。它的核心目标是让开发者能够轻松地利用 LLM 的推理能力来构建基于外部知识的应用程序(例如 RAG - 检索增强生成)。
以下是 LlamaIndex 的核心高层概念汇总,我将按照数据流动的逻辑结构进行分类:
1. 核心数据结构
这是 LlamaIndex 处理数据的基础单元。
- Document (文档) :
- 数据源中的原始数据单元。通常包含文本内容及其相关的元数据(如文件名、创建时间、作者、URL 等)。
- Node (节点) :
- LlamaIndex 中的"原子"数据单元。
- 文档通常会被切分成多个 Node。每个 Node 包含一段文本内容、元数据以及与父节点或其他节点的关系信息。这是实际被索引和检索的对象。
2. 连接器
用于将外部数据加载到 LlamaIndex 系统中。
- Data Loaders (数据加载器, 通常称为 LlamaHub) :
- 负责从各种数据源(本地文件、Notion、Google Docs、PDF、SQL 数据库、Web 等)读取数据并将其转换为
Document对象。 - LlamaHub 是一个庞大的开源数据加载器库,支持数百种数据源。
- 负责从各种数据源(本地文件、Notion、Google Docs、PDF、SQL 数据库、Web 等)读取数据并将其转换为
3. 索引
索引定义了数据如何被存储和组织,以便后续被 LLM 高效查询。
- Vector Store Index (向量存储索引) :
- 最常用的索引类型。它将 Node 转换为向量嵌入,并存储在向量数据库中。
- 支持语义搜索,即根据含义而非关键词匹配来查找相关内容。
- List Index (列表索引) :
- 简单地将 Node 存储在一个列表中。通常用于遍历所有节点,适合需要综合所有上下文的场景。
- Tree Index (树索引) :
- 构建一个层次化的树结构。查询时,系统可以从叶子节点向根节点遍历,自底向上地汇总信息。适合总结性任务。
- Keyword Table Index (关键词表索引) :
- 提取每个 Node 的关键词,并建立关键词到 Node 的映射。适合精确的关键词查询。
- Knowledge Graph Index (知识图谱索引) :
- 将数据提取为实体和关系,构建图谱。适合处理复杂的关系查询和多跳推理。
4. 查询引擎
查询引擎负责处理用户的自然语言查询,利用索引检索相关信息,并生成回答。
- Query Engine (查询引擎) :
- 这是一个通用接口,它接收查询字符串,执行检索(从索引中找相关 Node),然后使用 LLM 基于检索到的内容合成最终答案。
- Retriever (检索器) :
- 查询引擎的子组件,专门负责从索引中获取最相关的 Node。它不生成答案,只返回数据。
- Response Synthesizer (响应合成器) :
- 查询引擎的子组件,负责将检索到的 Node 和用户查询组合成 Prompt,发送给 LLM,并将 LLM 的返回结果格式化。
5. 聊天引擎
专门用于对话场景的接口。
- Chat Engine (聊天引擎) :
- 基于查询引擎构建,但增加了历史对话记忆的功能。
- 它不仅基于数据索引回答问题,还会结合之前的对话上下文。
- 常见模式包括
CondenseQuestionMode(压缩历史记录和新问题)和ContextMode(检索历史上下文)。
6. 高级抽象与代理
用于构建更复杂的应用逻辑。
- Router (路由器) :
- 允许你定义多个查询引擎或工具。Router 会根据查询的内容,自动选择最合适的查询引擎来处理请求(例如:将关于"代码"的问题发给代码索引,将关于"文本"的问题发给文档索引)。
- Agent (代理) :
- 一个由 LLM 驱动的智能体,它可以自主决定采取什么行动。
- 它配备了一组"工具"(Tools,如查询引擎、计算器、API 调用等),能够通过推理步骤来拆解复杂任务并自动执行。
7. 回调与可观测性
用于调试、监控和评估系统性能。
- Callback Handlers (回调处理器) :
- 允许你在 LlamaIndex 执行的各个阶段(如开始查询、检索结束、LLM 生成结束等)插入自定义逻辑。
- 常用于日志记录、追踪 Token 消耗、或者集成到 LangSmith、Arize Phoenix 等监控平台。
8. LLM 与 嵌入模型
LlamaIndex 本身不生产模型,而是作为各种模型的统一接口层。
- LLM (大语言模型) :
- 支持 OpenAI, Hugging Face, Anthropic, Azure 等多种模型提供商。你可以轻松切换底座模型。
- Embeddings (嵌入模型) :
- 用于将文本转换为向量。同样支持 OpenAI, Hugging Face, Cohere 等多种提供商。
总结:数据流动流程
为了更好地理解这些概念,可以想象一个典型的 RAG 应用流程:
- Loading (加载) : 使用 Data Loaders 从 PDF/数据库加载数据,形成 Documents。
- Indexing (索引) : 将 Documents 切分为 Nodes ,使用 Embeddings 模型将其向量化,存入 Vector Store Index。
- Storing (存储): 将索引保存到磁盘或向量数据库(如 Chroma, Pinecone)。
- Querying (查询) :
- 用户发起提问。
- Chat Engine 或 Query Engine 接收问题。
- Retriever 在 Index 中查找相关的 Nodes。
- Response Synthesizer 将问题 + 相关 Nodes 发送给 LLM。
- LLM 生成最终答案返回给用户。