RAG(检索增强生成)技术通过外部知识库检索解决大模型幻觉、知识时效性和领域专业问题。文章详解RAG工作原理:准备阶段包括文档分块、向量化与索引构建;回答阶段涵盖召回、重排和生成。提供Python代码示例,展示如何构建RAG系统,并介绍其在智能客服、文档问答和法律等领域的应用,同时展望多模态融合、知识图谱结合及模型轻量化等未来趋势。

在大模型盛行的今天,检索增强生成(Retrieval-Augmented Generation,RAG)技术成为了连接大模型与外部知识的关键桥梁。它不仅解决了大模型的“幻觉”问题,还能让模型实时获取最新知识,在智能客服、智能文档问答等领域发挥着重要作用。今天,就让我们深入探讨RAG的全流程。

一、RAG是什么?解决了什么问题?

RAG,即检索增强生成,简单来说,就是在大模型生成回答之前,先从外部知识库中检索相关信息,然后利用这些信息来辅助生成回答。传统大模型就像是一个只靠记忆答题的学生,在面对知识盲区时容易“编造”答案,出现“幻觉”问题,而且知识更新困难,难以处理垂直领域的专业知识。而RAG则像是给这个学生提供了一本参考资料,让它可以“带着资料答题”,从而大幅提升回答的准确性和可靠性。具体来说,RAG解决了以下几个关键问题:

• “幻觉”问题:通过检索真实的文本片段,让大模型基于事实生成回答,减少胡说八道的情况。比如在回答专业性较强的医学问题时,大模型如果仅依靠自身记忆,可能会给出错误的药物使用剂量或治疗方法,而RAG引入真实的医学文献片段,能有效避免这类错误。

• 知识时效性:大模型训练成本高昂,无法频繁更新知识。RAG可以随时从最新的知识库中检索信息,让模型的回答与时俱进。以金融市场信息为例,大模型无法实时更新数据,但RAG可以及时检索到最新的股票价格、市场动态等信息。

• 领域专业壁垒:接入私有知识库,让大模型瞬间变身“领域专家”,回答专业领域的问题。在法律领域,将法律法规、案例库等作为知识库,RAG能帮助大模型准确回答法律条文解读、案例分析等问题。

• 长文本窗口受限:将超长文档拆分成小块建索引,按需检索最相关的片段,突破大模型上下文长度的限制。当处理上万字的学术论文时,RAG可以将其合理分块,精准检索与问题相关的部分,而不是受限于模型有限的上下文窗口。

二、RAG工作原理及公式详解

RAG的工作流程主要分为两个阶段:准备阶段(提问前)和回答阶段(提问后)。

(一)准备阶段

  1. 分片(Chunking/Splitting):将长文档切分成一个个语义相对独立、长度适中的小片段(chunk)。这一步非常关键,切分的好坏直接影响后续的召回和生成质量。主流的切分策略有:

◦ 固定长度切分:按照固定的token数(如256、512、1024)进行切分,允许相邻片段有一定的重叠(如20 - 50 token),以保持上下文的连贯性。公式可以简单表示为:将文档按长度L进行划分,每个chunk长度为l,重叠长度为o,那么chunk数量n = (L - o) / (l - o) 。例如,一篇长度为2048 token的文档,设定每个chunk长度为512 token,重叠长度为50 token ,则chunk数量n = (2048 - 50) / (512 - 50) ≈ 4.32,向上取整为5个chunk。

◦ 递归字符切分:优先按段落、句子、单词的顺序进行切分,尽量不断句,保证语义完整。例如,先将文档按段落划分,再将段落按句子划分,最后将句子按单词划分。对于一篇包含多个段落的新闻报道,先划分段落,再对每个段落中的句子进行细分,这样能更好地保留文本的语义结构。

◦ 语义切分:先将文档按句子或段落转化为向量,通过计算连续段向量的余弦相似度,在相似度骤降的地方进行切分,确保每个chunk主题一致。余弦相似度公式为:

,其中 \vec{A} 和 \vec{B} 是两个向量。当处理一篇科技论文时,通过语义切分可以将不同研究部分的内容准确划分,避免将不相关的内容放在同一个chunk中。

◦ 结构切分:利用文档中的标题、列表、表格等标记,将“一节”“一张表”“一段代码”等整体作为一个chunk。对于技术文档,其中的代码块、图表说明等可以通过结构切分单独作为chunk,方便后续检索和利用。

◦ LLM智能切分:让大模型阅读文档后,自行判断在哪里切分能保证语义完整。这种方法效果最佳,但成本也最高。比如利用GPT-4对一篇复杂的学术论文进行切分,它能根据论文的逻辑结构和语义关系,给出最合理的切分方案,但调用大模型的费用相对较高。

  1. 索引(Indexing):将切分好的文本块转化为向量,并构建向量索引。这一步主要包括两个子步骤:

