什么是RAG检索增强生成?它解决了大模型的哪些问题?
RAG(Retrieval-Augmented Generation,检索增强生成)是一种结合了信息检索和内容生成的AIl技术架构。简单来说,就是让AI在回答问题之前先去查资料,基于查到的真实信息来生成答案,而不是完全依赖训练时学到的知识。 RAG的核心工作方式是”先检索,再生成”。当用户提出问题时,系统首先从知识库中检索相关文档,然后把这些文档作为上下文提供给大模型,引导模型基于这些真实材料生成回答。这就像考试时可以翻书查资料,而不是纯靠记忆答题。 RAG主要解决了大模型的三大痛点。第一是知识时效性问题,大模型的知识来自训练数据,往往存在时间滞后,而RAG可以实时获取最新信息。第二是幻觉问题,大模型有时会编造不存在的信息,RAG通过提供真实文档作为依据,能显著减少胡编乱造。第三是知识边界问题,大模型无法访问私有数据或专业领域知识,RAG可以连接企业内部文档、专业资料等外部知识源。
RAG相比微调的优势
相比模型微调(Fine-tuning),RAG的优势很明显。微调需要大量高质量数据和计算资源,而且一旦训练完成,知识就固化了,更新很麻烦。RAG则不需要重新训练模型,只需要更新知识库就行,实施成本低、更新灵活。当然,两者也可以结合使用,用微调提升模型的基础能力,用RAG补充具体知识。
RAG的完整工作流程是怎样的?核心步骤有哪些?
RAG的完整工作流程可以分为离线准备和在线查询两个阶段,包含四个核心步骤。 离线准备阶段(知识库构建): 第一步是文档收集和切割。把各种格式的文档(PDF、Word、网页等)加载进来,然后切割成小块(chunk)。切割很重要,因为一次性处理整个文档效果不好,切成小块更便于精准检索。一般每块500-1000字符比较合适。第二步是向量转换和存储。用Embedding模型把每个文档块转换成向量(一串数字),然后存入向量数据库。向量能够表示文本的语义,语义相近的文本向量也相近。这样就把文档从人类能读懂的文字变成了计算机能计算的数字。 在线查询阶段(问答生成): 第三步是查询和检索。用户提出问题,系统同样用Embedding模型把问题转成向量,然后在向量数据库中搜索最相似的文档块。这个过程叫相似度检索,通常返回Top-K个最相关的文档。第四步是增强和生成。把检索到的文档跟用户问题组合起来,构造一个完整的Prompt,发给大模型。模型看到这些参考资料后,就能基于真实信息生成答案,而不是凭空想象。
RAG中的Embedding向量化是什么?如何工作的?
Embedding(嵌入或向量化)是把文本转换成数字向量的技术,是RAG系统的核心基础。简单理解,就是给每段文字分配一个”身份证号”,这个号码是一串数字(向量),能代表文字的含义。Embedding的工作原理是通过深度学习模型,把文本映射到高维向量空间。比如一段话可能被转换成一个1536维的向量,也就是1536个数字组成的数组。神奇的地方在于,语义相近的文本,它们的向量在空间中的距离也很近。比如”猫”和”小猫”的向量会很接近,而”猫”和”汽车”的向量就离得很远。 在RAG系统中,Embedding承担着关键角色。离线阶段,所有文档块都要经过Embedding模型转换成向量存储。在线阶段,用户的问题也要转成向量。然后通过计算问题向量和文档向量的相似度,就能找出最相关的文档。这个过程比传统的关键词匹配更智能,因为它理解语义,而不只是匹配字面。
RAG为什么需要向量数据库?它和传统数据库有什么区别?
RAG需要向量数据库的核心原因是高效的相似度检索。向量数据库专门为存储和搜索高维向量设计,能快速找到跟查询向量最相似的向量,这正是RAG检索环节需要的能力。 传统数据库(如MySQL、MongoDB)擅长精确匹配查询,比如查找”D=123”的记录、“名字=张三”的用户。但它们不擅长相似度搜索,无法高效地找出”跟这个向量最相似的10个向量”。虽然传统数据库也能存储向量,但在海量数据上做相似度计算会 非常慢。向量数据库的核心优势在于专的索引结构。它使用HNSW、VF等索引算法,能在千万甚至亿级向量中快速找到最相近的。传统数据库要遍历所有记录计算距离,O(n)的复杂度。向量数据库通过索引,复杂度能降到O(logn)甚至更低。这就是为什么在RAG中必须用向量数据库。
RAG和模型微调Fine-tuning有什么区别?如何选择?
RAG和Fine-tuning是两种让AI获取特定知识的不同路径,核心区别在于知识的存储方式和获取方式。 RAG把知识存在外部知识库中,AI需要时去查询。就像学生考试可以翻书,书是外部的,随时可以更新。RAG不需要改变模型本身,只需要维护好知识库就行。实施快、成本低、更新灵活是RAG的最大优势。 Fine-tuning是通过训练让模型”记住”知识,知识被编码进模型参数里。就像学生把知识背下来,成为内在能力的一部分。微调需要准备训练数据、投入计算资源、等待训练完成。实施周期长、成本高,但一旦训练好,响应速度快,而且能改变模型的行为风格。
RAG中如何计算文本相似度?常见算法有哪些?
RAG中的文本相似度计算是通过比较向量之间的距离或角度来实现的。文本已经被Embedding模型转换成了向量,相似度计算就变成了纯数学问题。 最常用的是余弦相似度(Cosine Similarity)。它计算两个向量之间的夹角,角度越小,相似度越高。余弦相似度的值在-1到1之间,1表示完全相同,0表示无关,-1表示完全相反。余弦相似度的优点是不受向量长度影响,只看方向,这在文本相似度计算中很合适。 第二常用的是欧氏距离(Euclidean Distance)。它计算两个向量在空间中的直线距离,距离越小越相似。欧氏距离的问题是受向量度影响,在高维空间中可能不够稳定,所以在RAG中用得相对少一些。 还有点积(Dot Product),它就是把两个向量对应位置的数字相乘再求和。点积越大,相似度越高。如果向量都是归一化的(长度为1),点积和余弦相似度其实是等价的。很多向量数据库会在存储时就把向量归一化,这样用点积计算更快。
如何构建和使用向量索引?HNSW和IVF有什么区别?
向量索引是向量数据库提升检索速度的关键技术。没有索引,检索需要遍历所有向量计算相似度,复杂度O(n)。有了索引,复杂度可以降到O(logn)甚至更低,速度提升几个数量级。构建索引的基本流程是:先把向量数据导入数据库,然后选择索引类型和参数,数据库会根据向量分布构建索引结构。索引构建完成后,检索时数据库会利用索引快速定位相似向量,而不是暴力搜索。索引需要一定的构建时间和存储空间,但换来的是查询速度的大幅提升。 HNSW(Hierarchical Navigable Small World)是当前最流行的索引方法。它构建了一个分层的图结构,每层是一个小世界网络。检索时从最顶层开始,快速缩小范围,然后逐层向下,最终在底层精确搜索。HNSW的优点是检索速度快、准确率高,缺点是构建索引较慢、占用内存较多。适合检索频率高、对准确率要求高的场景。 VF(Inverted FileIndex)先把向量聚类成多个区域,检索时先找到最可能的几个区域,然后只在这些区域内搜索。VF的优点是构建快、内存占用小,缺点是准确率稍低,因为目标向量可能不在被选中的区域。适合超大规模数据、对准确率要求不是特别高的场景。
RAG中如何设计Prompt来有效利用检索到的文档?
RAG中的Prompt设计要让大模型明确知道:这些是参考资料,要基于这些资料回答,不要编造。一个好的RAG Prompt通常包含三部分:系统指令、检索文档、用户问题。 系统指令部分要明确告诉模型色和行为准则。比如”你是一个知识助手,请基于提供的文档回答问题。如果文档中没有相关信息,请明确说明,不要编造答案。“这样的指令能减少幻觉,让模型老实回答。 检索文档部分要有清晰的格式和边界。用分隔符(如###、---或XML标签)把文档括起来,让模型清楚哪部分是参考资料。可以给每个文档编号,方便模型引用。如果文档有标题或来源,也要包含进去,这些信息有助于模型理解和引用。 用户问题部分要放在最后,直接明了。有时候还可以加一些引导,比如”请结合上述文档回答:{问题”、“请引用文档中的具体内容回答:{问题}“。这种引导能让模型更好地利用文档。