下图是open AI开发者分享的一个RAG Success story。他们使用RAG为金融领域的客户将问答准确率从原始的45% 提升到98%,这之间的差值是53%,因为这是全球最佳案例,我们也没有OpenAI那么高的人才密度,打个八折大概是40%,这就是40%的暴论来源。

之前有人提过在AI时代,大模型的能力占到80%,意味着留给应用开发者的空间只有20%。

- 模型层LLM的能力: 影响为40%。
- 模型层SFT 微调:影响为10%。主要考虑微调投入的成本高,同时需要大量的高质量数据,因此可能不适用于大多数情况,所以定比例为10%。
- 应用层RAG: 影响为40%,理由如上。且相对微调模型性价比更高,适用于更多的情况。
- 用户层:影响为10%。不是说UE不重要,而是我们在移动互联网已经积攒了非常成熟的UE能力,做起来不会那么难了。
在重点讲RAG技巧前,我们介绍一下什么是RAG,详细的解读网上已经很多,本文仅做简单介绍。
1. What:用一个比喻说明什么是RAG
我们经常把大模型比作一个大学生。
- 没有RAG: 相当于面试的时候问大学生”你是如何看xx公司的?“。
- 有了RAG: 相当于对已经入职的大学生说“去我们公司的资料库里查查,出一个关于这个公司的调研报告”
“查阅资料库”就相当于是RAG,全称是Retrieval Argumented Generation — 检索增强生成。意思是:
把检索(资料库)的结果发给大模型,以增强大模型的生成能力。
说实话RAG入门很容易,我的开发伙伴(公众号AI小智)在带病情况下,大概用了一个周末完成coding。不过要想做好可不容易。这大概就像:你把两批同样的资料派给不同的公司管理,还让不同人去查,二者都能得到答案,但要找到好答案可不是一件容易的事情。事实上,连OpenAI自己都说RAG比想象中困难,看到这里我也就释然了。

接下来就来讲讲在这40%空间中,我们能折腾些啥东西(包括openAI开发者分享中提到的几个手段)。
2. How: RAG 流水线概述
首先,RAG不是一个单项技术,它是一个流水线,行话叫pipeline。只有对流水线上的每一步骤都进行精细打磨,最后才能出来效果,我们的目标就是努力使每个环节都达到尽可能准确,向openAI的最佳实践案例接近,从而保证最终的结果。

接下来我们对这个RAG Pipeline中的各个环节做一个概念介绍。为了好理解,这里都会拿”查阅资料库“来类比。
1.数据提取:类比于资料库的资料来源。主要目标是确保资料数据完整,除此之外,还可以新生成一些数据,比如利用大模型对资料进行summary,打标签,以便于后续处理更高效。
2.分块(Chunking) :类比于资料应该拆分到多细来存储,用梗话来说就是“对齐颗粒度”。 比如按段落拆,按句子拆,按单词拆等等。
3.向量化(Embedding): 类比于把拆分后的内容转换为计算机可处理的向量形式。向量化就是把一个物体拆成多个维度表达。举个例子,假设书可以从以下八个维度去表达。

