微信扫码
和创始人交个朋友
我要投稿
掌握RAG工作流程优化,提升检索增强生成性能。 核心内容: 1. RAG工作流程的详细划分和各部分优化方法 2. 预检索、检索和后检索阶段的关键技术和策略 3. 增强数据粒度、数据清理和元数据添加等优化技巧
首先,我们将 RAG 工作流程分为三个部分,以增强我们对 RAG 的理解,并优化每个部分以提高整体性能:
在预检索步骤中,需要准备LLM 原始训练数据集之外的新数据(也称为外部数据) ,并将其拆分成块,然后使用向量模型对块数据进行索引,该模型将数据转换为数值表示并将其存储在向量数据库中,此过程创建了 LLM 可以理解的知识库。
RAG 中的预检索
在最重要的检索步骤中,用户查询被转换为称为嵌入的向量表示,并使用余弦相似度从向量数据库中找到相关块。这会尝试从向量存储中找到高度相关的文档块。
接下来,RAG 模型通过在上下文(查询 +上下文)中添加相关检索数据来增强用户输入(或提示)。此步骤使用提示工程技术与 LLM 进行有效沟通。增强的提示允许大型语言模型使用给定的上下文生成对用户查询的准确答案。
RAG 中的检索和后检索
我们的目标是通过将各种技术应用于不同部分来增强 RAG 工作流程的每个组件。
预检索技术包括提高索引数据的质量和块优化。此步骤也可以称为增强语义表示。
提高数据质量
‘Garbage in, garbage out’
数据清理在 RAG 框架中起着至关重要的作用。RAG 解决方案的性能取决于数据的清理和组织程度。删除不必要的信息,例如特殊字符、不需要的元数据或文本。
添加元数据
添加元数据,例如概念和级别标签,以提高索引数据的质量。
添加元数据信息包括将引用的元数据(例如日期和目的)集成为块以便进行过滤,以及合并参考文献的章节和小节等元数据以提高检索效率。
以下是元数据有用的一些场景:
元数据很有用,因为它在向量搜索上带来了额外的结构化搜索层。
优化索引结构
知识图谱或图神经网络索引利用,图数据索引中节点之间的关系,整合图结构中的信息来捕获相关上下文。
向量索引
选择正确的 chunk_size
是一个关键的决定,它可以通过多种方式影响 RAG 系统的效率和准确性:
相关性和粒度
chunk_size
(如 128)可产生更细粒度的块。然而,这种粒度存在风险:重要信息可能不在检索到的顶部块中,尤其是当 similarity_top_k
设置严格到 2 时。相反,512 的块大小很可能包含顶部块中的所有必要信息,从而确保查询的答案随时可用。响应生成时间
随着 chunk_size
的增加,输入到 LLM 以生成答案的信息量也会增加。虽然这可以确保更全面的背景信息,但也可能会降低系统速度。
挑战
如果您的块太小,它可能不包含 LLM 回答用户查询所需的所有信息;如果块太大,它可能包含太多不相关的信息,使 LLM 感到困惑,或者可能太大而无法适应上下文大小。
任务特定分块
根据下游任务需要确定块的最佳长度以及每个块希望有多少重叠。
分块技术
Small2big 或父文档检索
通过拆分和存储小块数据来实现 ParentDocumentRetriever 平衡。在检索过程中,它首先获取小块,然后查找这些块的父 ID,并将这些较大的文档返回给 LLM。
它在初始搜索阶段利用小文本块,随后将更大的相关文本块提供给语言模型进行处理。
递归检索涉及在初始检索阶段获取较小的块以捕获关键的语义含义。随后,在流程的后期阶段,将包含更多上下文信息的较大块提供给 LLM。这种两步检索方法有助于在效率和提供丰富的上下文响应之间取得平衡。
步骤:
Small2big 或父文档检索分块技术
句子窗口检索
这种分块技术与上面的非常相似。句子窗口检索背后的核心思想是根据查询从自定义知识库中选择性地获取上下文,然后利用该上下文的更广泛版本来生成更强大的文本。
此过程涉及嵌入一组有限的句子以供检索,这些句子周围的附加上下文(称为“窗口上下文”)被单独存储并与它们链接。一旦确定了最相似的句子,就会在将这些句子发送到大型语言模型 (LLM) 进行生成之前重新整合此上下文,从而丰富整体上下文理解。
解释句子窗口检索的工作原理
RAG 中的句子窗口检索分块技术
这是 RAG 工作流中最重要的部分,包括根据用户查询从向量存储中检索文档。此步骤也可以称为对齐查询和文档。
查询重写是对齐查询和文档的语义的基本方法。
在此过程中,我们利用语言模型 (LLM) 功能重新表述用户的查询并再次尝试。需要注意的是,两个在人类看来可能相同的问题在嵌入空间中可能看起来并不相似。
多查询检索方法利用 LLM 针对给定的用户输入查询从不同角度生成多个查询,有利于解决具有多个子问题的复杂问题。
对于每个查询,它会检索一组相关文档,并对所有查询进行唯一联合以获得一组更大的潜在相关文档。
通过对同一个问题产生多种观点,多查询检索器可能能够克服基于距离的检索的一些限制并获得更丰富的结果。
多查询检索器
两者皆可海德和查询到文档是类似的查询重写优化。鉴于搜索查询通常很短、含糊不清或缺乏必要的背景信息,LLM 可以提供相关信息来指导检索系统,因为它们通过对数万亿个标记进行预训练来记忆大量的知识和语言模式。
标准方法和HyDE方法之间的差异
提示StepBack 提示该方法鼓励语言模型超越具体的例子来思考,并关注更广泛的概念和原则。
此模板复制了“后退”提示技术,该技术通过首先提出“后退”问题来提高复杂问题的表现。此技术可以与标准问答 RAG 应用程序结合使用,通过检索原始问题和后退问题的信息。以下是后退提示的示例。
微调嵌入模型会显著影响 RAG 系统中检索内容的相关性。此过程涉及自定义嵌入模型以增强特定领域上下文中的检索相关性,尤其是对于处理不断发展或罕见术语的专业领域。
这里的关键思想是,可以使用 GPT-3.5-turbo 等语言模型生成用于微调的训练数据,以基于文档块提出问题。这使我们能够以可扩展的方式生成合成的正对(查询、相关文档),而无需人工贴标。最终数据集将是问题和文本块的对。
在生成的训练数据集上微调任何嵌入模型
使用 GPT 通过合成生成的数据集微调嵌入模型
RAG系统通过智能地集成基于关键字的搜索、语义搜索和向量搜索等各种技术来优化其性能。这种方法充分利用了每种方法的独特优势,以适应不同的查询类型和信息需求,确保始终如一地检索高度相关且上下文丰富的信息。混合搜索的使用是对检索策略的有力补充,从而提高了 RAG 流程的整体效率。
最常见的模式是将稀疏检索器(如 BM25)与密集检索器(如嵌入相似性)相结合,因为它们的优势是互补的。这也被称为“混合搜索”。稀疏检索器擅长根据关键字查找相关文档,而密集检索器擅长根据语义相似性查找相关文档。
在将检索结果发送到 LLM 之前对其进行重新排序显著提高了 RAG 性能。向量相似性搜索中的高分数并不意味着它总是具有最高的相关性。
核心思想是通过重新排列文档记录,将最相关的内容放在最前面,从而限制文档的总数,不仅解决了检索过程中上下文窗口扩展的问题,还提高了检索效率和响应速度。增加查询引擎中的similarity_top_k来检索更多的上下文段落,重新排名后可以减少到top_n。
使用 Cohere Reranker 对检索到的文档进行重新排序
检索到的文档中的噪声会严重影响 RAG(Retrieval-Augmented Generation) 的性能。因此,与查询最相关的信息可能被埋藏在大量无关文本中。将整个文档传递到应用程序中可能导致更昂贵的大语言模型(LLM)调用,并生成质量较差的响应。在这种情况下,重点在于压缩无关上下文、突出关键段落,以及减少整体上下文长度。
上下文压缩旨在解决这一问题。其核心思想很简单:不是直接返回检索到的原始文档,而是根据给定查询的上下文对文档进行压缩,从而仅返回相关信息。这里的“压缩”既指压缩单个文档的内容,也包括完全过滤掉不相关的文档。
上下文压缩
Doc Compressor 是一种小型语言模型,用于计算用户查询和检索到的文档之间的提示互信息(prompt mutual information),从而评估各个元素的重要性。
模块化 RAG 通过整合多种方法来增强 RAG 的不同组件。例如,引入搜索模块以进行相似性检索,并在检索器中应用微调方法以提高性能。
RAG 融合结合了两种方法:
多查询检索 (Multi-Query Retrieval) 利用大语言模型 (LLMs) 从不同角度为给定的用户输入查询生成多个查询。这种方法在处理包含多个子问题的复杂问题时具有优势。
重排序检索文档 (Rerank Retrieved Documents) 对所有检索到的文档进行重新排序,并移除相关性得分较低的文档,从而提升结果的质量。
图片所示技术确保了搜索结果能够匹配用户的意图,无论是显而易见的还是隐含的。它帮助用户找到更具洞察力和相关性的信息。
本文讨论了优化 RAG 管道各个部分并增强整体 RAG 性能的各种技术。你可以在 RAG 管道中使用其中一种或多种技术,使其更加准确和高效。希望这些技术能够帮助你为你的应用程序构建一个更强大的 RAG 管道。
参考资料:https://luv-bansal.medium.com/advance-rag-improve-rag-performance-208ffad5bb6a
文章到此还没完,感觉上面是比较常见的内容,下面继续分享同济大学 Haofen Wang的关于检索增强生成的报告:《Retrieval-Augmented Generation (RAG): Paradigms, Technologies, and Trends》 ,RAG 范式、技术和趋势。
温故而知新!https://raw.githubusercontent.com/Tongji-KGLLM/RAG-Survey/main/assets/RAG_Slide_ENG.pdf
RAG (检索增强生成)的出现主要是因为传统的LLM存在一些不足之处:
对于企业应用来说,还需要综合考虑:
因此,RAG的核心思想是:在生成答案时,首先从大量文档中检索相关信息,再基于这些信息进行答案生成。通过附加外部知识库,避免了为每个特定任务重新训练整个大型模型。这使得RAG特别适用于知识密集型任务。
RAG与Fine-tuning (FT) 的比较:
RAG和FT不是互相排斥的,而是互补的。结合使用可以提升模型的整体性能。
RAG 非常适合以下场景:
RAG可以分为三种范式:
关于检索什么层级的内容,我们可以从检索粒度的粗细,以及数据结构化的高低来看业界研究结果。
X轴结构化从低到高,Y轴从精细到粗粒度。 三个代表:
如何使用检索到的内容 在推理过程中,将检索到的信息集成到生成模型的不同层中
检索的时机
按照检索的频率从低到高,有:
RAG 技术发展树
核心就是数据很多,通过meta过滤,可以减少范围,提高精度。
可以通过以下方式进行检索:
RAG和Fine-tuning可以结合使用,以更好地生成和检索答案。
相关研究总结
检索质量:
生成质量:
当前有流行的开发框架,如LangChain、LlamaIndex、AutoGen,方便开发RAG应用。
在工业界,许多应用已经开始使用RAG技术。
工业界也有很多RAG应用。
将RAG从文本扩展到多模态
扩展RAG下游任务,改善生态建设
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2025-02-22
TrustRAG:为AI知识检索打造更安全的防线
2025-02-22
DeepSeek+RAGFlow 本地部署避坑指南,一文搞定常见难题!
2025-02-22
基于DeepSeek的本地化知识库 RAGFlow 搭建(附带镜像链接)
2025-02-22
RAGFlow+DeepSeek-R1:14b落地案例分享(足够详细):机加工行业设备维保场景
2025-02-21
DeepRAG:LLM时代的智能检索革命(实测提升准确率21.99%)
2025-02-20
本地运行DeepSeek R1 + RAG系统
2025-02-20
传统分块已死?Agentic Chunking拯救语义断裂,实测RAG准确率飙升40%,LLM开发者必看!
2025-02-20
传统 RAG 与 Agentic RAG对比
2024-09-04
2024-10-27
2024-07-18
2024-05-05
2024-06-20
2024-06-13
2024-07-09
2024-07-09
2024-05-19
2024-07-07
2025-02-15
2025-02-12
2025-02-05
2025-02-05
2025-01-24
2025-01-24
2025-01-20
2025-01-18