RAG系列一:初识RAG

张开发
2026/4/16 14:45:32 15 分钟阅读

分享文章

RAG系列一:初识RAG
一、RAG介绍RAG(Retrieval-Augmented Generation)检索增强生成通过为大模型接入外部知识库将传统生成式大模型与实时检索技术相结合为大模型补充来自外部的相关数据和上下文提升大模型问答准确率解决大模型幻觉和实效性问题。检索根据用户的输入从外部知识库中检索出相关的信息这一步通常是把多模态数据表示成向量通过向量检索得到最相关的信息。增强将用户的查询内容跟检索到的相关知识一起放到提示词模板里。生成将经过检索增强的提示词输入到大模型中通过大模型推理得到最终的输出结果。二、应用流程完整的RAG应用流程主要包含两个阶段数据准备阶段数据提取 -- 文本分割 -- 向量化(embedding) -- 数据入库应用阶段用户提问 -- 数据检索(召回) -- 注入Prompt -- LLM生成答案2.1 数据准备阶段数据准备一般是一个离线的过程主要是将私域数据向量化后构建索引并存入数据库的过程。主要包括数据提取、文本分割、向量化、数据入库等环节。2.1.1数据提取数据加载包括多格式数据加载、不通数据源获取等根据数据自身情况将数据处理为同一范式。数据处理包括数据过滤、压缩、格式化等。元数据获取提取数据中关键信息例如文件名、Title、时间等。2.1.2文本分割文本分割主要考虑两个因素1) embedding模型的Token限制情况 2) 语义完整性对整体的检索效果的影响。一些常见的文本分割方式如下句分割以句的粒度进行切分保留一个句子的完整语义。常见切分符包括句号、感叹号、问号、换行符等。固定长度分割根据embedding模型的token长度限制将文本分割为固定长度(例如256/512个tokens),这种切分方式会损失很多语义信息一般通过在头尾增加一定冗余量来缓解。2.1.3向量化(embedding)向量化是一个将文本数据转化为向量矩阵的过程该过程会直接影响到后续检索的效果。目前常见的embedding模型如表中所示这些embedding模型基本能满足大部分需求但对于特殊场景例如涉及一些罕见专有词或字等或者想进一步优化效果则可以选择开源Embedding模型微调或直接训练适合自己场景的Embedding模型。模型名称模型描述获取地址ChatGPT-EmbeddingChatGPT-Embedding由OpenAI公司提供以接口形式调用。链接ERNIE-Embedding V1ERNIE-Embedding V1由百度公司提供依赖于文心大模型能力以接口形式调用。链接M3EM3E是一款功能强大的开源Embedding模型包含m3e-small、m3e-base、m3e-large等多个版本支持微调和本地部署链接BAEBGE由北京智源人工智能研究院发布同样是一款功能强大的开源Embedding模型包含了支持中文和英文的多个版本同样支持微调和本地部署。链接2.1.4数据入库数据向量化后构建索引并写入数据库的过程可以概述为数据入库过程适用于RAG场景的数据库包括FAISS、Chromadb、ES、milvus等。一般可以根据业务场景、硬件、性能需求等多因素综合考虑选择合适的数据库。2.2 应用阶段在应用阶段可以根据用户的提问通过高效的检索方法召回与提问最相关的知识并融入Prompt大模型参考当前提问和相关知识生成相应的答案。关键环节包括数据检索、注入Prompt等。2.2.1数据检索常见的数据检索方法包括相似性检索、全文检索等根据检索效果一般可以选择多种检索方式融合提升召回率。相似性检索即计算查询向量与所有存储向量的相似性得分返回得分高的记录。常见的相似性计算方法包括余弦相似性、欧氏距离、曼哈顿距离等。全文检索全文检索是一种比较经典的检索方式在数据存入时通过关键词构建倒排索引在检索时通过关键词进行全文检索找到对应的记录2.2.1注入PromptPrompt作为大模型的直接输入是影响模型输出准确率的关键因素之一。在RAG场景中Prompt一般包括任务描述、背景知识检索得到、任务指令一般是用户提问等根据任务场景和大模型性能也可以在Prompt中适当加入其他指令优化大模型的输出。一个简单知识问答场景的Prompt如下所示【任务描述】 假如你是一个专业的客服机器人请参考【背景知识】回 【背景知识】 {content} // 数据检索得到的相关文本 【问题】 石头扫地机器人P10的续航时间是多久Prompt的设计只有方法、没有语法比较依赖于个人经验在实际应用过程中往往需要根据大模型的实际输出进行针对性的Prompt调优。三、主流RAG算法1.RAG Embedding文档经过切分得到文本块每一段文本通过Embedding模型进行特征提取得到每个文本块的向量表达最后将这些向量存储到知识库里这个过程叫做RAG Embedding。模型、向量库创建 -文档加载 → 文本分块 → 向量嵌入bge-large-zh → 向量入库Chroma不仅文档可以转换成向量图像、视频、语音等多模态数据也可以转换成向量。通过将不同模态的数据都映射到统一向量空间以实现多模态知识的互联互通。业界主流的Embedding模型包括BGE、Sentence-BERT、text2vec等。这些模型的共同特点是都由Transformer结构组成。2、RAG Index当接到用户的查询请求时通过RAG Embedding将用户的查询请求转换成向量然后将这个向量与知识库中的向量进行比对从知识库中找到与查询向量最相似的一组向量。然而在实际业务中知识库中有数千万甚至上亿条向量如果将查询向量和知识库中的向量进行逐一比对向量检索的计算量会非常大无法满足时效性要求。因此业界的主流方案是在向量的底库上构建一个高性能的向量索引检索时基于向量索引快速查询到对应的向量从而大幅减少向量检索的计算开销这个建立向量索引的过程叫RAG Index。业界主流的向量索引包括HNSW图索引和IVFPQ索引。HNSWHierarchical Navigable Small World分层导航小世界图。HNSW通过分层导航小世界图实现搜索优化。每一层的节点通过边连接表示节点间的接近程度。上层图用于快速跳跃底层图则进行精细搜索。搜索过程包括以下步骤从顶层的入口点开始利用贪婪搜索找到与查询向量最近的节点。达到局部最优后跳转到下一层并重复搜索。在最底层完成最终的精细搜索返回最近邻结果。IVF_PQ Inverted File with Product QuantizationIVF 就像在一本书中创建索引。 你不用扫描每一页或者在我们的情况下每一个向量而是在索引中查找特定的关键词群组从而快速找到相关的页面向量。倒排索引Inverted File 这是一种数据结构用于加速搜索。对于每个特征向量倒排索引存储了包含该特征向量的数据的列表这使得在查询时可以快速定位包含相似特征的数据。乘积量化Product Quantization 这是一种降维和量化的技术。在数据检索中通常使用很高维度的特征向量来描述数据。乘积量化通过将这些高维向量分解成较小的子向量并对每个子向量进行独立的量化从而减少了存储和计算的复杂性。这有助于加快检索速度。3、RAG Reranker在向量检索完成后RAG Reranker会对检索到的结果进行重排序。重排序分为逐点重排Pointwise Reranking和列表重排Listwise Reranking。逐点重排是“给每篇文章单独打分”列表重排是“看完所有文章再直接排名次”。Pointwise是工业界RAG主流追求高效稳定Listwise是高精度检索进阶方案追求排序质量适合搜索与专业场景。引用一文读懂大模型RAG检索增强生成含高级方法

更多文章