跳转至

RAG

约 2754 个字 预计阅读时间 9 分钟

1.引言

检索增强生成(Retrieval-Augmented Generation)通过在生成阶段引入外部知识检索,有效缓解了模型幻觉问题,成为当前LLM应用落地的主流架构。

一个RAG系统性能的好坏涉及多个技术环节的配合,其中Embedding模型决定了语义理解的深度,检索策略影响召回的全面性,而rerank重排序则直接关系到最终答案的准确性。

2.Embedding模型

Embedding(嵌入)是一种将离散的文本数据映射到连续高维向量空间的技术。在RAG系统中,它将用户查询和知识库文档统一转化成稠密向量表示,使得语义相似的文本在向量空间中彼此接近,从而支持高效的相似度检索。

Embedding模型的质量直接决定了RAG系统的检索精度。一个优秀的Embedding模型需要具备以下能力:准确捕捉文本的语义信息而非仅仅关注表面词汇;在不同领域和语言上保持稳定的表现;具备处理长文本和复杂语境的能力。目前,Embedding模型的发展呈现出商业API与开源模型双轨并行的格局,为不同需求场景提供了丰富的选择空间。

3.RAG核心工作流程

RAG系统的核心原理是通过检索模块从外部知识库提取相关信息,并将其作为上下文传递给生成模块,从而产生有据可依的准确回答。完整的RAG工作流程包含以下四个阶段:

数据准备阶段:将原始文档进行分块处理(Chunking),通过Embedding模型转换为向量表示,最后存入向量数据库建立索引。这一阶段的分块策略直接影响后续检索的粒度和质量。

检索阶段:用户输入查询后,系统首先将查询文本向量化,然后在向量数据库中执行相似度搜索,召回Top-K个最相关的文档块。这是RAG系统的核心环节,检索质量决定了最终回答的上限。

增强阶段:将召回的文档块与原始用户查询进行拼接,构建增强后的Prompt。这一步需要合理组织检索结果的顺序和格式,避免"中间迷失"问题。

生成阶段:LLM基于增强后的Prompt生成最终回答。模型会参考检索到的上下文信息,减少幻觉的产生。

4.向量搜索与Rerank重排序

4.1 Bi-encoder与Cross-encoder

理解向量搜索与Rerank的区别,首先需要深入了解它们背后的两种核心架构:Bi-encoder(双编码器)和Cross-encoder(交叉编码器)。

Bi-encoder架构采用双塔结构:Query和Document分别通过独立的编码器(通常共享参数)生成各自的向量表示,然后通过余弦相似度或点积计算两者的相关性分数。这种架构的核心优势在于Document可以预先离线编码并建立索引,在线查询时只需编码Query并执行向量检索,计算复杂度从O(n)降至O(1)。Bi-encoder是当前主流Embedding模型的标准架构,适合大规模语料的初筛召回。

Cross-encoder架构则采用完全不同的策略:它将Query和Document拼接为单一输入序列(通常以 [CLS]Query[SEP]Document[SEP]的格式),送入BERT等Transformer模型进行联合编码。模型内部的自注意力机制能够捕捉Query与Document之间的细粒度语义交互,最终输出一个精确的相关性分数,适合小规模精细排序。这种架构的精度显著高于Bi-encoder,但由于每对Query-Document都需要实时计算,无法进行预索引,计算成本极高。

4.2 为什么向量搜索后还需要Rerank?

向量搜索(粗排)与Rerank(精排)形成的两阶段检索架构并非冗余设计,而是在效率与精度之间取得平衡的工程最优解。Rerank的必要性源于以下三个核心原因:

原因一:解决向量压缩的信息损失

Embedding模型将任意长度的文本压缩为固定维度的向量(如768维或1024维),这一过程不可避免地会丢失部分语义信息。尤其是当Query与Document的相关性依赖于特定短语、实体名称或细微的语境差异时,向量相似度可能无法准确捕捉。例如,"苹果公司的股票"和"苹果的营养价值"在向量空间中可能距离较近(因为都包含"苹果"这一核心概念),但实际上语义完全不同。Cross-encoder通过对Query-Document对进行逐词级别的注意力交互,能够识别这些细粒度的语义差异。

原因二:统一多路召回的分数标准

在混合检索架构中,系统通常同时采用向量检索和BM25关键词检索两条路径,以兼顾语义理解和精确匹配。然而,这两种检索方法返回的分数处于完全不同的数值空间:向量检索的余弦相似度范围是[-1, 1],而BM25分数则是无上界的正数。简单的分数融合(如加权求和)难以取得理想效果。Rerank模型提供了一个统一的评分框架:无论文档来自哪条检索路径,都通过同一个模型计算其与Query的相关性分数,从而实现不同来源结果的公平排序。

