内容参考于:图灵AI大模型全栈
RAG它实际上存在一些问题,需要考虑这些问题该怎样解决
RAG的流程
1.加载文件
2.读取文件中的文本
3.分割文本
4.文本向量化
5.存储到向量数据库
6.通过问题检索文档
7.检索完之后,把检索到的文档和问题拼接到一起组成一个新提示词,去问大模型回答问题
在一个论文中说了RAG的七个问题
论文地址:https://arxiv.org/pdf/2401.05856
如下图:论文中的图片,下图里的内容是索引和检索的过程
如下图红框是索引(Index Process)的过程,Documents是我们准备好的文档,Chunker是对文档进行分割,Chunks是分割后的文档,Database表示分割后的文档向量化并存放到向量数据库中,然后它的问题(MissingContent)
第一个就是说我们准备的文档中并没有答案,RAG就是为了解决幻觉和大模型不知道的问题,但是某些问题在我们准备的文档中就是没有答案,这种问题是一定存在的
第二个文档加载的效率和准确性的问题,pdf文档里面有图片、表格、文字信息这就是属于很复杂的文档,我们该如何保证这种复杂文档的加载和准确性,最主要的是保证准确性
第三个我们加载文档后,会对文档进行分割,怎么分割?分割的力度该怎样设置?依据是什么?检索出来的文档分片会不会影响上下文的完整性和Token消耗量
下图红框是检索过程(Query Process),Query是问题、Rewriter是问题重写(有些问题写的不好所以要重写)、NewQuery(重写之后的新问题)、Retriever(通过问题检索文档)、Chunks(检索到分片之后文档,在llamaindex中也就是节点Node)、Reranker(对文档进行重排)、RrankedChunks(重排之后的文档)、Consolidator(融合)、ProcessedChunks(融合之后的文档,也就是整理文档)、Reader(把"问题"和"上下文(文档)"拼在一起,生成提示词,准备问大模型)、Response(去问大模型获得答案)
然后它的问题
Missed Top Ranked:就是说检索出8个文档,排名靠前的文档和问题并不相关,和问题相关的文档可能排在第五、第六这样的
Not in Context:提取出来的上下文和问题无关,就是检索出来的文档和问题的相似度评分很低,我们就非要让它检索出5个文档,它就把不相关的5个文档提取了出来
Wrong Format:大模型返回的内容格式不正确,我原本是要json格式的数据,大模型它给我们返回的是纯文本
Incomplete:答案不完整,大模型根据问题只回答了一部分的答案
Not Extracted:我们给大模型的文档中存在答案,但是大模型没有识别出来,比如检索出10个文档,答案排在第5、第6、第7位置,大模型一般会关注与前面和后面几个,中间的会识别不好
Incorrect Specificity:答案不够详细或过于详细,



