一、什么是RAG
在大模型应用中,RAG(Retrieval-Augmented Generation,检索增强生成)是一种结合信息检索与文本生成的技术,旨在提升生成内容的准确性和时效性。以下是其核心要点:
RAG的核心机制
检索(Retrieval):当用户输入问题时,系统首先从外部知识库(如数据库、文档集或互联网)中检索相关信息。检索方法可能包括关键词匹配(如BM25)或语义相似度搜索(如向量嵌入模型)。
生成(Generation):将检索到的相关内容与大语言模型(如GPT)结合,生成更精准、可靠的回答。模型基于检索结果进行上下文理解,避免依赖自身可能过时或片面的知识。
RAG的优势
- 动态知识更新:无需重新训练模型,即可通过更新外部知识库获取最新信息。
- 提高准确性:减少模型"幻觉"(生成虚假信息),尤其在专业领域或时效性强的场景。
- 灵活性:可适配不同领域的知识库(如医疗、法律或企业内部文档)。
RAG主要解决的问题
信息偏差/幻觉:LLM 有时会产生与客观事实不符的信息,导致用户接收到的信息不准确。RAG 通过检索数据源,辅助模型生成过程,确保输出内容的精确性和可信度,减少信息偏差。
知识更新滞后性:LLM 基于静态的数据集训练,这可能导致模型的知识更新滞后,无法及时反映最新的信息动态。RAG 通过实时检索最新数据,保持内容的时效性,确保信息的持续更新和准确性。
内容不可追溯:LLM 生成的内容往往缺乏明确的信息来源,影响内容的可信度。RAG 将生成内容与检索到的原始资料建立链接,增强了内容的可追溯性,从而提升了用户对生成内容的信任度。
领域专业知识能力欠缺:LLM 在处理特定领域的专业知识时,效果可能不太理想,这可能会影响到其在相关领域的回答质量。RAG 通过检索特定领域的相关文档,为模型提供丰富的上下文信息,从而提升了在专业领域内的问题回答质量和深度。
推理能力限制:面对复杂问题时,LLM 可能缺乏必要的推理能力,这影响了其对问题的理解和回答。RAG 结合检索到的信息和模型的生成能力,通过提供额外的背景知识和数据支持,增强了模型的推理和理解能力。
应用场景适应性受限:LLM 需在多样化的应用场景中保持高效和准确,但单一模型可能难以全面适应所有场景。RAG 使得 LLM 能够通过检索对应应用场景数据的方式,灵活适应问答系统、推荐系统等多种应用场景。
长文本处理能力较弱:LLM 在理解和生成长篇内容时受限于有限的上下文窗口,且必须按顺序处理内容,输入越长,速度越慢。RAG 通过检索和整合长文本信息,强化了模型对长上下文的理解和生成,有效突破了输入长度的限制,同时降低了调用成本,并提升了整体的处理效率。
RAG的整体流程
向量模型与重排模型
要基于大模型进行RAG操作,不可缺失的就是向量模型和重排模型。其中向量模型的主要作用是将文本(如文档或用户查询)转换为高维向量(Embedding),将文本转换成用浮点呈现的数组,后续查询知识数据时将基于数组进行相似度搜索;而重排模型对向量模型初步检索的结果(如Top 100相关文本块)进行精细化排序,筛选出最相关的Top K(如Top 5)输入生成模型。
| 维度 | 向量模型 | 重排模型 |
|---|---|---|
| 核心目标 | 快速召回候选文档(高召回率) | 精准排序候选文档(高准确率) |
| 计算效率 | 高效(批量编码+快速相似度计算) | 较低(需逐条计算查询-文档交互) |
| 模型复杂度 | 相对简单(双塔结构) | 复杂(交互式结构,如BERT) |
| 常用模型 | bge-base | bge-rerank |
| 应用阶段 | 检索阶段(初步召回) | 后处理阶段(精细化排序) |
由于这两个模型都是transformers模型,所以我们可以使用transformers原生加载模型调用,或者使用sentence_transformers来加载模型调用。下面的调用案例中,我们将使用sentence_transformers加载向量模型,使用transformers加载重排模型。调用前需要安装对应的依赖。
下图是RAG的整体流程,过程包括:加载文件 -> 读取文本 -> 文本分割 -> 文本向量化 -> 问句向量化 -> 在文本向量中匹配出与问句向量最相似的top k个 -> 匹配出的文本作为上下文和问题一起添加到prompt中 -> 提交给LLM生成回答。
二、ModelScope的大模型下载方法
2.1 下载安装
conda activate chat_py_server1 pipinstallmodelscope pipinstalltorch pipinstallsentence-transformers pipinstalltransformers pipinstallllama-index pipinstallllama-index-llms-huggingface pipinstallFlagEmbedding国内模型官网:https://www.modelscope.cn/
2.2 CoRom文本向量库-中文-通用领域模型
2.2.1 下载
去官网复制模型id,下载模型代码:
frommodelscope.hub.snapshot_downloadimportsnapshot_download snapshot_download(model_id="iic/nlp_corom_sentence-embedding_chinese-base",cache_dir="D:/AI_Model/modelscope")