RAG - 基本原理
1 RAG是什么?
**RAG(Retrieval Augmented Generation,检索增强生成)**是一个将大规模语言模型(LLM)与来自外部知识源的检索相结合的框架,以改进问答能力的工程框架。
1.1 LLM的知识更新难题
- LLM的训练数据集是固定的,一旦训练完成就很难再通过继续训练来更新其知识。
- LLM的参数量巨大**,随时进行fine-tuning需要消耗大量的资源**,并且需要相当长的时间。
- LLM的知识是编码在数百亿个参数中的,无法直接查询或编辑其中的知识图谱。
核心手段是利用外挂于LLM的知识数据库(通常使用向量数据库)存储未在训练数据集中出现的新数据、领域数据等。通常而言,RAG将知识问答分成三个阶段:索引、知识检索和基于内容的问答
1.2 RAG的优点
- 可以利用大规模外部知识改进LLM的推理能力和事实性。
- 使用LangChain等框架可以快速实现原型。
- 第一阶段的知识索引可以随时新增数据,延迟非常低,可以忽略不计。因此RAG架构理论上能做到知识的实时更新。
- 可解释性强,RAG可以通过提示工程等技术,使得LLM生成的答案具有更强的可解释性,从而提高了用户对于答案的信任度和满意度。
1.3 RAG的缺点
- 知识检索阶段依赖相似度检索技术,并不是精确检索,因此有可能出现检索到的文档与问题不太相关。
- 在第三阶段生产答案时,由于LLM基于检索出来的知识进行总结,可能缺乏一些基本世界知识,从而导致无法应对用户询问知识库之外的基本问题。
- 向量数据库是一个尚未成熟的技术,缺乏处理大量数据规模的通用方案,因此数据量较大时,速度和性能存在挑战。
- 在推理时需要对用户输入进行预处理和向量化等操作,增加了推理的时间和计算成本。
- 外部知识库的更新和同步,需要投入大量的人力、物力和时间。
- 需要额外的检索组件,增加了架构的复杂度和维护成本。
1.4 改进方式
- 检查和清洗输入数据质量。
- 调优块大小、top k检索和重叠度。
- 利用文档元数据进行更好的过滤。
- 优化prompt以提供有用的说明。
2 RAG的基本步骤
- Embedding - 知识索引
- Vector Store - 知识检索
- Query
- Answering Your Question - 生成答案
2.1 Embedding
使用embedding模型对文档进行embedding操作
**原理:**将文档的句子或单词块转换为数字向量。就向量之间的距离而言,彼此相似的句子应该很近,而不同的句子应该离得更远
2.2 Vector Store
矢量存储 - 数据库
比如:ChromaDB、FAISS或Pinecone
**原理:**矢量存储就像一个数据库,但顾名思义,它对矢量嵌入进行索引和存储,以实现快速检索和相似性搜索
2.3 Query
文档已经嵌入并存储,当你向LLM提出特定问题时,它会embedding你的查询,并在向量存储中找到余弦相似度最接近你问题的句子
2.4 Answering Your Question
一旦找到最接近的句子,它们就会被注入到Prompt中,LLM现在可以在没有经过任何再训练或微调的情况下回答有关数据的特定问题
参考文献:
[1] RAG从入门到精通-RAG简介
[2] LLM之RAG实战(一):使用Mistral-7b, LangChain, ChromaDB搭建自己的WEB聊天界面