最近在探索 GitHub 的时候,我发现了一个提供各种 RAG 系统深度概述的仓库。对于希望开发生产级 RAG 系统的人来说,这是一个非常好的资源。它允许用户尝试不同的技术,并评估哪些技术最适合他们的特定数据集。在本文中,我将带您了解这些不同的 RAG 技术,并讨论每种技术的优缺点,以便您了解哪种技术最适合您的应用场景。详情请见这里 here。
GitHub - athina-ai/rag-cookbooks: 为LLM开发者的烹饪手册。通过在GitHub上创建账户来为athina-ai/rag-cookbooks的发展贡献自己的力量。大型语言模型是基于固定的数据集进行训练的,这限制了它们处理私人或近期信息的能力。它们有时会“胡说”,提供虽然看似可信但实际上错误的答案。微调虽然可以有所帮助,但成本高昂,不适合频繁在新数据上重新训练。Retrieval-Augmented Generation (RAG) 框架通过使用外部文档来增强大型语言模型的回答,从而解决了这一问题,确保大型语言模型提供的信息不仅上下文相关,而且准确且最新。
RAG主要有四个部分:
这些RAG组件允许模型访问最新且准确的信息,从而根据外部知识生成回复。
不同RAG类型:流程图和代码
简单的RAG是基础的检索增强生成技术。它通过将用户的查询与文档数据库中的语义相似度进行匹配来工作。当接收到查询时,系统会找到语义上最相关的文档并将其用作生成响应的上下文。虽然简单直接,这种方法可能受限于其简单性——可能会忽略细微关联或难以应对需要更深入了解的复杂查询。你可以在这里的Github仓库中找到代码。
好处:
不足:
混合RAG通过克服单一方法的限制,结合多种检索手段来解决问题。它通常将向量搜索(语义相近)与传统的基于关键字的检索(如BM25之类的)结合起来。这种方法使系统能够捕捉查询的深层含义及其精确的关键字匹配。通过使用多种搜索策略,混合RAG可以检索到更全面和更准确的文档,为响应生成提供更坚实的支持。
好处:
缺点:
Hyde RAG 提供了一种创新的文档检索方式。与其直接查找现有文档,它首先创建一个可能回答查询的假设文档。然后,利用这个假设文档生成嵌入向量,以帮助找到真正相关的真实文档。这就像先画出可能答案的草图,以帮助找到最相关的资料。这种方法对于复杂或抽象的查询特别有效,传统搜索方法可能就束手无策了。
好处:
缺点:一些需要注意的地方:
这种方法通过将大型文档拆分成更小、更易管理的片段来解决文档检索中的一个常见问题。在搜索时,系统首先检索相关的小片段。如果某个片段看起来很有希望,它会检索整个文档。这种方法确保了初始搜索的准确性,最终提供的上下文是全面的。对于大型文档尤其有用,因为相关信息可能散落在不同的部分。
优点:
不足:
RAG融合采用了多角度的信息检索方法。它生成与原始查询相关的多个子查询,为每个子查询检索相关文档,然后使用互反排名融合来合并和排序结果。这种方法使系统能够从多个角度处理查询,从而可能发现单个查询可能会遗漏的相关信息。这就像有多名研究人员从不同角度研究同一个主题一样。
好处:
缺点:不足之处:
基于上下文的RAG通过将检索到的文档压缩为最相关的细节来提高效率和精确度。它提取并浓缩最重要的信息,而不是提供可能冗长的完整文档。这种方法通过去除冗余背景信息,保留关键信息,帮助语言模型生成更加简洁和集中的回答。当需要处理大量信息且简洁性至关重要时,这种方法特别有用。
好处:
不足之处:
这种方法首先优化原始查询,从而改进检索过程。在实际搜索文档之前,系统会重新构造查询,使其更精准有效。通过提升查询的清晰度和语义深度,Rewrite Retrieve Read RAG 可以检索到更多相关的文档,从而获取更准确和全面的信息。就像有一个研究助手帮您重新措辞您的问题,以便得到更好的搜索结果。
好处:
缺点如下:
校正检索增强(Corrective RAG)采用了一种动态的信息检索方式。它通过不断精炼检索到的文档,去除无关信息,并可能进行额外的网络搜索来填补知识空白。这种方法确保语言模型能够使用最高质量和最相关的资料。特别适用于初始检索不完整或略显偏离目标的情况。
优点包括:
不足之处:
自我RAG为检索和生成过程增添了反思性和自反式的自我评估成分。检索到文档后,语言模型会评估它们的相关性、准确性和完整性。这种方法就像是一个内置的事实核查器,使系统能够反思检索到的信息,并可能要求提供更多的背景信息或澄清。它旨在通过仔细审查来源材料来生成更可靠和值得信赖的答案。
优点:
注意:不足:
(注:RAG指...,请根据实际情况补充定义或解释)
自适应RAG是最灵活的检索方式。它根据特定的查询类型动态调整其策略,在使用索引数据、进行网络搜索或在使用多种检索方法之间切换。这种方法确保每个查询都能使用最适合的检索方法,使其在不同类型的信息查找中都具有高度的灵活性和有效性。
好处:
缺点:
当我们开始探索这些多样化的RAG技术,从朴素的RAG到自适应的RAG,很明显每种方法都有其独特的优点。有些技术在准确性上表现出色,而其他技术则更注重效率或上下文的保护。这种生态系统的精彩之处在于它的灵活性,你不必局限于使用单一的方法。实际上,我见过的很多生产系统结合多种技术来创建稳健、高性能的检索系统。
但是理解这些技术只是战斗的一半,可以说仅仅是开始。真正的学习来自于动手操作和实验。因此,我找到了一个全面的GitHub仓库,其中包含了所有这些RAG技术的实现。每个实现都包含了详细的Colab笔记本,你可以立刻运行,无需复杂的安装配置。详情请参阅 这里。