最近在不断地学习RAG相关的知识,这个学习过程中对于RAG的认知也在不断地改变。这篇文章主要记录一些当前最新的想法。
在之前的学习过程中,我们了解到一次RAG查询的基本工作流程如下:
在这个过程中,在将查询提交给大模型之前,会使用构建好的索引库来找到关联的上下文信息,并将整合后的结果提交给生成器去做生成。但我觉得这个过程其实可以进一步抽象:
这里使用了一个隐式的LLM(方便理解后续Agent的抽象)。可以看到此时的查询过程为:由LLM决策,使用检索工具进行检索,然后将检索工具的返回结果和查询再次交给大模型判断,此时大模型的不再调用工具,而是生成答案,返回最终结果。对上图做下简单的调整,可以得到如下所示:
将检索内容抽象为工具,那么RAG的查询流程就可以抽象为这样的流程。如果对Agent较熟悉的话,可以看出这其实就是一个Agent的处理流程。 所以在这里我觉得RAG其实可以抽象成Agent的,这样的话,Agent构建过程中的一些解决方案也可以类似的迁移到RAG系统中来。
基于上面抽象的基础之上,索引能力就可以单独抽出来去做自己的构建,这部分内容和传统的搜索系统比较契合,可以考虑按照传统搜索系统的方式进行构建。这部分就需要进一步去学习搜索系统的构建了。
感觉RAG系统的设计和落地可以参考Agent应用框架+搜索系统。