RAG系统

作者: admin | 发布时间: 2026-02-09 20:06:53 | ★ 0


什么是 RAG 系统?

RAG(Retrieval-Augmented Generation,检索增强生成)系统是一种结合了信息检索与大语言模型的技术架构。它的核心思想是:不依赖大模型自身记忆(参数化知识),而是从外部知识库中实时检索相关信息,并将其作为上下文提供给大模型,从而生成更准确、更具时效性且来源可追溯的答案。

RAG 系统主要解决大模型的“幻觉”问题(胡编乱造)和知识截止日期问题。

RAG 完整流程详解

一个完整的 RAG 系统包含两个主要阶段:离线索引构建​ 和 在线检索生成。

第一阶段:离线索引构建(数据准备)

这一步的目的是将原始的非结构化文档(如 PDF、Word、网页、数据库等)处理成便于快速检索的格式,并存入向量数据库。

文档加载与解析:

系统从各种数据源加载原始文档,并解析出纯文本内容,去除无关的格式信息。

文本切片(Chunking):

目的:大语言模型有上下文长度限制,无法一次性处理整本书。因此,需要将长文本切分成较小的、语义相对完整的片段(Chunk)。

方法:

固定长度切分:按字符数或 Token 数(如 512 或 1024 个 Token)简单切分,可能切断句子。

递归切分:尝试按段落、句子、标题等层级递归切分,优先保持语义完整性。

语义切分:使用模型判断句子间的语义连贯性,在语义边界处进行切分,这是目前最先进的方法。

向量化嵌入(Embedding):

使用嵌入模型(Embedding Model)将每个文本片段转换为一个高维向量(一组浮点数)。

核心原理:语义相似的文本,其向量在高维空间中的距离(如余弦距离)会更近。

常用模型:OpenAI 的 text-embedding-ada-002,国产的 BGE(BAAI/bge-large-zh)、M3E等。

存储至向量数据库:

将文本片段(原始文本)和其对应的向量(数学表示)成对地存储到向量数据库中。

向量数据库的作用:专门为高维向量的快速相似性搜索进行了优化,支持海量数据的毫秒级检索。

第二阶段:在线检索生成(用户查询)

当用户发起提问时,系统执行以下实时流程:

查询向量化:

使用相同的嵌入模型,将用户的问题(Query)也转换为一个查询向量。

向量检索(召回):

系统拿着这个查询向量,去向量数据库中执行相似性搜索。

向量计算方法:

余弦相似度(Cosine Similarity):最常用的方法,衡量两个向量方向上的差异,忽略向量的长度(即文本长度),更关注语义相关性。

点积(Dot Product):计算简单高效,但结果受向量模长(文本长度)影响,通常需要对向量进行归一化(L2 Norm)后再使用。

欧几里得距离(Euclidean Distance):计算向量间的直线距离,距离越近越相似。

向量数据库会返回与查询向量最相似的 Top-K(例如 Top 10)个文档片段。

重排序(Reranking):粗排与精排

向量检索虽然快,但可能存在“语义相近但内容不相关”的噪声,或者排序不够精确。重排序阶段就是为了解决这个问题。

粗排(Coarse Ranking):

目的:对向量检索返回的大量候选结果(如 Top 100)进行快速、初步的筛选,减少后续精排的计算压力。

方法:

关键词匹配(如 BM25):结合传统的全文检索技术,过滤掉那些虽然向量相似但完全没有包含关键词的结果。

轻量级交叉编码器(Lightweight Cross-Encoder):使用较小的、专门用于判断相关性的模型(如 MiniLM-L6)对 Query 和每个候选文档进行快速打分。它比 Embedding 模型更准,但比大型精排模型快。

精排(Fine Ranking):

目的:对粗排后的少量高质量候选(如 Top 5-10)进行精细打分,确定最终排序。

调用的模型:

大型交叉编码器(Large Cross-Encoder):如 bge-reranker-large或 bge-reranker-v2-m3。这类模型将 Query 和 Document 拼接在一起输入模型,让模型能充分理解两者之间的交互关系,从而给出极其准确的相关性分数(0-1 之间)。这是目前提升 RAG 效果最显著的手段之一。

LLM-as-a-Judge:在极端追求准确性的场景下,甚至可以直接调用 GPT-4 等顶级大模型,让其判断“给定这个文档,能否回答这个问题”,并根据大模型的判断进行排序。这种方法成本最高,但通常也最准。

上下文构建与提示词工程:

将精排后的 Top-N 个最相关的文档片段拼接起来,作为“上下文”。

构建一个提示词(Prompt)模板,将系统指令、检索到的上下文、用户的问题组合在一起。例如:

你是一个专业的助手。请严格根据以下提供的背景信息来回答问题。如果信息不足以回答问题,请说“我不知道”,不要编造答案。

背景信息:{拼接后的上下文}

问题:{用户的问题}

答案:

大模型生成与返回:

将组装好的提示词发送给大语言模型(如 GPT-4, Llama, 文心一言等)。

大模型基于提供的上下文生成最终答案。

系统将答案返回给用户,并可选择附带检索到的来源文档,以增加可信度。

总结

RAG 系统通过“检索-增强-生成”的流程,将大模型的强大生成能力与外部知识库的准确性和时效性完美结合。其中,向量检索是速度的保障,而重排序(特别是精排)是准确性的关键。在实际应用中,往往需要根据业务场景在“召回率”和“准确率”之间做权衡,并持续优化 Embedding 模型和 Reranker 模型的选择。