RAG全系列之[RAG 概念扫盲]
RAG作为打造个性化大模型应用的基础流程正持续火爆,不少项目已推向用户。那RAG究竟是什么?简单说,就是让大模型基于特定知识生成答案,而非泛泛内容。本文将分享RAG的实战经验与应对这些挑战的思路,值得探索大模型应用者一读。
目前自己的项目就是RAG类的,目前已经推向用户使用,所以先从RAG上,分享我自己的想法与经验,欢迎大家交流学习。写文章的目的是想践行费曼学习法,把逻辑尽可能说的简单,所以有些概念并不一定严谨,如果偏差,欢迎大家指正。
什么是RAG?
檢索增強生成(Retrieval-AugmentedGeneration,RAG),读起来非常绕口,我理解的核心就是就是基于让大模型在做生成的时候,能够基于你的知识生成答案,而不是那种通用的泛泛内容。
传统的RAG流程
从网络上找了一个通用的RAG的流程,简单总结一下,
1、就是将大模型需要的各种知识先进行向量化存储到数据库里面,
2、然后用户询问的时候从数据库找相近的知识,
3、检索出来之后进行重排序(rerank),获取最终的检索结果,将检索结果作为背景知识给到LLM生成大模型,获得基于你的背景知识的回复。
至于一般常说的chunks、多路召回等,都是在这个基础上做的迭代与改进,至于为什么要改进,我在后续的文章中,再跟大家分享我遇到的坑。
解释几个核心的技术概念
什么是向量化
抛开技术实现原理不看,大家简单理解,就是他可以一定程度显示语义,可以识别语义的相似度。
为什么需要重排序(rerank)
既然向量化已经能够解决语义相似性了,为什么还需要rerank这一步?
因为向量化他只是一定程度的解决语义相似性问题,但是区分的并不是很好,rerank它可以更加准确的区分语义,特别是看起来非常接近的概念。例如法律领域的买方、卖方,医学领域中各种病症的名词,这种差之毫厘,失之千里。这个就是rerank存在的意义,进一步识别语义。
LLM生成大模型是什么
其实这个就是我们常说的大模型。豆包、GPT5等都是说的这个大模型,所以前面的动作都是铺垫,都是准备内容,让这一步LLM大模型获取更加准确的知识,生成更加贴近我们场景的内容。
RAG应用场景
为什么RAG会这么火爆,因为他是打造自己的大模型应用的基础流程,只有把你的知识塞给大模型后,大模型才能生成你个性化的内容,不然大家为什么不直接使用豆包呢?
目前最常见的场景,就是搭建一个企业内部的知识问答工具,企业知识都是沉淀到企业内部的,必须要通过检索工具,给到大模型,大模型才能基于公司的场景进行专业回复。
如果想搭建自己的Agent,RAG的理念/流程基本必不可少。例如你想搭建一个二次元/游戏领域聊天大模型,你就必须能够把二次元相关的最新信息给他才行(市面上的大模型基本都是按照轮次训练的,并不会自带最新的信息)。例如你问他梦幻西游129五开,
目前主力攻克的方向
幻觉问题
幻觉问题,很大一部分来源于大模型不知道他不知道,他以为他知道了,就开始跟你一顿胡吹,然后他还不知道他错了,这种在小众领域/企业内部专有名词上,表现的尤为严重,我们目前也是在主力解决这个问题。
目前市面上针对这种,相对成熟的方向是让AI自建知识图谱,然后通过图关系的形式,理解知识,但是坦白来说,例如KAG(蚂蚁开源)、LightRAG,都无法做到开箱即用,还是需要我们自己不断尝试。
上下文长度问题
目前当我们给的背景知识长度太长之后,会导致回答显著变慢,影响用户体验。更致命问题,就是大模型会产生注意力缺失,就像别人给我们上了一整堂课之后,大模型自己会自己忽略掉很多细节。然后就觉得背景知识明明有,但是为什么大模型回答不出来的问题。
那么能不能给到大模型真正需要的知识?那么就需要我们在文档拆分、知识检索、知识重排的准确性很高才行。这里面每个又都是一个难点。如果后续大模型本身迭代,能够优化长上下文准确性,整个流程就简化很多了
多跳问题
多跳(multi-hop):问题需要把多个信息点结合起来,经过“推理链”才能得到答案。例如你问大模型,过去5年,哪个省份GDP增长幅度最大。这种场景就需要大模型自己检索过去N年的各个省份的数据,然后综合对比,获得增长幅度最大的结果。
这种场景在分析类RAG非常场景,目前主流的步骤是采取问题拆解、分别检索、综合获取最终答案,但是这种问题拆解难度很高。更加趋势类的做法是AgenticRAG,采取类似MCP理念,让AI自己问题拆分、检索、分析,基于分析结果再继续拆分、检索……。
指定遵从问题
很多时候,我们要求大模型不要自己YY,要参考我们的知识,但是很多时候,模型的遵从性并不好。甚至之前,我们要求按照json返回,模型都无法100%做到(最新的模型,结果格式的遵从性好很多了)