首次接触检索增强生成 (RAG) 领域?我们已为您准备了此深入指南。
如今,随着全世界都在向人工智能转型,大型语言模型 (LLM) 正成为大多数组织的支柱。虽然 LLM 都很好,而且由于各种积极的原因而成为一种趋势,但如果使用不当,它们也会带来一些缺点。是的,LLM 有时会产生意想不到的响应,它们可能是假的、编造的信息,甚至是有偏见的。现在,这种情况可能由于各种原因而发生。我们将 LLM 产生错误信息的过程称为幻觉。
有一些值得注意的方法可以缓解 LLM 幻觉,例如微调、快速工程、检索增强生成 (RAG) 等。检索增强生成 (RAG) 一直是缓解大型语言模型所面临的幻觉的最受关注的方法。今天,我们将了解 RAG 方法的所有内容,包括它是什么、它如何工作、它的组件以及从基础到高级的工作流程。
什么是 RAG
检索增强生成 (RAG) 是一种自然语言处理框架,它通过将外部数据检索与文本生成相结合来增强大型语言模型 (LLM)。它从外部来源/数据库/自定义来源检索相关信息,以提高响应准确性和相关性,缓解生成内容中的错误信息和过时知识等问题。因此,RAG 基本上通过提供/附加的数据源提供与上下文相关的响应来减少 LLM 幻觉。
RAG 组件
RAG 管道基本上涉及三个关键组件:检索组件、增强组件和生成组件。
- 检索:此组件可帮助您从外部知识库(如矢量数据库)获取任何给定用户查询的相关信息。此组件非常关键,因为这是整理有意义且符合上下文的响应的第一步。
- 增强:此部分涉及增强并为检索到的用户查询的响应添加更多相关上下文。
- 生成:最后,借助大型语言模型 (LLM) 将最终输出呈现给用户。LLM 使用其自身的知识和提供的上下文,对用户的查询做出恰当的响应。
检索增强生成的优势
RAG 具有一些令人难以置信的优势。让我分享一些值得注意的优势:
- 可扩展性。RAG 方法通过简单地更新或向外部数据库(矢量数据库)添加外部/自定义数据来帮助您处理比例模型。
- 内存效率。GPT 等传统模型在提取新鲜和更新的信息时存在限制,并且内存效率不高。RAG 利用外部数据库(如矢量数据库),使其能够在需要时快速提取新鲜、更新或详细的信息。
- 灵活性。通过更新或扩展外部知识源,您可以灵活地调整 RAG 来构建任何 AI 应用程序。
系统化 RAG 工作流程
RAG 由三个您需要了解的模块组成!
检索模块、增强模块和生成模块(如上所述)。
首先,将构成源数据库的文档分成多个块。然后使用 OpenAI 等嵌入模型或 Hugging Face 社区提供的开源模型将这些块转换为向量,再嵌入到高维向量数据库(例如 SingleStore Database、Chroma 和 LlamaIndex)中。
当用户输入查询时,系统会使用相同的嵌入模型将查询嵌入到向量中。然后,系统会根据某些相似性度量(例如余弦相似性)检索出向量与查询向量最接近的块。此过程包含在图中所示的检索模块中。之后,系统会在增强模块中将检索到的块增强到用户的查询和系统提示中。
此步骤对于确保检索到的文档中的记录与查询有效结合至关重要。然后,增强模块的输出被馈送到生成模块,该模块负责利用检索到的块和通过 LLM 的提示生成查询的准确答案(例如 OpenAI 的 chatGPT、hugging face 和 Google 的 Gemini)。
但为了使 RAG 完美运行,需要考虑以下一些关键点:
1.外部知识源的质量:用于检索的外部知识源的质量和相关性至关重要。
2.嵌入模型:从知识源检索相关文档或段落的嵌入模型的选择非常重要。
3.块大小和检索策略:尝试不同的块大小,以找到上下文检索的最佳长度。较大的块可能提供更多上下文,但也可能引入不相关的信息。较小的块可能侧重于特定细节,但可能缺乏更广泛的上下文。
4.与语言模型的集成:检索到的信息与语言模型生成过程的集成方式至关重要。可以使用交叉注意或记忆增强架构等技术将检索到的信息有效地合并到模型的输出中。
5.评估和微调:评估 RAG 模型在相关数据集和任务上的性能对于确定需要改进的领域非常重要。在特定领域或特定任务的数据上对 RAG 模型进行微调可以进一步提高其性能。
6.道德考虑:确保外部知识来源没有偏见,不包含冒犯性或误导性信息。
7.处理过时或不正确的信息:制定策略来处理检索到的信息过时或不正确的情况非常重要。
使用 SingleStore 数据库作为您的矢量存储,免费试用:https://bit.ly/SingleStoreDB
RAG 检索源
您知道RAG应用程序如何获取外部知识吗?
RAG 系统可以利用各种类型的检索源来获取外部知识。
最常见的数据类型包括:
⮕ 非结构化数据(文本):包括纯文本文档、网页和其他自由格式的文本源。
⮕ 半结构化数据(PDF):PDF 文档,例如研究论文、报告和手册,包含文本和结构信息。
⮕ 结构化数据(知识图谱):知识图谱,例如 Wikipedia 和 Freebase,以结构化和互连的格式表示信息。
⮕ LLM 生成的内容:最近的进展表明,LLM 本身可以生成可用作检索源的高质量内容。这种方法利用 LLM 参数中捕获的知识来生成相关信息。
所有这些数据都会转换为嵌入并存储在向量数据库中。当用户查询进入时,它也会转换为嵌入(查询嵌入),并使用语义搜索检索最相关的答案。向量数据库成为搜索上下文相关答案的知识库。
此外,还有一个需要考虑的方面是检索粒度。它指的是从来源检索知识的级别。
常见的检索粒度级别包括:
⮕ 短语级检索:这涉及检索与查询高度相关的短语或文本片段。短语级检索可以提供精确且有针对性的信息,但可能缺乏更广泛的背景。
⮕ 句子级检索:句子级检索侧重于检索包含相关信息的完整句子。它在特异性和上下文之间取得平衡,适用于广泛的任务。
⮕ 块级检索:块级检索涉及检索较大的文本块,例如段落或章节。它提供更全面的信息和背景,但可能会引入噪音和不相关的细节。
⮕ 文档级检索:文档级检索检索与查询相关的整个文档。虽然它提供了最广泛的上下文,但可能需要额外的处理才能提取最相关的信息。
了解有关 RAG 中知识检索的更多信息:https://ingestai.io/blog/knowledge-retrieval-in-rag
RAG 教程
让我们构建一个简单的 AI 应用程序,它可以从我们自己的数据中获取任何给定用户查询的上下文相关信息。
RAG 随时间的演变
让我们来谈谈 RAG 随着时间的推移而发生的演变。
1. 幼稚的 RAG:
Naive RAG 研究范式代表了最早的方法,在 ChatGPT 被广泛采用后不久就变得突出。Naive RAG 遵循传统的过程,包括索引、检索和生成。它也被称为“检索-阅读”框架 [Ma et al., 2023a]。
2. 高级 RAG:
Advanced RAG 经过了有针对性的增强,以解决 Naive RAG 的缺点。在检索质量方面,Advanced RAG 实施了预检索和后检索策略。为了解决 Naive RAG 遇到的索引挑战,Advanced RAG 使用滑动窗口、细粒度分段和元数据等技术改进了其索引方法。它还引入了各种方法来优化检索过程 [ILIN,2023 年]。
3.模块化RAG:
模块化 RAG 结构不同于传统的 Naive RAG 框架,具有更大的通用性和灵活性。它集成了各种方法来增强功能模块,例如合并用于相似性检索的搜索模块并在检索器中应用微调方法 [Lin et al., 2023]。
为解决特定问题,已经开发了重组 RAG 模块 [Yu et al., 2022] 和迭代方法(如 [Shao et al., 2023])。模块化 RAG 范式正日益成为 RAG 领域的常态,允许跨多个模块采用序列化管道或端到端训练方法。
这篇全面的评论论文详细研究了 RAG 范式的进展,涵盖了简单 RAG、高级 RAG 和模块化 RAG。
论文访问地址:https ://arxiv.org/abs/2312.10997
RAG 设计选择
让我们讨论一些有用的 RAG 设计选择列表。
RAG 基本上由五个主要部分/组件组成:
➟ 索引: 将外部数据嵌入到向量表示中。
➟ 存储:将索引嵌入保存在数据库中。
➟ 检索:在存储的数据中查找相关部分。
➟ 综合:生成用户查询的答案。
➟ 评估:量化 RAG 系统的优劣。
在设计索引步骤时,需要做出一些设计选择:
• 数据处理模式
• 索引模型
• 文本分割方法
• 分块超参数
最好的嵌入模型可能与一般最好的 LLM 不同。
在设计 RAG 管道的存储步骤时,最重要的两个决定是:
• 数据库选择
• 元数据选择
有时,由于当今有如此多的数据库,查找矢量数据库可能会非常令人困惑。SingleStore 数据库早在 2017 年就开始支持矢量存储。我强烈建议选择 SingleStore 作为所有 AI/ML 应用程序的矢量数据库。
[免费试用 SingleStore:https://bit.ly/SingleStoreDB ]
在设计检索步骤时,您需要考虑以下几点:
• 检索策略
• 检索超参数
• 查询转换
评估步骤中最重要的方面是:
• 评估协议
• 评估员提示
• 模型指南
在此原始指南中详细了解每个步骤和有用的注意事项:https://towardsdatascience.com/designing-rags-dbb9a7c1d729
RAG 中的分块策略
通过 RAG 提高 LLM 申请的效率非常棒。
但问题是,正确的分块策略应该是什么?
分块是将大文件分解为更易于管理的段/块的方法,以便 LLM 应用程序可以获得适当的上下文,并且可以轻松检索。
在 YouTube 上的一段视频中,Greg Kamradt 概述了不同的分块策略。让我们一一了解它们。
根据复杂性和有效性,它们被分为五个级别。
⮕级别 1:固定大小分块
这是最粗暴、最简单的文本分割方法。它将文本分解为指定字符数的块,而不考虑其内容或结构。Langchain 和 llamaindex 框架为这种分块技术提供了 CharacterTextSplitter 和 SentenceSplitter(默认按句子分割)类。
⮕第 2 级:递归分块
虽然固定大小分块更容易实现,但它不考虑文本的结构。递归分块提供了一种替代方案。在这种方法中,我们使用一组分隔符以分层和迭代的方式将文本分成较小的块。Langchain 框架提供了 RecursiveCharacterTextSplitter 类,它使用默认分隔符(“\n\n”、“\n”、“ “,””)拆分文本
⮕级别 3:基于文档的分块
在这种分块方法中,我们根据文档的固有结构对其进行拆分。这种方法考虑了内容的流程和结构,但对于缺乏清晰结构的文档可能不那么有效。
⮕第四级:语义分块
以上三个层次都处理文档的内容和结构,并且需要保持块大小的恒定值。此分块方法旨在从嵌入中提取语义含义,然后评估这些块之间的语义关系。核心思想是将语义相似的块放在一起。Llamindex 具有 SemanticSplitterNodeParse 类,允许使用块之间的上下文关系将文档拆分为块。
⮕等级 5: 主体组块
这种分块策略探索了使用 LLM 根据上下文确定一个块中应包含多少文本和包含哪些文本的可能性。
在本文中了解有关这些分块策略的更多信息。
使用 LangChain 的 RAG
LangChain 是一个针对 LLM 驱动应用程序的强大框架。
1. 它为链提供了标准接口,使开发人员能够创建超越单个 LLM 调用的调用序列。
2. Langchain 允许开发人员构建聊天机器人、生成问答系统、摘要工具等。
3. 它简化了使用 LLM 的流程,并提供了提示管理、记忆、索引和基于代理的决策工具。
4. Langchain 旨在实现数据感知和代理,将语言模型连接到其他数据源并允许它们与其环境进行交互。
让我们看看 RAG 如何使用 LangChain 工作。
1. 将文档转换为向量表示,通常称为嵌入。
2. 嵌入(矢量化文档)存储在矢量数据库中
3. 用户提出问题。
4. 一旦数据存储在数据库中,Langchain 便支持各种检索算法。这些包括基本语义搜索、父文档检索器、自查询检索器、集成检索器等。
5. 进行搜索时,检索系统根据每个文档与查询的相关性为其分配分数或排名。
6. 结果发送至法学硕士
7. 利用上下文表示,模型然后生成响应。
想要做一个实践教程吗?
以下是我使用 LangChain 实现 RAG 的指南:分步指南 — https://levelup.gitconnected.com/implementing-rag-using-langchain-and-singlestore-a-step-by-step-guide-2a579da1de0c
高级 RAG
让我们使用来自基本 RAG 解释的一些简单查询示例:“可再生能源的最新突破是什么?”,以更好地理解这些先进技术。
⮕预检索优化:在系统开始搜索之前,它会优化查询以获得更好的结果。对于我们的示例,查询转换和路由可能会将查询分解为子查询,例如“最新的可再生能源突破”和“可再生能源的新技术”。
这确保了搜索机制经过微调,可以检索到最准确、最相关的信息。
⮕增强的检索技术:在检索阶段,混合搜索结合了关键字和语义搜索,确保全面扫描与我们的查询相关的信息。此外,通过分块和矢量化,系统将大量文档分解为可消化的部分,然后进行矢量化。
这意味着我们的查询不只是提取一般信息,而是寻找讨论可再生能源最新创新的精确文本片段。
⮕检索后细化:检索后,重新排序和过滤过程会评估收集到的信息块。这些技术不是简单地使用前“k”个匹配项,而是严格评估每条检索到的数据的相关性。对于我们的查询,这可能意味着优先讨论突破性的太阳能电池板效率突破的片段,而不是更通用的太阳能更新。
此步骤可确保用于生成响应的信息直接回答有关可再生能源领域最相关和最新突破的查询。
在原文中了解更多信息:https://datasciencedojo.com/blog/rag-vs-finetuning-llm-debate/
在 RAG 中重新排名
传统的语义搜索由两部分过程组成。
首先,初始检索机制对文档集合进行粗略扫描并创建文档列表。
然后,重新排序机制将获取此候选文档列表并重新排序元素。借助 Rerank,我们可以根据某些参数重新组织结果来改进您的模型。
为什么需要重新排名?
⮕ 随着我们添加更多上下文,导致上下文窗口增加(上下文填充),LLM 的召回性能会下降
⮕ 重新排序背后的基本思想是将文档总数过滤为一个固定的数量。
⮕ 重新排序器将对记录进行重新排序,并将最相关的项目放在顶部,然后可以将它们发送到 LLM
⮕ 重新排序提供了一种解决方案,即找到那些可能不在前 3 个结果中的记录,并将它们放入一个较小的结果集中,以便进一步输入到 LLM 中
重新排序基本上提高了检索结果的相关性和准确性。
RAG 的嵌入模型类型
如何为您的 RAG 应用程序选择嵌入模型?
嵌入构成了在不同任务中实现精确且上下文相关的 LLM 输出的基础。
选择哪种编码器来生成嵌入是一个关键决定,对 RAG 系统的整体成功影响巨大。低质量的嵌入会导致检索效果不佳。
选择嵌入模型时,请考虑向量维度、平均检索性能和模型大小。
OpenAI、Cohere 和 Voyage 等公司不断发布增强的嵌入模型。
不同类型的嵌入旨在解决不同领域的独特挑战和要求。
⮕ 密集嵌入是连续的实值向量,用于表示高维空间中的信息。在 RAG 应用环境中,密集嵌入(例如由 OpenAI 的 Ada 或句子转换器等模型生成的嵌入)包含每个元素的非零值。
⮕ 而稀疏嵌入则表示大多数值为零,仅强调相关信息。在 RAG 应用中,稀疏向量对于具有许多稀有关键字或专业术语的场景至关重要。
⮕ 像 ColBERT 这样的多向量嵌入模型具有后期交互的特点,其中查询和文档表示之间的交互发生在过程的后期,在两者都已被独立编码之后。
⮕ 长文档始终是嵌入模型面临的特殊挑战。最大序列长度的限制通常源于 BERT 等架构,这导致从业者将文档分割成更小的块。不幸的是,这种分割可能会导致语义碎片化和整个段落的错误表达。
⮕ 可变维度嵌入是建立在 Matryoshka 表示学习 (MRL) 基础上的独特概念。MRL 学习嵌套在原始嵌入中的低维嵌入,类似于一系列 Matryoshka 娃娃。
⮕ 代码嵌入是最近的一项发展,用于将 AI 功能集成到集成开发环境 (IDE) 中,从根本上改变了开发人员与代码库交互的方式。
选择嵌入模型时需要考虑几个因素。
在本文中了解有关嵌入和模型的更多信息:https://www.rungalileo.io/blog/mastering-rag-how-to-select-an-embedding-model
无论您使用哪种嵌入模型,拥有一个强大的数据库对于您的 RAG 应用程序来说都是必须的。
使用 SingleStore 作为矢量数据库来构建您的 AI/ML 应用。免费注册和使用:https://bit.ly/SingleStoreDB
RAG 应用中语义分块
RAG 应用程序中的分块涉及将大量数据分解为更小、更易于管理的段或“块”。此过程使模型能够处理更精确、更相关的数据部分,从而提高信息检索的效率和准确性。
在 RAG 系统中,当进行查询时,模型会搜索这些块以找到最相关的信息,而不是浏览整个文档。
这不仅加快了检索过程,而且通过关注最相关的信息还提高了生成的响应的质量。
分块在文档很长或包含不同主题的情况下特别有用,因为它可以确保检索到的数据在上下文上是适当且准确的。
简单的分块策略仅限于将文本分成固定数量的单词或字符的块,并且并不总是有效。
语义分块是一种专注于提取和保留文本片段中语义含义的方法。通过利用嵌入来捕获底层语义,此方法评估不同块之间的关系,以确保将相似的内容保持在一起。
通过关注文本的含义和上下文,语义分块显著提高了检索质量。它非常适合维护语义完整性,确保信息检索连贯且相关。
让我们在我的教程中看看语义分块如何比你的天真分块策略更好:https://levelup.gitconnected.com/semantic-chunking-for-enhanced-rag-applications-b6bc92942af0
RAG 中的检索痛点
RAG 的方法可能并不像您想象的那么简单。
有效检索很困难,您可能会在这个重要阶段遇到几个问题。
以下是检索阶段的一些常见痛点和可能的解决方案。
⮕ 挑战:检索到的数据不属于上下文,造成这种情况的原因可能有多种。
➤ 错过排名靠前的文档:系统有时不会将包含答案的重要文档包含在系统检索组件返回的排名靠前的结果中。
➤ 不正确的具体性:响应可能无法提供准确的信息,或无法充分解决用户查询的具体上下文
➤ 重新排名期间丢失相关上下文:当从数据库检索到包含答案的文档但未能将其放入生成答案的上下文中时,就会发生这种情况。
⮕ 建议的解决方案:
➤ 查询增强:查询增强使 RAG 能够通过使用其他上下文详细信息增强用户查询或修改查询以最大化相关性来检索上下文中的信息。这包括改进措辞、添加公司特定的上下文以及生成有助于情境化和生成准确响应的子问题
– 重新表述
– 假设文档嵌入
– 子查询
➤ 调整检索策略:Llama Index 提供了一系列从基础到高级的检索策略,以确保在 RAG 管道中进行准确检索。通过探索这些策略,开发人员可以提高系统将相关信息纳入上下文以生成准确响应的能力。
– 从小到大的句子窗口检索,
– 递归检索
– 语义相似度评分。
➤ 块大小和相似度_top_k 的超参数调整:此解决方案涉及调整 RAG 模型中检索过程的参数。更具体地说,我们可以调整与块大小和相似度_top_k 相关的参数。
chunk_size 参数决定用于检索的文本块的大小,而 similarity_top_k 控制检索到的相似块的数量。
通过尝试这些参数的不同值,开发人员可以找到计算效率和检索信息质量之间的最佳平衡。
➤ 重新排序:事实证明,在将检索结果发送到语言模型之前对其进行重新排序可以显著提高 RAG 系统的性能。
可以通过将重新排序器作为后处理器纳入 RAG 管道来实现此重新排序过程。
详细了解其他痛点和可能的解决方案:https://datasciencedojo.com/blog/rag-challenges-in-llm-applications/
RAG 增强技术
构建 RAG 应用程序的道路并不顺利。
您需要了解一些技术来克服在构建 LLM 支持的应用程序时 RAG 给您带来的不同挑战。
1.从单一查询到多查询的转换:
多查询是检索查询转换阶段的一种高级方法。与仅使用一个查询的传统方法不同,多查询会生成多个查询并为每个查询检索类似的文档。构建者使用多查询主要有两个原因:增强次优查询和扩展结果集。它通过填补空白来解决用户不完善的查询,并检索更多样化的结果,从而产生一个扩展的结果集,可以提供比单查询文档更好的答案。
2.提高索引数据质量:
不幸的是,在开发 RAG 的过程中,数据清理经常被忽视,人们倾向于在不验证质量的情况下摄取所有可用文档。我们需要确保输入 RAG 系统的数据具有高质量,才能获得准确的答案。“垃圾进,垃圾出”的原则在这里尤其重要。
3. 分块策略和大小对于优化索引结构很重要:
在设置检索增强生成 (RAG) 系统时,块的大小和分块技术起着至关重要的作用。它决定了从文档存储中检索多少信息进行处理。选择较小的块大小可能会导致丢失重要细节,而选择较大的块大小可能会引入不相关的信息。
4. 将元数据与索引向量合并:
在向量数据库中的索引向量旁边添加元数据对于组织和增强搜索相关性具有显著的好处。
5.通过基于问题的索引提高搜索相关性:
LLM 和 RAG 提供了令人难以置信的强大功能,允许用户以自然语言表达查询,从而简化数据探索和复杂任务。然而,当简洁的查询、用户输入与系统中存储的更长、更详细的文档之间存在脱节时,就会出现一个常见的挑战。
6. 通过混合检索提高搜索精度——混合搜索
虽然向量搜索擅长检索与查询语义相关的块,但有时在匹配特定关键字时不够精确。为了兼顾两者的优势(向量搜索 + 全文搜索),您需要混合搜索。
无论您选择哪种 RAG 技术,您始终需要一个强大的数据库来存储您的矢量数据,请确保使用 SingleStore 作为您的矢量数据库。
免费试用 SingleStore 数据库:https://bit.ly/SingleStoreDB
RAG 最佳实践
每个 AI/ML/数据工程师都应该知道的 RAG 最佳实践。
根据您的用例,需求会发生变化。无论是选择智能模型、分块策略、嵌入方法和模型、矢量数据库、评估技术、AI 框架等
为了使 RAG 完美运行,需要考虑以下一些关键点:
1. 外部知识源的质量
2. 数据索引优化:使用滑动窗口进行文本分块和有效利用元数据等技术来创建更易于搜索和更有条理的索引。
3. 查询增强:使用同义词或更广泛的术语修改或扩展初始用户查询,以改进相关文档的检索。
4. 嵌入模型:选择用于检索相关文档的嵌入模型。
5. 块大小和检索策略:尝试不同的块大小来找到上下文检索的最佳长度。
6. 与语言模型的集成:检索到的信息与语言模型的生成过程的集成方式至关重要。
7. 评估和微调:评估 RAG 模型在相关数据集和任务上的性能对于确定需要改进的领域非常重要。
8. 道德考虑:确保外部知识来源不带偏见,不包含冒犯性或误导性信息。
9. 矢量数据库:拥有一个支持快速提取、检索性能、混合搜索的矢量数据库至关重要。
10. 响应总结:在最终生成响应之前,浓缩检索到的文本以提供简洁且相关的总结。
11. 重新排序和过滤:根据相关性调整检索到的文档的顺序,并过滤掉不太相关的结果以优化最终输出。
12. LLM 模型:考虑足够强大且快速的 LLM 模型来构建您的 RAG 应用程序。
13. 混合搜索:将传统的基于关键字的搜索与使用嵌入向量的语义搜索相结合,以处理各种查询复杂性。
无论您选择哪种 RAG 技术,您总是需要一个强大的矢量数据库来存储您的矢量数据,请确保使用 SingleStore 作为您的矢量数据库。
免费试用 SingleStore 数据库:https://bit.ly/SingleStoreDB
图片来源:https://arxiv.org/pdf/2407.01219
语义缓存可改善 RAG
对于当今的 AI/ML 应用来说,快速检索是 RAG 中的必备功能。
延迟和计算成本是将这些应用程序部署到生产中时面临的两个主要挑战。
虽然 RAG 在一定程度上增强了这种能力,但必须在两者之间集成一个语义缓存层,该层将存储各种用户查询,并决定是否从向量数据库或缓存中生成富含信息的提示。
语义缓存系统旨在识别相似或相同的用户请求。当找到匹配的请求时,系统会从缓存中检索相应信息,从而减少从原始源获取信息的需要。
有许多解决方案可以帮助您进行语义缓存,但我建议使用 SingleStore 数据库。
为什么要使用SingleStore Database作为语义缓存层?
SingleStoreDB 是一个实时分布式数据库,旨在实现快速查询,其架构支持事务和分析工作负载的混合模型。
这与生成式 AI 用例完美匹配,因为它允许读取或写入训练和实时任务的数据 – 而不会为同一任务增加复杂性和来自多个产品的数据移动。
SingleStoreDB 还具有内置的计划缓存,以加快使用相同计划的后续查询。
了解有关使用 SingleStore 进行语义缓存的更多信息。
改进 RAG 管道
基本 RAG 在处理诸如总结、比较和多部分问题等复杂任务方面存在局限性。它主要用于处理小型数据集上的简单问题,但难以处理更复杂的查询。
有两种方法可以改进您的 RAG 管道。
1. 改善你的数据
2. 改进查询
您可以使用诸如 LlamaIndex 及其工具包之类的框架来改进两者。
如果您是 LlamaIndex 的新手,它是一个使用 Python 和 TypeScript 编写的框架,用于在各种数据源上构建支持 LLM 的应用程序。他们提供开源工具和付费服务 Llama Cloud,用于构建和扩展数据检索系统。
您可以使用 LlamaParse 改进数据。LlamaParse 是由 LlamaIndex 创建的 API,用于高效解析和表示文件,以便使用 LlamaIndex 框架进行高效检索和上下文增强。
您可以使用像 SingleStore 数据库这样的向量数据库来存储向量嵌入。
[免费试用 SingleStore:https://bit.ly/SingleStoreDB ]
您可以通过 LlamaHub 提高数据质量。LlamaHub :llama: 这是社区创建的所有数据加载器/读取器的简单库。目标是让大型语言模型与各种知识源的连接变得极其简单。它包括数据加载器、工具、矢量数据库、LLM 等。
接下来是代理 RAG。
代理可以通过结合多轮交互、查询理解、工具使用、反射和记忆来增强 RAG,从而解决单纯 RAG 管道的局限性。
Agentic RAG 允许 AI 系统进行迭代推理——理解完整的背景,通过来回对话收集缺失信息,根据需要调用外部数据源和 API,并以细致入微和量身定制的方式将解决核心问题的多部分解决方案拼接在一起。
这种迭代推理能力对于企业处理跨领域的复杂用例至关重要。这就是为什么许多企业采用代理 RAG 而不是僵化的常规 RAG。
Agentic RAG 的组件:
⮕ 路由:使用 LLM 选择最佳查询工具。
⮕ 记忆:保留查询历史,为未来的查询提供背景。
⮕ 查询计划:将复杂的问题分解为简单的问题并汇总答案。
RAG 性能指标
了解 RAG 性能的一些关键维度和指标。
RAG(检索增强生成)性能的关键维度侧重于检索和生成两个方面。
检索指标包括上下文召回率、准确率和相关性,确保检索到的信息与查询准确匹配。
生成指标强调生成文本的真实性、相关性和流畅性。
准确度、余弦相似度、NDCG、BLEU 和 F1 分数等关键指标评估整体正确性、相关性和质量。
延迟、用户满意度和冗余度等操作指标解决了实际的性能问题。
这些指标共同为评估 RAG 系统的有效性和可靠性提供了一个全面的框架。
此外,无论您认为什么最重要,拥有一个强大的数据平台以实现快速的数据提取和检索都是最重要的。一个可以帮助您处理所有类型数据(而不仅仅是矢量数据)的数据平台。
SingleStore 就是这样一个数据平台,它可以用作矢量数据库,也可以用于任何实时 AI 应用程序。
RAG 方法
RAG 不再仅仅涉及检索 – 它还涉及智能、自我提升的智力!
当 RAG 首次推出时,我们都非常兴奋。我们仍然很兴奋,这永远不会结束。我的意思是,RAG 至少在一年后仍将保持相关性(仅代表我个人观点)。
因此,RAG 于 2020 年由 Meta AI 研究人员通过他们的论文《知识密集型 NLP 任务的检索增强生成》首次提出,以解决这类知识密集型任务。
我们看到从简单到高级的 RAG 聊天机器人数量激增,现在这些聊天机器人已被 AI 代理接管:)
随着时间的推移,RAG 不断演变。一切始于一种简单朴素的方法来检索与上下文相关的响应/信息,然后发展成为我们今天所说的纠正性 RAG。
标准 RAG 通过检索和将相关文档纳入生成过程来提高响应准确性,而自我反射 RAG 通过让模型评估其自身的输出、将检索到的文档标记为相关或不相关并相应地调整其响应来改进这一点。
校正 RAG 更进一步,使用外部模型将检索到的文档分类为正确、模糊或不正确,并允许生成模型根据此分类校正其答案。
总体而言,这些方法代表着生成可靠响应的精细度和准确性水平不断提高。
RAG 万岁!
高级 RAG 技术
构建一个简单的 RAG 管道很容易。但是,这不会产生任何结果。
您的 AI 应用程序需要一些先进的 RAG 技术。
以下是 RAG 管道的增强点列表。
⮕ 数据索引优化:使用滑动窗口进行文本分块和有效利用元数据等技术来创建更易于搜索和更有条理的索引。
⮕ 查询增强:使用同义词或更广泛的术语修改或扩展初始用户查询,以改进相关文档的检索。
⮕ 混合搜索:将传统的基于关键字的搜索与使用嵌入向量的语义搜索相结合,以处理各种查询复杂性。
⮕ 微调嵌入模型:调整预训练模型以更好地理解特定领域的细微差别,提高检索到的文档的准确性和相关性。
⮕ 响应摘要:在最终生成响应之前,浓缩检索到的文本以提供简洁且相关的摘要。
⮕ 重新排序和过滤:根据相关性调整检索到的文档的顺序,并过滤掉不太相关的结果以优化最终输出。
采用一个可以进行混合搜索、与AI框架有很好集成、可以帮助您快速摄取和向量存储的强大数据库非常重要。
这时 SingleStore 数据库就派上用场了。注册并免费使用:https://bit.ly/SingleStoreDB
Necati Demir 有关高级 RAG 技术的完整文章在此处:https://blog.demir.io/advanced-rag-implementing-advanced-techniques-to-enhance-retrieval-augmented-generation-systems-0e07301e46f4
Agentic RAG 使用 CrewAI 和 LangChain
在快速发展的人工智能领域,Agentic RAG 已成为一种改变信息检索和生成游戏规则的方法。这种先进的技术将检索增强生成 (RAG) 的强大功能与自主代理相结合,提供了一种更具动态性和情境感知的方法来处理和生成信息。
随着企业和研究人员寻求增强其 AI 能力,了解和实施 Agentic RAG 对于在竞争中保持领先地位至关重要。
本指南深入探讨了使用两个强大的工具掌握 Agentic RAG 的复杂性:LangChain 和 CrewAI。它探讨了从传统 RAG 到其代理 RAG 的演变,强调了主要区别和优势。本文还探讨了 LangChain 如何作为实施 Agentic RAG 的基础,并展示了如何利用 CrewAI 来创建更复杂、更高效的 AI 系统。
与不同矢量数据库的实时 RAG 比较
现场 RAG 对比测试!让我们看看谁赢了 :trophy:
Pinecone 与 Mongo 与 Postgres 与 SingleStore。
但首先,让我们看看大多数人是如何实施 RAG 的。
请参见下图的第一部分,一方面,您有 OLTP 系统,有 OLAP 系统,现在因为您正在对数据进行矢量化,所以您有矢量系统。
因此,这三者结合起来将为您的 LLM 提供完整的背景信息。
让我们看看他们是如何做到的 – 因此在左侧,您有最终用户提出查询,该查询将被矢量化,并且该查询向量将被发送到向量数据库,并且通过向量搜索您将收到前 k 个结果。
这些结果以及相关元数据将从您的 OLAP 和 OLTP 系统中检索。然后根据用户查询添加更多过滤器,并将其作为提示发送给 LLM,然后 LLM 回答用户的问题/查询。
现在所有这些都需要一个相当复杂的架构。
我们还有哪些选择?
⮕ 纯矢量数据库 — Pinecone、Chroma、Weaviate、Milvius 等
⮕ 支持矢量的 NoSQL — MongoDB、Redis、Cassandra 等
⮕ 支持矢量的 SQL — SingleStore、ROCKET、PostgreSQL、ClickHouse 等
但是让我们也了解一下您的数据库如何影响您的 Gen AI 应用程序?
你需要什么?
– 您需要可靠的存储
– 高效分析
– 数据一致性
– 矢量能力
– 可扩展性
– 并发
SingleStore 的构建充分考虑了上述所有因素。让我们看看如何实现的。
使用 SingleStore,您将所有交易数据、分析数据和矢量数据都集中存放在一个源中。因此,现在当最终用户提出查询时,GenAI 应用会将该查询矢量化,在单个查询中,您可以执行矢量搜索、全文搜索或任何其他类型的分析过滤器,响应时间只需几毫秒。
您可以将所有这些作为上下文发送到 LLM,而无需将响应拼接在一起。顺便说一句,SingleStore 早在 2017 年就开始支持向量。混合搜索功能为您的 GenAI 应用程序增加了额外的优势。
您是否想要一份实际操作和循序渐进的指南来了解 SingleStore 如何比其他产品表现更好?
使用 LlamaIndex 进行 RAG 设置评估
您的 RAG 设置有多稳健?让我们来评估一下:point_down:
让我们使用 LlamaIndex 进行评估:https://youtu.be/MP6hHpy213o
在本视频中,我们将深入探讨 RAG 评估的概念。我们将评估检索增强生成 (RAG) 工作流程的稳健性,重点关注生成的响应的准确性。
我们将首先了解 RAG 中评估的重要性,并了解涉及不同阶段的简单 RAG 工作流程。然后,我们将了解每个阶段发生的情况以及评估步骤如何发挥作用。
以下是带有教程的分步视频:https://youtu.be/MP6hHpy213o
生产就绪的 RAG 管道
Vectorize可帮助您更快、更轻松地构建 AI 应用。它可以自动提取数据,使用 RAG 评估找到最佳矢量化策略,并让您快速为非结构化数据部署实时 RAG 管道。您的矢量搜索索引保持最新,并与您现有的矢量数据库集成,因此您可以完全控制数据。Vectorize 可处理繁重的工作,让您可以专注于构建强大的 AI 解决方案,而不会陷入数据管理的泥潭。
使用 Llama 3.1 模型的 RAG
让我们使用 Meta 的新 Llama 3.1 模型来设置 RAG。
完整设置视频:https://youtu.be/aJ6KNsamdZw
Meta 最近发布了他们的新系列高级模型 — Llama 3.1
它有三种大小:8B、70B 和 405B 参数。Meta AI 的测试表明,Llama 3 70B 在大多数基准测试中都胜过 Gemini 和 Claude。
这是 Meta 有史以来最大的开源 AI 模型,该公司声称,它在某些基准测试中的表现优于 OpenAI 的 GPT-4o 和 Anthropic 的 Claude 3.5 Sonnet 等。
我正在使用 Fireworks AI 的 Llama 3.1 405B Instruct 模型。
您可以从这里访问不同的模型:https://fireworks.ai/models
更多详情请看视频。请参考我的视频:https://youtu.be/aJ6KNsamdZw
如果您是我的视频新粉丝,请订阅:)
验证 RAG 响应的正确性
我们如何验证 RAG 响应的正确性?
我关于评估 RAG 工作流程的完整视频:https://youtu.be/MP6hHpy213o
附件是我的视频的一小段剪辑,其中介绍了 RAG 工作流程中涉及的不同步骤。
RAG 评估很重要,因为它有助于确保我们的 RAG 系统的有效性。基本上,它确保 RAG 管道生成一致的响应并满足最终用户的需求。
具有知识图谱的 RAG
KnowledgeGraphs 如何增强我们的 RAG 应用程序?
有了知识图谱后,您就可以使用它来执行检索增强生成 (RAG)。您甚至可以在没有向量或向量嵌入的情况下执行 RAG。这种使用知识图谱的方法非常适合处理有关聚合和多跳关系等问题。
在视频中,我展示了一个教程,介绍如何构建一个简单的知识图谱,将其存储在数据库中,并检索任何给定用户查询的实体关系。同样的操作可以扩展到您的 RAG 应用程序,以检索增强的结果/响应。
矢量 RAG 与图形 RAG
哪种 RAG 更优越:Graph RAG 还是 Vector RAG?
RAG 可以使用支持向量和语义搜索的数据库或知识图谱来实现,每种方法都为信息检索和响应生成提供了独特的优势和方法。这两种方法的目标都是一样的,即检索用户查询的上下文相关数据/信息。
使用向量数据库的 RAG 涉及将输入查询转换为向量表示/嵌入,并执行向量搜索以根据语义相似性检索相关数据。检索到的文档经过 LLM 生成响应。这种方法对于处理大规模非结构化数据非常有效,并且在数据点之间的关系未明确定义的环境中表现出色。
相比之下,具有知识图谱的 RAG 使用图谱中的结构化关系和实体来检索相关信息。输入查询用于在知识图谱中执行搜索,提取相关实体及其关系。
然后利用这些结构化数据生成响应。知识图谱对于需要深入了解数据点之间互连的应用程序特别有用,使其成为实体之间关系至关重要的领域的理想选择。
您不需要专门的数据库或类似的东西来执行图形 RAG 或矢量 RAG。
嗯,这两种方法都可以使用 SingleStore,您可以将其用作矢量数据库,也可以用于构建和存储图形 RAG 的知识图。
概括
目前,RAG 还没有标准路径可循。一切都取决于反复试验,确保哪种方法最适合您的用例。但了解这些高级 RAG 技术对于任何从事 RAG 管道工作的 AI/ML/数据工程师来说都非常有用。
RA/SD 衍生者AI训练营。发布者:chris,转载请注明出处:https://www.shxcj.com/archives/5891