那么对于某一本特定的书《思考的快与慢》对应的向量值就是八维空间的一个点,计算机就是通过这些点来定义事物。同样,语言文字也可以被向量化,且语言都已经有成熟的向量模型,比如智源的开源embedding模型bge-large-zh-v1.5有1024个维度。在RAG做向量化中,我们可以直接使用这些成熟的语言向量模型,也可以对这些模型微调后再使用。
4.创建索引:类比于把向量化后的资料块进行分类、整理,按照一定顺序放在对应位置后给出序号,方便后面的检索查找。索引可以建多个,比如书可以按照图书分类排序,也可以按照出版时间排序。至此,你的资料库终于建好了,接下来就是根据具体问题在这些资料库中查找了。
5.检索环节(Retriever):类比于在资料库找相关资料。系统会根据用户的提问,在索引中查找最相关的数据块。主要目标就是找到和问题匹配度高的资料(注意此时还没有形成答案)。
6.检索评估 : 大多数文章中会漏掉评估的环节,往往被开发者忽视,没有评估等于盲走。这里的评估可以是手动评估,也可以是机器评估。机器评估就是魔法打败魔法,比如用GPT4-tubo根据你的资料给生成问答对,然后再让它给检索结果打分。到这一轮openAI 的案例中可以将准确率提升到65%。
讲到这里我们停一下。实际上到这一步之前,在技术上和互联网的搜索逻辑是类似的(其中有少部分措施比如HyDE是大模型之后才出来的embedding 方法),我们统称为“语义检索” 阶段。 意味着如果你公司内部的知识库已经具备“语义搜索”能力,那么通过嫁接下面两步就可以实现基于LLM的问答应用了。这也是Rerank模型cohere在官网(Say Goodbye to Irrelevant Search Results: Cohere Rerank Is Here)上的建议:
接下来的环节是大语言模型LLM出来后特有的阶段。
7. 重排序(Rerank):语义检索出来的结果相当于是资料初筛,讲究的是效率,重排序顾名思义就是对初步检索结果进行重排序,以便得到更精确的结果。如果说第一轮检索是初赛,那么重排序就是复赛。Rerank也有大型机构给出的重排序模型。
8. 重排评测:和语义检索阶段一样,在重排序之后,我们也应该有一个评估机制。目前看到机构的实验结果可以将命中率提升至90% ,而openAI 的案例中是85%。
9.生成(Generator):这一步对应的就是系统终于找到了最准确的资料,将资料整理总结,形成完整报告。实际上就是将重排序后的资料片段加上用户的提示词,提供给大型语言模型LLM,由 LLM 根据上下文生成最终的输出。在这个过程中,主要在提示词、上下文、意图识别方面下功夫。
10.终极评估: 这一轮的评估指标和检索、重排序指标不一样,现在有专门用于评估RAG的框架RAGAS等,后面会讲到。目前openAI的案例中最终结果是98%。
总的来说,RAG流程玩的是一条流水线上的组合拳(此处不是互联网黑话),对于应用开发者来说,比拼的就是对不同的场景该怎么打这套组合拳。接下来我们详细在每一步看看都有哪些组合拳,不一定全,但大体可以把它当做一个手册随时对比查看。接下来请欣赏RAG 组合拳大串烧~~
3. RAG中的数据采集
在RAG流程中,数据提取是第一步,相对其他步骤来说这一步较为可控。它的目标是保证数据完整、准确、易读,包括:
- 内容完整:不要漏掉内容,包括图片、文本、表格等。
- 内容准确:比如PDF文件中使用OCR识别时,尽可能避免识别错误。
- 关系完整:比如要保留段落层级关系、图片与图片说明的关系。
- 元数据完整:即数据本身的属性,比如文档标题、生成时间,某段字的字体大小、颜色等。
4. RAG 文档分块
分块简单来说就是对齐颗粒度。举个例子,针对同样一篇文章,用户提出如下两个问题
- ChatGPT是哪天发布的?
- ChatGPT的发布对人类有什么影响?
第一个问题是快问快答,简明扼要回答就好,需要分块到句子单位。第二个问题需要详细陈述,可能需要分块到段落单位。如何分块也是个技术活,主要考虑以下几个重要因素,我个人按照重要程度排序如下:
- 用户诉求的长度和复杂性:这将影响分块策略的选择,以确保查询结果的相关性和准确性。比如刚刚提到的例子,但问题是这种例子在同一产品中会混合存在,那么就需要同一资料有不同的分块策略。
- 资料库内容本身的长短:比如对于微博、小红书这类的资料库,内容本身就短小精悍,分到句子、甚至短语,可能都不具备分块到段落的程度。对于博客、论文就可以采用不同的分块方法。
- 根据你选择的Embedding模型匹配的最佳块大小:不同的模型可能在不同大小的块上表现最佳。例如,某些模型在单个句子上表现良好,而另一些则可能在较大块上效果更好。而且现在也有些Embedding模型本身就会支持不同量级的分块,以便达到更好的检索结果。比如智源的BGE-M3 embedding模型就会支持不同颗粒度的输入。