◦ 向量化(Embedding):在机器学习和自然语言处理领域,Embedding是一种将离散的、符号化的数据(如词语、句子)映射到连续的、低维向量空间中的技术 。以文本为例,每个文本块被送入Embedding模型(如BGE、E5、OpenAI的text - embedding - ada - 002等) 。从数学原理来讲,假设我们有一个包含N个单词的文本块,经过Embedding模型处理后,每个单词w_i会被映射为

,整个文本块就可以表示为一组向量。这些向量能够在高维空间中表示文本的语义,向量之间的距离越近,表示原文本语义越接近。例如,对于文本“苹果是一种水果”和“香蕉是一种水果”,经过Embedding模型处理后,它们的向量在空间中的距离会比较近,因为它们都表达了水果相关的语义。

◦ 索引构建:将“文本块—向量”对写入向量数据库(如FAISS、Chroma、Pinecone等)。向量数据库内部会建立近似最近邻索引(如HNSW、IVF等),把高维向量组织成图或簇结构,以便后续查询时能在毫秒级返回与问题向量最接近的k个文本块。以HNSW索引为例,它通过构建分层的图结构,在高层使用长连接快速缩小搜索范围,在底层使用短连接保证搜索精度,从而实现快速的向量检索。当用户查询“水果有哪些营养成分”时,向量数据库能通过HNSW索引快速找到与该问题向量最接近的文本块向量,进而返回对应的文本块内容。

(二)回答阶段

  1. 召回(Retrieval):当用户提问时,系统首先将问题通过与文档相同的Embedding模型转化为向量,然后在预先构建好的向量索引中进行最近邻搜索,找出最相关的k个文本块。召回阶段的流程如下:

◦ 统一编码:使用同一个经过训练的语义编码器,将问题和知识库中的文本都压缩成固定长度的语义向量,使它们处于同一语义空间,便于比较。比如使用E5模型对问题“苹果有什么营养”和知识库中的文本进行编码,将它们都转化为相同维度的向量。

◦ 构建索引:知识库的全部向量被放入支持“最近邻快速查找”的索引结构中,索引只保存向量和指向原文的指针,不保留原文本身。以Chroma向量数据库为例,它会将文本块向量和对应的指针信息存储起来,构建高效的索引结构。

◦ 在线查询:用户输入问题后,编码器立刻将问题转化为向量,并送到索引中进行查询。索引利用预先构建的图或聚类信息,快速锁定一批候选向量。例如,当用户输入问题“香蕉的产地有哪些”,索引会根据其构建的结构,迅速定位到可能相关的向量。

◦ 相似度计算:对候选向量逐一计算与问题向量的语义距离,常用的计算方法有余弦相似度、欧氏距离等。距离越小,表示内容越接近。余弦相似度公式为

通过计算余弦相似度,找出与问题向量余弦相似度最高的k个向量,确定最相关的文本块。欧氏距离公式为

同样可以用于衡量向量间的距离 ,进而判断文本相关性。

◦ 返回片段:根据相似度计算结果,按距离从小到大排序,挑出最靠前的k条结果,并根据向量对应的指针取出原始文本片段作为召回结果输出。如果k设置为5,那么就会返回余弦相似度最高的5个文本块。

  1. 重排(Reranking):召回的结果可能包含一些不太相关的文本块,重排环节就是对这些候选段落进行重新排序,筛选出最相关的内容。Rerank通过计算候选文档与用户查询之间的语义匹配度,重新排序候选文档,从而提升语义排序的精度。其核心原理是对每个候选文档与用户查询之间的相关性进行评分,并根据评分高低对文档进行排序,最终返回按相关性从高到低排列的文档列表 。具体工作机理如下:

◦ 输入构造:对每个候选段落,将其与查询拼成一段联合文本,并在两者之间插入特殊分隔标记,形成统一格式的输入序列。例如,将问题“苹果有哪些营养成分?”与候选段落“苹果富含维生素C”拼成“苹果有哪些营养成分?苹果富含维生素C” 。

◦深层交互编码:将联合文本送入一个经过交叉注意力训练的Transformer模型。模型内部让查询的每个词与段落里的每个词做双向关注,捕捉细粒度匹配信号,如实体对齐、同义改写、上下位关系等。当处理问题“苹果和香蕉哪个更有营养”时,Transformer模型会对问题和候选段落中的“苹果”“香蕉”“营养”等关键词进行深度分析,判断它们之间的关系。从数学角度来看,Transformer模型中的注意力机制可以表示为:

