RAG(RetrievalAugmented Generation)即检索增强生成,是一种结合检索和生成能力的自然语言处理架构,旨在为大语言模型(LLM)提供额外的、来自外部知识源的信息。
大模型需要 RAG 进行检索优化,是因为 LLM 存在一些缺点:
1. LLM 无法记住所有知识,尤其是长尾知识,受限于训练数据和学习方式,对长尾知识的接受能力不高。
2. LLM 的知识容易过时且不好更新,微调效果不佳且有丢失原有知识的风险。
3. LLM 的输出难以解释和验证,存在内容黑盒、不可控以及受幻觉干扰等问题。
4. LLM 容易泄露隐私训练数据。
5. LLM 的规模大,训练和运行成本高。
RAG 具有以下优点:
1. 数据库对数据的存储和更新稳定,不存在模型学不会的风险。
2. 数据库的数据更新敏捷,可解释且对原有知识无影响。
3. 数据库内容明确、结构化,加上模型的理解能力,可降低大模型输出出错的可能。
4. 知识库存储用户数据,便于管控用户隐私数据,且可控、稳定、准确。
5. 数据库维护可降低大模型的训练成本,新知识存储在数据库即可,无需频繁更新模型。
RAG 的核心流程是根据用户提问,从私有知识中检索到“包含答案的内容”,然后把“包含答案的内容”和用户提问一起放到 prompt(提示词)中,提交给大模型,此时大模型的回答就会充分考虑到“包含答案的内容”。其最常见应用场景是知识问答系统。
一个 RAG 的应用可以抽象为 5 个过程:
1. 文档加载:从多种不同来源加载文档,LangChain 提供了 100 多种不同的文档加载器,包括 PDF 在内的非结构化数据、SQL 在内的结构化数据,以及 Python、Java 之类的代码等。
2. 文本分割:文本分割器把 Documents 切分为指定大小的块,称为“文档块”或者“文档片”。
3. 存储:涉及将切分好的文档块进行嵌入转换成向量的形式,并将 Embedding 后的向量数据存储到向量数据库。
4. 检索:通过某种检索算法找到与输入问题相似的嵌入片。
5. 输出:把问题以及检索出来的嵌入片一起提交给 LLM,LLM 会通过问题和检索出来的提示一起来生成更加合理的答案。
2025-02-03