使用 RAG 时需要注意以下几点:
RAG技术无疑是AI领域的一个重要技术,但了解其局限性和正确使用方法同样重要。这一章节,我们来聊聊大家在学习了RAG了之后常见的一些误区。[heading2]随意输入任何文档就能得到准确回答[content]这是最常见的误区,这也是我写这篇文章的一个主要原因之一。很多人在了解了RAG之后,尤其是看过很多营销号的内容之后,感觉像捡到了宝贝。这会给人一种错觉:好像随意的输入任何文档就可以得到准确的回答。上文我们已经讲了RAG的流程,主要包含:离线环节:文档解析,文档切割以及向量化写入向量数据库在线检索环节:用户问题理解、初步检索、重排序以及大模型生成上述的任何一环节而言都会影响RAG的最终质量。尽管RAG的基本概念不难理解,但有效实现RAG系统需要考虑多个复杂因素,如文档预处理、高效索引、相关性排序等。这些都需要专业知识和持续优化[heading2]RAG完全消除了AI的幻觉[content]虽然RAG可以显著减少幻觉,但并不能完全消除。模型仍可能在检索到的信息基础上进行不当的推理或生成错误信息。简单来讲:只要有大模型参与,就有可能产生幻觉[heading2]RAG不消耗大模型的Token了[content]从上面的最后大模型生成结果环节可以看出,最终还是将知识库中检索的结果给到LLM。然后由LLM进行重新整理输出,所以RAG仍然是消耗大模型的Token的请注意:RAG技术并不是简单的将知识库的内容直接检索出来给到用户,而是要经过大模型的处理,从而生成上下文更通顺的回答
如果检索到的知识是无效的,会严重影响LLM应用的表现,因此将检索过程的精确度和召回率与整个LLM应用程序分开进行研究尤为重要。如下图所示,需要建立一个评估框架,将检索性能与整个LLM应用程序隔离开来。所以这里需要既需要从模型角度出发评估生成结果的质量,也需要从检索的角度出发,用精确度和召回率评估检索,并评估整个系统。模型角度(generation)回答真实性:模型结果真实性多高(少一些模型幻觉)回答相关度:结果和问题有多相关,不能南辕北辙检索角度(retrieval)召回率(recall):相关信息有多少包含在返回的检索内容里,越全越好准确率(precision):返回的检索内容中有用信息占比多少,越多越好RAGAS是一个用于RAG评估的知名开源库,推荐使用:[https://github.com/explodinggradients/ragas](https://github.com/explodinggradients/ragas)[heading3]RAG局限性[content]如果LLM应用面临的问题与上下文有关,那么RAG就是一个强大的工具。它使模型能够访问外部数据源,提供模型训练数据中不存在的必要上下文。这种方法可以显著提高模型的性能,尤其是在最新信息或特定领域信息至关重要的情况下。为模型提供参考文本的情况下,也能大大降低模型幻觉。需要注意的是RAG的局限性如下:适合打造专才,不适合打造通才。虽然能够为模型提供新的信息、专有领域知识等,但并不适合为模型提供通用领域知识。让模型保持稳定的风格或结构输出,降低token消耗等。也就是我们在prompt工程局限性的后两点,而这两点需要使用微调技术解决。
从用户提出问题开始:我们经历了用户问题的理解根据用户问题进行路由进行初步的检索对初步检索的结果进行重排序现在终于要到了生成结果的时候了,这个环节的流程可以简化如下:将重排序后的结果和用户的查询意图组合成上下文输入给大模型大模型通过指定的提示词生成输出结果这个环节理解起来很简单,但是同样有几个需要注意的点重排序的结果通常不会都被用作大模型的上下文,因为大模型的上下文有限制可以设置一个阈值进行截断,比如只使用前3-5个文档可以设置一个相关性分数的阈值,只取相关性分数大于某个值的文档一些先进的RAG系统会对选中的文档进行摘要或压缩,以在有限的空间内包含更多相关信息。[heading3]后置处理[heading3][content]在大模型输出结果后就是一些后置的处理了,这可能包括敏感内容检测和移除格式化输出.....这些不是本文的重点,我们就不再这里展开了至此,关于普通的RAG的原理基本就全部讲完了,非常感谢你能耐心看到这里!这里我再引用智谱清言的一张图给大家复习,看完上述流程,我理解这张图理解起来更容易