#task03链接Datawhale
一、什么是RAG
RAG(检索增强生成,Retrieval Augmented Generation)是一种结合了外部知识检索与生成模型的技术,用以解决大模型在实际应用中可能存在的几个问题:
-
知识局限性:基础大模型的知识主要来源于训练数据,对于实时性或非公开的知识,大模型可能无法掌握。RAG通过检索外部知识库,使模型能够获取和利用最新或专有的知识。
-
数据安全性:为了保护企业的数据安全,不必将敏感数据纳入模型训练集,而是通过RAG在生成过程中动态检索和引用外部数据,避免了数据泄露的风险。
-
大模型幻觉:由于大模型是基于概率生成的,有时会出现“胡说八道”的情况。通过RAG方法,生成模型能够参考外部知识,从而减少这种幻觉的发生,生成更准确和可靠的答案。
RAG的方法主要包括三个步骤:检索外部知识、结合上下文生成答案,以及输出增强后的生成结果。这使得大模型在复杂场景中能够更好地应对挑战。
二、完整的RAG链路
RAG(Retrieval-Augmented Generation)系统的两个主要步骤:离线计算和在线计算。:
离线计算:
- 文档解析与清洗:首先解析知识库中的文档,将其切割为短文本块(Chunks),并进行清洗和去重。
- 向量化与索引:将所有文本块转换为向量表示,这一步称为向量化或索引。向量化过程通常在离线完成,并将生成的向量存储在数据库中,如Milvus。
在线计算:
- 用户查询与检索:当用户发出查询时,首先通过向量模型将查询转换为向量,然后与数据库中的所有向量计算相似度,检索出最相近的文本块。
- 召回与精排:为了提高检索效率,先进行召回,快速获取可能相关的文本块,然后通过精确的向量相似度计算,筛选出最优结果。
- 重排:在知识库较大时,加入重排步骤,使用重排模型优化结果,使得最相关的文本块排名靠前。
- 生成响应:最终,从检索出的文本块中挑选最相似的结果,与用户查询拼接成Prompt,输入到大模型中生成回复,从而完成整个RAG链路。
三、RAG框架
目前,开源社区中已经涌现出了众多RAG框架,例如:
-
TinyRAG:DataWhale成员宋志学精心打造的纯手工搭建RAG框架。
-
LlamaIndex:一个用于构建大语言模型应用程序的数据框架,包括数据摄取、数据索引和查询引擎等功能。
-
LangChain:一个专为开发大语言模型应用程序而设计的框架,提供了构建所需的模块和工具。
-
QAnything:网易有道开发的本地知识库问答系统,支持任意格式文件或数据库。
-
RAGFlow:InfiniFlow开发的基于深度文档理解的RAG引擎。
四、RAG案例实战
PAI实例创建创建流程与速通手册一致~
通过环境准备与模型下载,本次我们选用基于BERT架构的向量模型 bge-small-zh-v1.5
,它是一个4层的BERT模型,最大输入长度512,输出的向量维度也为512。(模型在魔搭平台的地址为 AI-ModelScope/bge-small-zh-v1.5。)
向量模型下载~
# 向量模型下载
from modelscope import snapshot_download
model_dir = snapshot_download("AI-ModelScope/bge-small-zh-v1.5", cache_dir='.')
下载完成后~