其中Q是查询向量,K是键向量,V是值向量,d_k是键向量的维度 。通过这种注意力计算,模型可以更好地捕捉文本间的语义关联。

◦ 相关性打分:Transformer的最后一层输出被池化成单一向量,再接一个小型前馈网络,输出一个介于0到1的相关度分数。分数反映该段落回答查询的可能性,分数越高,相关性越强。比如经过打分,“苹果富含多种维生素和矿物质,对人体健康有益”这个段落的相关度分数为0.8,而“苹果是一种常见的水果”相关度分数为0.5。

◦ 结果重排与截断:按分数降序排列所有候选;若系统有“top - k”限制,则只保留前k条;若需多样性,可在排序后做去重或聚类微调,再输出最终顺序。如果设置top - k为3,那么就只保留分数最高的3个段落作为最终结果。

  1. 生成(Generation):将重排后的相关文本块与用户问题一起作为输入,送入大模型(如GPT - 4、文心一言、通义千问等),大模型基于这些信息进行理解和推理,生成最终的回答。大模型通过对输入文本的学习和理解,根据自身的语言生成能力,结合检索到的相关信息,生成符合逻辑和语义的回答。当输入问题“苹果有哪些营养成分”以及重排后的相关文本块“苹果富含维生素C、维生素E、钾等营养成分”后,大模型会生成详细的回答,如“苹果富含多种营养成分,其中维生素C具有抗氧化作用,能增强免疫力;维生素E有助于保护细胞;钾元素对维持心脏正常功能有重要作用”。

三、RAG代码实现示例

下面以Python为例,使用LangChain库来实现一个简单的RAG系统,假设我们有一些本地的文档,要实现对这些文档的智能问答。

(一)安装依赖

pip install langchain openai faiss - cpu tiktoken

(二)导入必要的库

import os
from langchain.document_loaders import DirectoryLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.vectorstores import FAISS
from langchain.chains import RetrievalQA
from langchain.llms import OpenAI

(三)加载文档

# 从指定目录加载文档
loader = DirectoryLoader('your_docs_directory', glob='**/*.txt')
documents = loader.load()

(四)文本分块

# 使用递归字符切分器,设置每个chunk的大小和重叠部分
text_splitter = RecursiveCharacterTextSplitter(chunk_size = 1000, chunk_overlap = 200)
texts = text_splitter.split_documents(documents)

(五)向量化并存储到向量数据库

# 使用OpenAI的Embedding模型
embeddings = OpenAIEmbeddings(openai_api_key=os.getenv('OPENAI_API_KEY'))
# 将文本向量存储到FAISS向量数据库
docsearch = FAISS.from_documents(texts, embeddings)

(六)创建RAG问答链

# 使用OpenAI的大模型和检索器创建问答链
qa = RetrievalQA.from_chain_type(llm=OpenAI(openai_api_key=os.getenv('OPENAI_API_KEY')),
                                 chain_type="stuff",
                                 retriever=docsearch.as_retriever())

(七)进行问答

# 输入问题并获取回答
question = "你的文档中关于苹果的内容是什么?"
result = qa.run(question)
print(result)

通过以上代码,我们实现了一个简单的RAG系统,能够从本地文档中检索相关信息并回答问题。在实际应用中,还可以根据需求对代码进行优化和扩展,例如更换不同的Embedding模型、大模型,调整文本分块策略和向量数据库等。比如可以尝试使用BGE模型替换OpenAIEmbeddings进行文本向量化,观察对结果的影响;也可以调整text_splitter的chunk_size和chunk_overlap参数,找到最适合文档内容的分块方式。

四、RAG在实际场景中的应用案例

(一)智能客服

在电商领域,RAG可以帮助客服机器人快速准确地回答用户的问题。例如,当用户询问某款商品的特点、使用方法、售后服务等问题时,客服机器人可以通过RAG从商品知识库中检索相关信息,然后生成回答。这样不仅提高了回答的准确性和效率,还能减轻人工客服的压力。以淘宝客服为例,当用户询问某款手机的拍照功能时,客服机器人通过RAG检索到该手机摄像头参数、拍照模式介绍等文本块,经过重排和生成,为用户提供详细准确的回答,提升用户购物体验。

(二)智能文档问答

企业内部往往有大量的文档,如技术文档、操作手册、规章制度等。员工在查找信息时可能会花费大量时间。利用RAG技术,可以构建智能文档问答系统,员工只需输入问题,系统就能从文档库中检索相关内容并给出答案,大大提高了信息获取的效率。在一家软件公司中,开发人员需要查询某段代码的功能和使用方法,通过RAG系统,能够快速从代码注释、技术文档中找到相关内容,节省开发时间。

