检索增强型生成(RAG)是企业环境中大型语言模型(LLM)的一项重要应用。RAG通过集成与特定提示相关的上下文数据来增强LLM的能力。这一过程允许LLM从专门的资源中获取响应,如专有的企业材料或详细的技术手册——这些内容超出了它们最初的训练范围。
然而,RAG的效果取决于检索阶段的精确度。如果系统未能找到最相关的文件,生成的响应质量将受到影响。在这份指南中,我们将探讨实用技术,以优化您的RAG管道,确保您的语言模型有最相关的信息以提高其输出的质量。
RAG管道的工作原理
检索增强型生成管道由几个组成部分构成,包括向量数据库、文档库、嵌入模型和主要语言模型。其核心功能开始于嵌入模型,该模型将文档转换为数值表示,并存储在向量数据库中。
当用户发送提示时,嵌入模型对其进行编码并将其发送到向量数据库。向量数据库将提示的嵌入与数据库中的文档嵌入进行比较,以识别相似度最高的那些文档。
一旦识别出最相关的文档,它们的内容就会被添加到原始提示中作为上下文,并发送给主要LLM。LLM使用这些上下文信息来生成它的响应。
这一过程中的关键步骤是检索对提示来说真正相关的文档。它依赖于嵌入中语义表示的精确度。如果嵌入未能将提示和文档对齐,向量数据库可能会返回不合适的文档,导致响应质量不佳。
现在,我们将分享几种策略,以优化您的RAG管道,确保它为用户的提示检索到最相关的文件。
选择合适的块大小
LLM有一个有限的上下文窗口,通常跨越几千个标记(tokens)。这在处理如书籍或冗长文章这类超出LLM一次性处理能力的庞大文档时,提出了一个挑战。为了解决这一限制,您必须在将文档添加到RAG管道中的向量数据库之前,将文档分割成更小、更易于管理的块。
确定最佳块大小对于RAG管道的有效性至关重要。小块大小可以使RAG系统在模型的上下文窗口内匹配更多的上下文块,可能会加快检索过程。但是,非常小的块可能缺乏足够的信息来响应用户的提示。
较大的块确保有更丰富的上下文,为用户的查询提供更多的信息。但如果块太大,它就会填满LLM的上下文窗口。这不仅限制了可以添加到提示中的文档数量,而且还会减慢模型的响应时间。此外,过大的块可能会稀释嵌入值的特异性,使提示的对齐变得复杂。
那么,什么构成了合适的块大小呢?虽然它在很大程度上取决于具体应用,但512或1024个标记的块大小通常在上下文丰富性和操作效率之间取得了平衡。建议在连续块之间实现大约100-200个标记的重叠也是可取的。这种重叠可以防止关键信息被分割到两个块中,否则会妨碍RAG管道的性能。
重排检索的文档
向量数据库是根据与用户提示的相似度得分对文档进行排名和检索的关键。通常,RAG管道会根据用户的查询从向量数据库中获取一组排名靠前的文档。但如前所述,这些文档可能并不总是与查询的意图紧密对齐。
为了缓解这种不匹配,可以使用第二个模型来根据用户的提示重新排名向量数据库检索到的文档。当原始的RAG管道输出不理想时,重新排名可以显著提高其精确度。
尽管重排模型可能无法与向量数据库的速度和效率相媲美,但它们的准确度却有所补偿。向量数据库的快速检索能力和重排模型的准确度可以是一个强大的组合。
在这种两级方法中,向量数据库首先列出一批可能相关的文档。随后,重排模型评估这个子集,选择与用户查询最匹配的top-k文档。例如,如果您的RAG管道设计为获取前三个文档作为上下文,您可以配置向量数据库检索六个文档,用重排模型重新评估它们,然后将新的前三个文档作为上下文发送给LLM。
重排模型的一个额外好处是它们的即插即用特性。它们可以被集成到现有的RAG管道中,而无需重新计算存储在向量数据库中的文档嵌入。
Cohere提供了一个非常有用的重排特性,可以增强您的RAG管道。它与LangChain和LlamaIndex等广泛使用的库兼容。此外,Cohere最近还引入了微调其重排模型的选项,允许针对特定用例进行更大的优化。
微调嵌入模型
另一种提高RAG管道精确度的方法是微调嵌入模型,以更好地适应您的特定应用。这种方法虽然有效,但既昂贵又复杂。它要求重新训练嵌入模型,并重新计算文档库中所有文档的嵌入。此外,这个选项通常无法在封闭来源服务中使用,这些服务通常不允许模型微调。在这种情况下,您可能需要转向另一个嵌入模型或采用开源解决方案,如Sentence Transformers。
另一种方法是使用一个深度学习模型,作为提示嵌入和文档嵌入之间的中介,学习更有效地对齐它们。Activeloop的Deep Memory功能采用了这种技术,它专门从事AI应用的向量数据库。
Activeloop的DeepLake向量数据库允许您通过向其提供提示和数据库中相应的文档向量对来训练Deep Memory组件。在推理过程中,Deep Memory应用其学习的转换到提示嵌入,显著提高检索精确度。
Deep Memory的优势在于您不需要重新计算现有向量存储的嵌入,使它成为一种具有成本效益的解决方案。它还与任何嵌入模型兼容,包括那些来自封闭来源服务的模型,增加了其多功能性。