4.成本要求: chunk size 越大,意味着在生成这一步要发给LLM的token数就越多,成本越高。
5.响应时间要求:有开发者按照不同chunk size做了实验,可以看出同样的任务当chunk越大,响应时间越长。不过相应的Faithfulness 和Relevancy 会提升。参考文章3 《评估分块影响》
总之,在考虑以上因素的情况下,chunk size是个权衡多方面的”实验性工程“ ,大家知道影响根据诉求选用就好。分块的方法有多种,包括但不限于:
- 固定大小分块:这是一种简单直接的方法,通过设定块的大小和是否有重叠来决定分块。
- Content-Aware分块:基于内容意图的分块,利用正在分块的内容的性质,并应用更复杂的分块策略。
- 句分割:使用诸如句号、换行符等标点符号来分割句子。
- 递归分割:使用不同的分隔符或标准对生成的块进行递归调用,直至得到所需大小的块。
- 专门分块:适用于Markdown和LaTeX等结构化内容,保留内容的原始结构和格式。
5. RAG embedding
前文所说,embedding就是将文字转换成向量(如果想进一步了解embedding的可以参考文章《详细了解embedding的创建过程》)。对于文字来说,已经有大型机构提供了现成的embedding 模型,应用开发者要做的就是:
- 评测
- 必要时微调embedding模型。
5.1 评测embedding 模型:
目前有开源的评测结果,对主流的embedding模型针对不同测试集、不同任务有对应的分数,可以找到和你最接近的数据集,主要看Retrieval任务的表现来进行初筛(详见参考文章5 《github上开源的评测结果》,不过openAI的embedding模型没有开源,也没有评测结果,目前无脑推荐开源免费的智源BAAI/bge-large-zh模型,评分比较高且免费)。
然后再用自己的测试集去跑出最佳Embedding 模型,如何评测Embedding 模型llamaindex有封装好函数,参考《如何评测embedding模型》有示例代码。
5.2 微调embedding 模型
微调embedding 模型不是必须的,且成本较高(注:OpenAI的最佳案例中也因为成本高而放弃这一策略)。目前看到有网友的实验结果对整体的提升大概是5%左右,如何微调llamaIndex也提供了微调的套件,主要步骤包括:
- 使用大模型生成问答对生成训练集。
- 将训练集作为输入来微调embedding模型
- 使用测试集来评测微调前后的效果。
6. RAG 创建索引
索引就是将向量化后的资料内容(chunk)按照一定规则排列好,目的是能让用户快速查找想要的东西。比如纸质新华字典里,就是把汉字用音序或者笔画顺序排列,书籍的目录也是一种索引。
刚刚提到chunk 已经被向量化了,我们很自然的想到将chunk用向量作索引,这也的确是最常见的方法。但索引方式还有很多种,比如按照元数据中的标签,文档创建时间等都可以用来创建索引。
在参考文章《RAG索引》中提到了几种索引:
- 列表索引,这是一种简单的数据结构,它将文档存储为节点序列。这种索引适合于检索包含特定关键字的文档,尤其适用于性能重要但开发时间有限的项目。
- 向量存储索引,它将文档文本转换成向量形式,通常由编码器transformer模型生成。这种索引适用于查找语义上相似的文档,并且可以扩展到大规模数据集。
- 树索引,它将文档存储在树状结构中,每个节点代表其子文档的摘要。树索引适用于快速缩小搜索范围,并具有良好的扩展性。
- 关键字表索引,它将文档的关键字存储在表格中,适用于查找包含特定关键字的文档。然而,它在处理多关键字查询时的效率较低。
6.1 知识图谱索引
知识图谱表达的是一种关系,比如通过下图你可以看到多个实体间的关系,在下图中,假如没有知识图谱,Melinda和微软就没有关系,但是有了知识图谱,就可以知道Melinda的老公是Bill Gates,而Gates创建了微软,Melinda就和微软有了间接关系。

