RAG 学习完结篇:思考与总结

165 阅读4分钟

关于RAG的学习,准备到这里暂时告一段落。在当前的学习过程中发现实际落地还是要依托于更加确定的业务场景和业务数据,但目前来说并没有遇到很合适的继续发展下去的场景。因此,准备暂时搁置RAG,继续探索其他方向。本文是对这段时间学习依赖的一些总结和思考。

整体总结

RAG的学习过程中,我思考和调研了一些问题,并大致为RAG系统落地设计了以下的应用架构/逻辑架构。大致如下。(真实的业务场景会更加复杂,但应该也只是基于这个核心架构上进行扩展。)

whiteboard_exported_image.png

落地问题总结

从业务流程上看,RAG系统的主要流程包括:

  1. 将知识进行收集,清洗。
  2. 构建索引。
  3. 用户查询。

但在每一步流程的实际落地中,可能都会遇到不同的问题和挑战:

数据收集

数据收集流程中的难点和挑战主要是如何对不同形态的知识进行统一的处理。以企业知识库应用为例,企业中的知识以不同的形式进行承载。例如pdf,txt, doc,excel等。不同形式的承载物中还可能包含多模态的信息,比如pdf文档中可能包括图片,表格等多模态信息。还可能包括一些排版信息,比如pdf文档中的双栏,多栏等信息,需要保证解析之后的上下文内容的顺序一致性。 学习期间我曾调研过关于pdf的解析,虽然有一些基于规则或者基于大模型的识别方法理论上可以解决一部分问题,但实际应用场景中可能还是会存在一些特定业务场景下的问题。

构建索引

构建索引时需要考虑的问题包括:构建的索引种类。是只构建向量索引?还是构建bm25或者图索引?构建不同索引时,索引的粒度如何?结构如何?索引中是否还需要包含一些元信息?以向量索引为例,向量数据库应该选择哪个?embedding模型选择什么?构建向量索引时需要对文本内容进行分块(chunk),应该依据何种粒度去进行分块呢?索引如何更新?

这些是在索引构建过程中主要考虑的问题。对于学习而言网络上基本上能找到合适的答案。但实际落地场景中,会面临各种挑战。

用户查询

用户查询流程中可能面临的问题包括:如何理解用户查询的真正意图?理想场景下查询时用户往往能准确表达除他们的诉求,但实际落地场景中大概率是比较模糊的。因此需要对用户的真实意图进行理解,一般通过意图识别模块或者多次询问的方式去理解。另一个问题是:如果是企业应用,如何让用户在RAG查询的过程中只访问到符合自己权限的文档内容?(一些数据库将权限做到了数据库功能中)

其他问题

除了上述描述的功能性问题外,还可能包括一些其他的问题。比如,如何进行系统性能的度量?一些论文中可能给出了一些参考指标,例如根据用户查询,检索内容和生成答案之间的关系,提出了一些忠实度等度量标准,但实际落地的过程中肯定需要包括更多适合业务度量的标准。还可能需要考虑基于强化学习的认知对齐方法,来纠正生成结果的认知。需要安全栅栏进行毒性检测,避免输出有毒内容等。

写在最后

学习RAG有一段时间了,从6月底到9月中旬从大模型出发,逐步学习和深入RAG相关的内容。在这个过程中不断更新对RAG的认知,并尝试去对RAG系统进行初步设计。设计过程中思考了一些问题,也基本都找到答案。但实际想要落地时发现还是缺少业务场景和真实数据。对于构建企业知识库来说,我没有足够的文档数据和实际的业务场景。对于构建个人智能助手来说,有很多现成的工具可以使用,似乎没有太大的必要来构建起整个系统(收益太低)。对我而言学习RAG的下一步仿佛走进了死胡同,因此暂时放一放,告一段落,探索探索新的方向。

如果有实际的业务场景,也欢迎一起交流~。