J'Blog

8 课 · LlamaIndex

语义检索

基于 Chroma 向量库,与 Workspace 知识库分离。用自然语言描述你想查的内容。 非管理员每人每天可检索 5 次(消耗站点 AI 配额)。

LlamaIndex RAG 简介

原文:LlamaIndex RAG 简介

一句话

RAG(检索增强生成)通过将您的数据添加到 LLM 已有的数据中,解决 LLM 未训练在您的数据上的问题,通过检索相关上下文并生成响应来增强 LLM 的能力。

什么时候翻这页

当您需要了解如何在 LlamaIndex 框架中实现 RAG 系统,或者当您构建聊天机器人、代理或其他需要检索外部数据的应用程序时,可以查阅此页面。

核心概念

RAG 包含五个关键阶段:

  1. Loading(加载):从各种数据源(文本文件、PDF、网站、数据库、API 等)获取数据到工作流中。LlamaHub 提供了数百个连接器可供选择。

  2. Indexing(索引):创建允许查询数据的数据结构。对于 LLM,这通常意味着创建 vector embeddings(数据意义的数值表示)以及其他元数据策略,以便轻松找到上下文相关的数据。

  3. Storing(存储):将索引和元数据存储起来,避免需要重新索引。

  4. Querying(查询):利用 LLM 和 LlamaIndex 数据结构进行查询,包括子查询、多步查询和混合策略。

  5. Evaluation(评估):检查流程相对于其他策略的有效性,或在您进行更改时评估效果。评估提供对查询响应的准确性、忠实度和速度的客观度量。

重要概念:

  • Nodes and Documents(节点和文档)Document 是任何数据源的容器(如 PDF、API 输出或从数据库检索的数据)。Node 是 LlamaIndex 中的数据原子单元,代表源 Document 的一个 "chunk"(块)。节点包含与它们所属文档和其他节点相关的元数据。

  • Connectors(连接器):数据连接器(通常称为 Reader)从不同的数据源和数据格式中摄取数据,并将其转换为 DocumentsNodes

  • Indexes(索引):将数据索引到易于检索的结构中,通常涉及生成存储在称为 vector store 的专门数据库中的 vector embeddings。索引还可以存储关于数据的各种元数据。

  • Embeddings(嵌入):LLM 生成数据的数值表示称为 embeddings。当为相关性过滤数据时,LlamaIndex 会将查询转换为嵌入,而您的 vector store 会找到与查询嵌入数值相似的数据。

  • Retrievers(检索器):检索器定义了在给定查询时如何从索引中高效检索相关上下文。检索策略对于检索数据的相关性和效率至关重要。

  • Routers(路由器):路由器确定使用哪个检索器从知识库中检索相关上下文。更具体地说,RouterRetriever 类负责选择一个或多个候选检索器来执行查询。它们使用选择器根据每个候选者的元数据和查询选择最佳选项。

  • Node Postprocessors(节点后处理器):节点后处理器接收一组检索到的节点,并应用转换、过滤或重新排序逻辑。

  • Response Synthesizers(响应合成器):响应合成器使用用户查询和一组检索到的文本块从 LLM 生成响应。

怎么做

实现 RAG 的基本步骤:

  1. 加载数据:使用适当的连接器从数据源加载数据,创建 Documents 和 Nodes。

  2. 创建索引:生成数据的 vector embeddings 并存储在 vector store 中,同时保留相关元数据。

  3. 存储索引:将创建的索引和元数据持久化存储,以便将来使用。

  4. 查询处理

    • 使用检索器从索引中检索相关上下文
    • 应用节点后处理器对检索结果进行过滤或重新排序
    • 使用响应合成器基于查询和检索到的上下文生成响应
  5. 评估效果:评估 RAG 系统的准确性、忠实度和速度,并根据需要进行优化。

命令 / API 速查

  • Document:LlamaIndex 中的数据容器
  • Node:LlamaIndex 中的数据原子单元,代表源 Document 的一个 chunk
  • Reader:数据连接器,用于从不同数据源摄取数据
  • 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 系统。

初学者易错点

  1. 忽视数据预处理:直接将原始数据用于索引,而没有进行适当的清洗和分块处理,导致检索效果不佳。

  2. 过度依赖单一检索策略:只使用一种检索方法,而没有考虑混合策略或根据不同场景调整检索策略。

  3. 忽略元数据的重要性:没有充分利用元数据来增强检索的准确性和上下文相关性。

  4. 评估不足:没有建立有效的评估机制来衡量 RAG 系统的性能,导致无法持续改进。

  5. 混淆 Document 和 Node 的概念:不理解 Node 是 Document 的分块,导致数据处理不当。

相关词条

  • Document
  • Node
  • Chunk
  • Vector Store
  • Embedding
  • Retriever
  • Router
  • Postprocessor
  • Response Synthesizer
  • LlamaHub
  • LangChain RAG
  • Chroma
  • LangGraph RAG
  • LangSmith 评估

官方原文:https://developers.llamaindex.ai/python/framework/understanding/rag/index