什么是 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 模型的选择。