LLM应用落地必读(六): 从朴素RAG看检索增强生成的基本框架

LLM应用落地必读(六): 从朴素RAG看检索增强生成的基本框架

LLM的训练是基于现有的、公开的数据。当训练结束后,LLM学习到的参数化知识通常便停止更新了。因此,当LLM被部署应用时,是无法获取最新的、或企业内部的私有数据的。RAG(Retrieval-Augmented Generation,检索增强生成)技术通过检索外部知识库,将相关文档片段作为上下文拼接到用户的输入中,在保持LLM权重冻结(无需重新训练)的前提下,引导模型基于检索到的信息生成回答。这种方式有效弥补了LLM在时效性和私有数据覆盖上的局限性,不过其最终效果也高度依赖于检索的准确性,以及大模型本身对检索内容的整合与抗干扰能力。

RAG是一种低成本、高效的方法,能显著弥补基础LLM在时效性和私有数据上的局限。然而,RAG也面临诸多技术挑战。本文将通过介绍朴素RAG(Naive RAG) 帮助大家理解RAG的基本框架,并指出其不足之处。由于篇幅原因,针对这些不足改进的高级RAG,将在下一篇文章中介绍。

一、朴素RAG(Naive RAG)

朴素RAG遵循索引(Indexing)、检索(Retrieval)与生成(Generation)这一传统流程,该流程亦被称为"检索-读取"(Retrieve-Read)框架,如图1所示。

图1:检索-读取框架

1.1 索引

索引的目的是构建文本块的向量数据库,它是检索与生成的前置条件,该阶段的流程可细分为以下步骤:

1.数据清洗与提取:将PDF、HTML、Word或Markdown等格式的原始数据进行清洗与提取,将其转换为统一的纯文本格式。

2.文本分块(Chunking):上一步转换得到的文本通常较大,若直接输入LLM,可能会超出其上下文窗口的长度限制,因此需要将文本分割成更小、更易于处理的语义片段。

3.片段向量化:上一步生成的文本块通过嵌入模型(Embedding Model)编码为稠密向量表示,以捕捉其语义信息。

4.向量存储:文本块生成的向量被存储于向量数据库中,以支持后续的相似性检索。

1.2 检索

接收到用户查询后,RAG系统会从向量数据库中检索出相似度最高的Top K个文本块,随后在生成阶段将其与用户查询拼接后输入LLM。具体步骤如下:

1. 用户查询向量化:采用与索引阶段相同的嵌入模型,将用户查询转换为向量表示。

2. 计算相似度分数:将该用户查询向量与向量数据库中的各个文本块向量进行相似度计算(通常采用余弦相似度)。

3. 选取Top K个文本块:按相似度分数由高到低排序,提取出Top K个文本块。在实际应用中K值通常为3~5,即将最相似的3个到5个文本块用于生成阶段。由于相似度计算并非100%准确,通过选取Top K个候选文本块,增加正确文本块被覆盖的概率,这是一种"容错机制"。

1.3 生成

RAG系统将用户的查询与检索到的Top K个文本块按照预设的提示词模板(Prompt Template)进行组装,构建为结构化的输入上下文,随后交由LLM处理。提示词中通常包含明确的系统指令(如"请仅根据以下提供的资料回答问题"),以抑制LLM依赖自身参数化知识产生幻觉。

1.4 朴素RAG的不足

朴素RAG流程清晰、实现门槛低,但在实际应用中,其效果常面临多重挑战。这些挑战主要分布在检索和生成两个阶段。

检索阶段的局限性:检索准确度常面临挑战,一方面可能召回与问题不相关或低相关的文本块(低准确率),另一方面也可能遗漏关键信息(低召回率),两者都会影响最终回答的质量。

生成阶段的融合困境

1. 拼接方式粗糙:朴素RAG将检索到的多个文本块与用户问题进行简单拼接后直接输入LLM,缺乏因果逻辑或转折连接的设计,容易导致输出内容在逻辑上脱节、不连贯。

2. 信息冗余干扰:当检索到的多个文本块内容高度重叠时(如同一信息在不同文档中反复出现),LLM可能会生成重复、冗长且信息密度低的内容。

3. 重要性不区分:朴素RAG直接将检索到的所有文本块等量地拼入提示词,未在生成阶段对片段进行重要性加权或重排序,导致LLM容易被次要信息干扰,降低回答的准准度。

4. 文体风格脱节:用户查询的用语风格(如口语化)与检索到的文本块文体风格(如新闻、学术论文、法规、政策等的正式文体)可能存在显著差异,朴素RAG缺乏风格适配机制,导致回复语调前后不一。

5. 单次检索不足:面对需要多步推理的复杂问题,基于原始用户查询的单次检索往往难以获取充足的信息,朴素RAG缺乏查询分解或多轮检索机制来支持逐步推理。

这些不足,正是高级RAG试图解决的问题。下一篇文章,我们将逐一探讨针对这些不足的改进策略。

二、小结

本文介绍了朴素RAG的基本框架,涵盖索引、检索、生成三个核心阶段:

索引:将原始文档清洗、分块、向量化后存入向量数据库。

检索:将用户查询向量化,计算相似度,召回Top K个相关文本块。

生成:将检索结果与用户查询拼接,交由LLM生成回答。

朴素RAG流程清晰、易于实现,但也存在检索准确率低、文档融合粗糙导致生成质量不高等问题,催生了高级RAG的诸多改进。

下一篇文章,我们将深入探讨高级RAG的优化策略,看看如何系统性地提升RAG系统的检索质量和生成效果。

三、参考文献

1. Yunfan Gao, Yun Xiong, Xinyu Gao, et al. Retrieval-Augmented Generation for Large

Language Models: A Survey, 2024.

作者:徐宏勤
版权声明:本文为原创内容。如需转载,请务必在文章开头标注作者和来源,并保持文章完整,否则视为侵权。