原因三:优化LLM的输入质量

LLM的上下文窗口是有限且昂贵的资源。如果将粗排阶段召回的所有文档(如Top-100)全部传递给LLM,不仅会消耗大量Token(增加成本),还可能引入无关信息干扰模型的判断(降低质量)。研究表明,LLM对输入文档的顺序敏感,存在"中间迷失"现象——位于中间位置的相关文档容易被忽略。Rerank的作用是从粗排结果中精选出最相关的Top-N文档(如Top-3到Top-5),确保传递给LLM的上下文信息精准、紧凑,最大化生成质量的同时控制成本。

两阶段架构的设计哲学可以概括为"先广后精":向量搜索负责从海量文档中快速筛选出一个较大的候选集,保证不遗漏潜在相关内容(高召回率);Rerank则对这个候选集进行精细化排序,确保最终呈现给用户或LLM的是真正最相关的结果(高精确率)。

5.RAG调优策略

分块与索引优化:推荐设置 chunk_size=384、 chunk_overlap=64的分块参数,确保语义单元的完整性。同时可采用多级索引架构,摘要索引用于粗筛,详情索引用于精排。

检索增强策略:元数据过滤可在检索时利用时间、类别等结构化字段缩小搜索范围。多向量检索为每个文档块同时生成标题向量和内容向量,提高匹配的准确性。查询重写将用户的模糊表述转化为更适合检索的规范描述。

上下文优化:句子窗口检索以小块为单位进行匹配,返回结果时扩展到周围的完整段落。父文档检索则是检索细粒度子块后,返回其所属的完整父文档。Prompt压缩移除检索结果中的冗余信息,精简LLM的输入长度。

模型与系统优化:混合检索权重调优需要根据具体场景动态调整向量检索与关键词检索的权重比例。针对垂直领域可进行负采样微调,提升Embedding模型在专业术语上的表现。输出格式约束使用JSON Schema确保生成结果的结构化和可解析性。

6.RAG面试题

6.1 RAG如何缓解模型幻觉?

通过提供外部事实依据,强制模型基于检索上下文回答而非凭空生成。

6.2 RAG的核心组件有哪些?

向量数据库、Embedding模型、检索器、LLM生成器。

6.3 什么是稠密检索和稀疏检索?

稠密指基于向量的语义检索,稀疏指BM25等基于关键词的词频检索。

6.4 检索内容缺失怎么办?

优化分块策略、扩展数据源、在Prompt中声明“不知道则告知”。

6.5 正确答案排名靠后怎么解决?

引入Rerank重排序机制,对召回结果进行精细化排序。

6.6 如何处理长文档检索?

采用父子块检索或句子窗口检索,平衡检索粒度与上下文完整性。

6.7 分块大小如何选择?

问答场景建议300-500字符,摘要场景可适当增大。

6.8 混合检索的原理是什么?

结合向量语义检索和BM25关键词匹配,通过RRF算法融合分数。

RRF(Reciprocal Rank Fusion,倒数排序融合) 是一种简单而强大的融合排序方法,用于合并多个检索系统的排序结果。它通过排名倒数加权的方式,将不同检索器返回的文档列表合并成一个统一的排序,不需要依赖分数归一化或调参。

RRF 最初在信息检索领域被提出,因其无需调参、对分数尺度不敏感、鲁棒性强而成为混合检索中的常用策略。

6.9 如何评估RAG效果?

使用Hit Rate、MRR、Faithfulness、Answer Relevance等指标。

6.10 多轮对话检索怎么处理?

需进行Query重写,补全代词指代和上下文信息。

6.11 向量数据库如何选型?

综合考虑数据规模、查询延迟、QPS需求和水平扩展能力。

6.12 GraphRAG的优势是什么?

擅长处理实体关系和全局性问题,弥补向量检索的局部性。

6.13 RAG系统如何降本增效?

向量量化压缩、Prompt精简、小模型蒸馏。

6.14 Chunking时有哪些考虑因素?

块大小(Chunk Size): 需要权衡。块太大会包含过多无关信息,干扰LLM;块太小会丢失上下文语义。通常尝试512、1024等尺寸。

块重叠(Chunk Overlap): 相邻块之间保留一部分重叠文本,有助于防止上下文在分割点被切断,保持语义完整性。

分割方式: 按字符、按标记(Token)、按句子、按段落或按递归分割。递归分割(先按\n\n,再按\n,再按空格)是常见且有效的方法。

元数据关联: 为每个块附加元数据,如标题、页码、URL等,便于追溯答案来源。