LlamaIndex RAG 简介
一句话
RAG(检索增强生成)通过将您的数据添加到 LLM 已有的数据中,解决 LLM 未训练在您的数据上的问题,通过检索相关上下文并生成响应来增强 LLM 的能力。
什么时候翻这页
当您需要了解如何在 LlamaIndex 框架中实现 RAG 系统,或者当您构建聊天机器人、代理或其他需要检索外部数据的应用程序时,可以查阅此页面。
核心概念
RAG 包含五个关键阶段:
-
Loading(加载):从各种数据源(文本文件、PDF、网站、数据库、API 等)获取数据到工作流中。LlamaHub 提供了数百个连接器可供选择。
-
Indexing(索引):创建允许查询数据的数据结构。对于 LLM,这通常意味着创建
vector embeddings(数据意义的数值表示)以及其他元数据策略,以便轻松找到上下文相关的数据。 -
Storing(存储):将索引和元数据存储起来,避免需要重新索引。
-
Querying(查询):利用 LLM 和 LlamaIndex 数据结构进行查询,包括子查询、多步查询和混合策略。
-
Evaluation(评估):检查流程相对于其他策略的有效性,或在您进行更改时评估效果。评估提供对查询响应的准确性、忠实度和速度的客观度量。
重要概念:
-
Nodes and Documents(节点和文档):
Document是任何数据源的容器(如 PDF、API 输出或从数据库检索的数据)。Node是 LlamaIndex 中的数据原子单元,代表源Document的一个 "chunk"(块)。节点包含与它们所属文档和其他节点相关的元数据。 -
Connectors(连接器):数据连接器(通常称为
Reader)从不同的数据源和数据格式中摄取数据,并将其转换为Documents和Nodes。 -
Indexes(索引):将数据索引到易于检索的结构中,通常涉及生成存储在称为
vector store的专门数据库中的vector embeddings。索引还可以存储关于数据的各种元数据。 -
Embeddings(嵌入):LLM 生成数据的数值表示称为
embeddings。当为相关性过滤数据时,LlamaIndex 会将查询转换为嵌入,而您的 vector store 会找到与查询嵌入数值相似的数据。 -
Retrievers(检索器):检索器定义了在给定查询时如何从索引中高效检索相关上下文。检索策略对于检索数据的相关性和效率至关重要。
-
Routers(路由器):路由器确定使用哪个检索器从知识库中检索相关上下文。更具体地说,
RouterRetriever类负责选择一个或多个候选检索器来执行查询。它们使用选择器根据每个候选者的元数据和查询选择最佳选项。 -
Node Postprocessors(节点后处理器):节点后处理器接收一组检索到的节点,并应用转换、过滤或重新排序逻辑。
-
Response Synthesizers(响应合成器):响应合成器使用用户查询和一组检索到的文本块从 LLM 生成响应。
怎么做
实现 RAG 的基本步骤:
-
加载数据:使用适当的连接器从数据源加载数据,创建 Documents 和 Nodes。
-
创建索引:生成数据的 vector embeddings 并存储在 vector store 中,同时保留相关元数据。
-
存储索引:将创建的索引和元数据持久化存储,以便将来使用。
-
查询处理:
- 使用检索器从索引中检索相关上下文
- 应用节点后处理器对检索结果进行过滤或重新排序
- 使用响应合成器基于查询和检索到的上下文生成响应
-
评估效果:评估 RAG 系统的准确性、忠实度和速度,并根据需要进行优化。
命令 / API 速查
Document:LlamaIndex 中的数据容器Node:LlamaIndex 中的数据原子单元,代表源 Document 的一个 chunkReader:数据连接器,用于从不同数据源摄取数据vector embeddings:数据意义的数值表示vector store:专门用于存储 vector embeddings 的数据库Retriever:定义如何从索引中检索相关上下文RouterRetriever:负责选择一个或多个候选检索器来执行查询Node Postprocessor:对检索到的节点应用转换、过滤或重新排序逻辑Response Synthesizer:使用用户查询和检索到的文本块生成响应
与 Hello-Agents / LangGraph / 本博客 handbook 索引的联系
本页面介绍的 RAG 概念与 Hello-Agents 记忆与检索章节、LangGraph 的检索增强生成功能以及本博客 handbook 中已用 Chroma 索引的内容密切相关。特别是,vector store、embedding 和 retriever 等概念在多个框架中都有应用,但实现方式可能有所不同。在 LangGraph 中,这些概念通常用于构建能够检索外部知识的智能代理,而在本博客 handbook 中,我们已使用 Chroma 作为 vector store 来实现 RAG 系统。
初学者易错点
-
忽视数据预处理:直接将原始数据用于索引,而没有进行适当的清洗和分块处理,导致检索效果不佳。
-
过度依赖单一检索策略:只使用一种检索方法,而没有考虑混合策略或根据不同场景调整检索策略。
-
忽略元数据的重要性:没有充分利用元数据来增强检索的准确性和上下文相关性。
-
评估不足:没有建立有效的评估机制来衡量 RAG 系统的性能,导致无法持续改进。
-
混淆 Document 和 Node 的概念:不理解 Node 是 Document 的分块,导致数据处理不当。
相关词条
- Document
- Node
- Chunk
- Vector Store
- Embedding
- Retriever
- Router
- Postprocessor
- Response Synthesizer
- LlamaHub
- LangChain RAG
- Chroma
- LangGraph RAG
- LangSmith 评估