(三)法律领域

律师在处理案件时,需要查阅大量的法律法规和案例。RAG可以帮助律师快速检索相关法律条文和类似案例,为案件的处理提供参考,提高工作效率和准确性。当律师处理一起合同纠纷案件时,通过RAG系统检索到相关的合同法条文、以往类似案件的判决书等信息,为撰写辩护词提供有力支持。

五、RAG的发展趋势和未来展望

(一)多模态融合

未来RAG可能会融合图像、音频、视频等多模态信息,实现对多种类型数据的检索和生成。例如,在智能视频问答中,不仅可以根据文本信息检索相关视频片段,还能根据视频中的图像内容进行检索,从而生成更全面、准确的回答。当用户询问某个电影中某个场景的具体情节时,RAG系统可以通过分析视频中的图像、字幕等多模态信息,准确检索到相关片段并生成详细回答。这需要在技术上解决多模态数据的统一表示和融合问题,开发出能够处理多种数据类型的Embedding模型和检索算法。

(二)与知识图谱结合

知识图谱能够以结构化的方式表示知识,RAG与知识图谱结合,可以更好地利用知识之间的关联关系,提高检索和生成的效果。例如,在智能医疗领域,通过知识图谱可以将疾病、症状、药物等知识进行关联,RAG系统在回答问题时可以利用这些关联知识,提供更专业、准确的诊断建议和治疗方案。当用户询问某种疾病的治疗方法时,RAG系统结合知识图谱中该疾病与相关药物、治疗手段的关联信息,给出更全面、科学的回答。这需要进一步研究如何将知识图谱的结构信息融入RAG的检索和生成过程,提高模型对知识的理解和运用能力。

(三)模型轻量化和高效化

随着 RAG 从云端向智能终端、工业传感器等边缘设备延伸,模型轻量化与高效化需求显著提升。当前大尺寸 Embedding 模型和复杂检索框架在端侧部署时,存在算力不足、延迟高、能耗大的问题,难以适配实时交互、移动场景。未来将聚焦三大突破方向:一是轻量化模型设计,通过知识蒸馏、量化压缩等技术,将 Embedding 模型参数规模大幅缩减,适配边缘算力;二是高效检索算法优化,基于近似最近邻(ANN)框架提升检索速度,满足低延迟需求;三是硬件协同适配,针对 ARM、FPGA 等硬件优化计算逻辑,降低能耗与内存占用。例如智能手表语音问答可通过本地轻量化 RAG 实现,兼顾成本与隐私保护。


如何系统学习掌握AI大模型?

AI大模型作为人工智能领域的重要技术突破,正成为推动各行各业创新和转型的关键力量。抓住AI大模型的风口,掌握AI大模型的知识和技能将变得越来越重要。

学习AI大模型是一个系统的过程,需要从基础开始,逐步深入到更高级的技术。

这里给大家精心整理了一份全面的AI大模型学习资源,包括:AI大模型全套学习路线图(从入门到实战)、精品AI大模型学习书籍手册、视频教程、实战学习、面试题等,资料免费分享

1. 成长路线图&学习规划

要学习一门新的技术,作为新手一定要先学习成长路线图方向不对,努力白费

这里,我们为新手和想要进一步提升的专业人士准备了一份详细的学习成长路线图和规划。可以说是最科学最系统的学习成长路线。

在这里插入图片描述

2. 大模型经典PDF书籍

书籍和学习文档资料是学习大模型过程中必不可少的,我们精选了一系列深入探讨大模型技术的书籍和学习文档,它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础(书籍含电子版PDF)

在这里插入图片描述

3. 大模型视频教程

对于很多自学或者没有基础的同学来说,书籍这些纯文字类的学习教材会觉得比较晦涩难以理解,因此,我们提供了丰富的大模型视频教程,以动态、形象的方式展示技术概念,帮助你更快、更轻松地掌握核心知识

在这里插入图片描述

4. 大模型行业报告

行业分析主要包括对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。

在这里插入图片描述

5. 大模型项目实战

学以致用 ,当你的理论知识积累到一定程度,就需要通过项目实战,在实际操作中检验和巩固你所学到的知识,同时为你找工作和职业发展打下坚实的基础。

在这里插入图片描述

6. 大模型面试题

面试不仅是技术的较量,更需要充分的准备。

在你已经掌握了大模型技术之后,就需要开始准备面试,我们将提供精心整理的大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。

在这里插入图片描述

全套的AI大模型学习资源已经整理打包,有需要的小伙伴可以微信扫描下方CSDN官方认证二维码,免费领取【保证100%免费

Logo

更多推荐