在法律案件中,我们经常要面对错综复杂的任务关系,那么如果有知识图谱作为索引,搜索就会变得非常快。实际上知识图谱已经深入我们日常生活,比如淘宝会给你推荐看过该商品的人还看过xx商品,其实是你和该商品的购买人之间通过商品建立了间接关系。
总之每种索引都有其适用场景和局限性,用户应根据具体需求和数据特点选择合适的索引类型。llamaindex都有相应的调用方法和代码示例。
索引建好之后就是检索。
7. RAG 检索
检索对应的就是在建好索引的资料库里寻找你要的东西。也有不同的方式,大家综合考虑来使用。
首先来说说OpenAI的案例中提到的一种方式:HyDE Retrieval,全称是”Hypothetical Document Embeddings Retrieval。参考文章《HyDE》中对其定义如下图所示,简单说就是:把用户的问题先发给LLM回答一遍,将得到的答案来用于检索,而不是直接把用户的问题和资料库进行匹配。

不过HyDE也并不总是有效,在openAI的案例中该方法被尝试但后因效果不好被放弃。在参考文章《HyDE代码与评测》中,给出了用llamaindex实现HyDE代码以及HyDE可能引起的负面影响。
除了HyDE之外,更常见的检索方式参考文章《langchain检索》(有代码示例),各方法对应的场景也有明确列出(如下图)。

至此,第一轮的检索结束,我们可以进行检索评测。
8. RAG embedding 检索评测
前文也提到,这一步之前的逻辑在技术上和互联网的搜索逻辑是类似。评测指标也类似:
- 命中率
- 召回率
- 平均倒(读三声)数排名MRR
三个指标不做解释,大家参考《检索评估指标》。
llamaindex中提供了具体评测方法,代码实现参考《embedding 检索评测》,文章中的示例是使用GPT-4生成的问答对作为测试集,大家在评测时直接用自己的数据集就可以。
9. 第一阶段检索总结
至此,我们完成了第一轮的检索。对应open AI给出的最佳案例第二个阶段:65%,当然在这个案例中,openAI并没有使用HyDE retrieval 和FT Embedding(微调Embedding) ,这两项画❌。

OpenAI的开发者给出的描述是:
- HyDE retrieval 在某些case中有效,但在这个案例中无效。
- FT Embedding在精确度上有所提升,但是因为成本原因,最终没有使用。
那么,如何系统的去学习大模型LLM?
作为一名从业五年的资深大模型算法工程师,我经常会收到一些评论和私信,我是小白,学习大模型该从哪里入手呢?我自学没有方向怎么办?这个地方我不会啊。如果你也有类似的经历,一定要继续看下去!这些问题啊,也不是三言两语啊就能讲明白的。
所以我综合了大模型的所有知识点,给大家带来一套全网最全最细的大模型零基础教程。在做这套教程之前呢,我就曾放空大脑,以一个大模型小白的角度去重新解析它,采用基础知识和实战项目相结合的教学方式,历时3个月,终于完成了这样的课程,让你真正体会到什么是每一秒都在疯狂输出知识点。
由于篇幅有限,⚡️ 朋友们如果有需要全套 《2025全新制作的大模型全套资料》,扫码获取~

👉大模型学习指南+路线汇总👈
我们这套大模型资料呢,会从基础篇、进阶篇和项目实战篇等三大方面来讲解。


👉①.基础篇👈
基础篇里面包括了Python快速入门、AI开发环境搭建及提示词工程,带你学习大模型核心原理、prompt使用技巧、Transformer架构和预训练、SFT、RLHF等一些基础概念,用最易懂的方式带你入门大模型。

👉②.进阶篇👈
接下来是进阶篇,你将掌握RAG、Agent、Langchain、大模型微调和私有化部署,学习如何构建外挂知识库并和自己的企业相结合,学习如何使用langchain框架提高开发效率和代码质量、学习如何选择合适的基座模型并进行数据集的收集预处理以及具体的模型微调等等。

👉③.实战篇👈
实战篇会手把手带着大家练习企业级的落地项目(已脱敏),比如RAG医疗问答系统、Agent智能电商客服系统、数字人项目实战、教育行业智能助教等等,从而帮助大家更好的应对大模型时代的挑战。

👉④.福利篇👈
最后呢,会给大家一个小福利,课程视频中的所有素材,有搭建AI开发环境资料包,还有学习计划表,几十上百G素材、电子书和课件等等,只要你能想到的素材,我这里几乎都有。我已经全部上传到优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费】

相信我,这套大模型系统教程将会是全网最齐全 最易懂的小白专用课!!
7151

被折叠的 条评论
为什么被折叠?



