什么是RAG?
RAG(Retrieval Augmented Generation),翻译为检索增强生成,是一种将信息检索技术与大模型相结合的技术。
RAG的核心思想是:在将用户的提问发送给大模型之前,先从一个知识库中检索出相关的信息,然后将这些信息和用户的提问一并提供给大模型,从而增强其生成能力,使其能够给出更准确、更具时效性、更符合特定领域知识的回答。
为什么需要RAG?
- 提升大模型回答的准确性
- 解决知识的时效性问题:预训练的大模型的知识被固化在其训练数据的截止时间点。例如某个大模型的知识库可能截止于2025年6月,对于此后发生的新事件以及出现的新知识,大模型无法给出准确的答案。RAG技术通过检索知识库,为大模型提供实时的知识补充,从而克服了知识过时的问题。
- 打通私有数据访问:出于数据安全和商业机密的考虑,企业内部的私有数据无法被公开的大模型直接访问,RAG技术能够安全地连接这些私有数据源,在用户提问时,仅将与用户问题相关的部分信息提取出来提供给大模型,保证能够在不泄露全部私有数据的情况下,基于企业内部的准确知识进行回答,提高了回答的准确性。
RAG原理
RAG分为两个不同的阶段:索引和检索。
一句话来说,索引过程可以理解为知识库注入知识。索引阶段包含以下步骤:
- 输入文档:文档是知识的来源,可能是文本文件、PDF、网页、数据库记录等
- 文档噪声去除:对文档进行噪声去除,比如HTML标签等
- 文档分块(chunking):通过文档分割器(Text Splitter)将文档拆分为一个个文本片段(Segments),适配嵌入模型和生成模型的上下文窗口限制。
- 增强文档片段:给文档片段加上元数据,比如时间戳、分类标签等
- 向量化:将文本片段交给嵌入模型,将其向量化,生成嵌入向量
- 存储到向量数据库:将生成的嵌入向量、原始文档片段以及元数据存入向量数据库。
检索阶段分为以下步骤:
- 接收用户查询:接收用户的自然语言查询(Query),例如问题或者任务描述
- 查询向量化:使用嵌入模型将用户查询向量化
- 检索:在向量数据库中,通过语义相似性搜索查询到与查询向量最相关的k个文档片段
- 增强:将检索到的相关片段和原始查询一并发送给大模型
- 生成:大模型向用户输出自然语言回复