背景:当前大型语言模型(LLM)的主要问题
幻觉问题:大型模型基于概率原理构建,这导致在需要极高精确度的场景中,仅依赖生成式回答可能不够严谨。目前采用的常见解决方案包括前置BERT模型或通过大量预设的prompt进行优化,但这些方案不能完全解决大模型偶尔“胡说八道”的问题。
新鲜度问题:随着模型规模的增大(参数数量和tokens数量的增加),训练成本也相应提高。例如,像OpenAI的ChatGPT3.5这样的模型,其数据的新鲜度仅能维持到2021年,对于之后发生的事件则一无所知。对于需要高时效性的信息,大型模型往往显得力不从心。
数据安全问题:OpenAI已经面临过几次关于隐私数据泄露的投诉。对于企业而言,将商业机密如经营数据和合同文件上传至互联网的大型模型是不可行的。为了在保证数据安全的同时利用AI技术,最佳策略是将所有数据保留在本地,确保企业数据的业务计算在本地完成。
为了解决纯参数化模型的局限,语言模型可以采取半参数化方法,将非参数化的语料库数据库与参数化模型相结合。这种方法被称为RAG
RAG——即Retrieval Augmented Generation,检索增强生成——其核心作用在于生成最终答案,但在此之前,它会先对现有文档进行检索,而不是完全依赖LLM的自主生成。
RAG的工作流程
RAG的工作流程包括以下几个步骤:
检索(Retrieve):根据用户请求,从外部知识源检索相关上下文。这一过程使用嵌入模型将用户查询嵌入到与向量数据库中的附加上下文相同的向量空间中,实现相似性搜索,并返回最接近的前k个数据对象。
增强(Augment):检索到的附加上下文与用户查询一起被填充到提示模板中。
生成(Generate):最后,检索增强后的提示被送入LLM以生成答案。

RAG的问题和优化方法
尽管RAG的基本架构流程相对简单,其数据单向流通的特点使得系统构建迅速,但要真正投入生产环境使用,还有很长的路要走。
检索质量问题:低精度的检索可能导致检索到的文档与查询内容相关性不高,从而影响大型模型合成准确答案的能力。
回应质量问题:在缺乏足够上下文的情况下,模型可能生成错误信息,或生成的答案与查询问题不相关。更严重的是,有时生成的回应可能包含有害或偏见性内容。
为了解决这些问题,提出了高级RAG和模块化RAG的概念:
高级RAG通过「Pre-Retrieval」和「Post-Retrieval」优化,重点在于对检索数据进行细致的准备和优化,以及对检索结果进行重排序和过滤,确保最相关的信息被优先处理。
模块化RAG的核心在于将功能解耦,作为独立的模块进行处理,包括「搜索」、「预测」、「记忆」、「评估」、「验证」和「对齐」等外层模块,以及内层的「检索」、「重排序」、「重写」和「阅读」等核心过程。
在处理信息和响应用户查询的过程中,模块化RAG采用了多种信息处理流程,例如,Advanced RAG模式中包括了「重写」→「检索」→「重排序」→「阅读」的路径,这在提高检索和生成内容的质量方面尤为有效。