RAG 的全称是:Retrieval Augmented Generation(检索增强生成)
最初来源于 2020 年 Facebook 的一篇论文:Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks(是的,你没有看错,2020 年就有这项技术了)。
这篇论文要解决的一个问题非常简单:如何让语言模型使用外部知识(external knowledge)进行生成。
通常,pre-train 模型的知识存储在参数中,这就导致了模型不知道训练集之外的知识(例如搜索数据、行业的 knowledge)。
之前的做法是有新的知识就再重新在 pre-train 的模型上 finetune。
这样的方式会有几个问题:
- 每次有新的知识后都需要进行 finetune
- 训练模型的成本是很高的
于是这篇论文提出了 RAG 的方法,pre-train 的模型是能够理解新的知识的,那么我们直接把要让模型理解的新知识通过 prompt 的方式给它即可。
所以一个最小的 RAG 系统就是由 3 个部分组成的:
- 语言模型
- 模型所需要的外部知识集合(以 vector 的形式存储)
- 当前场景下需要的外部知识
langchain, llama-index 本质上就是做的这套 RAG 系统(当然还包括构建在 RAG 上的 agent)。