一、RAG 的核心价值与应用场景
RAG(检索增强生成)是一项将信息检索与文本生成相结合的技术,它让大型语言模型(LLM)能够生成更准确、更具时效性且上下文更相关的内容。下表清晰地展示了RAG解决的核心问题及其典型应用场景:
核心关切点 |
RAG 提供的解决方案 |
典型应用场景 |
信息准确性 |
从外部知识库检索事实依据,减少模型“幻觉”,答案可溯源。 |
智能客服、医疗诊断、法律咨询。 |
知识时效性 |
无需重新训练模型,通过更新检索库即可让模型获取最新信息。 |
回答关于新闻事件、股价、最新产品信息等问题。 |
专业领域知识 |
为模型注入特定领域(如公司内部文档、行业资料)的知识,弥补通用模型的专业短板。 |
企业知识库问答、学术研究辅助。 |
成本与隐私 |
检索过程可实施权限控制,访问特定数据,比为了新知识重新训练大模型更经济高效。 |
处理企业内部敏感文档、个人隐私信息。 |
Q:那为什么不直接把手册或资料发给大模型呢?
这是一个关键问题。主要原因有二:
- 上下文窗口限制:如果用户的资料很大,比如上百页或千页的数据直接发给大模型,会超出模型的上下文窗口限制。
- 推理效率:模型的推理速度会变慢,模型读取的内容越多,输出越慢。
因此,RAG技术登场,它通过一种更智能的“按需取用”机制来解决这些问题。
二、RAG 的基本工作流程
RAG的工作流程可以清晰地划分为“准备(提问前)”和“回答(提问后)”两个主要阶段。
阶段一:准备 - 知识库预处理(索引)
此阶段在线下完成,是为系统“备课”的过程。
- 分片分片就是把文档拆分成多个片段。分片的方式有很多种:
- 按字数来分,比如说1,000字为一个片段。
- 按一个段落来分片。
- 或者是按章节。
- 或者是按页码。
但不管怎么做,我们最后都需要把一篇文档切分成多份,切好后这个环节就结束了。
- 索引索引就是通过 Embedding 将每一个片段文本转化为一个向量,然后再将片段文本和对应向量都存储在向量数据库的一个过程。生成的所有向量及其对应的原始文本块,会被一同存入向量数据库。数据库会为这些向量建立专门的索引结构(例如HNSW、IVF-PQ等),这种结构的设计目标,就是在亿级向量中实现毫秒级的相似性搜索。
- 向量在RAG中的作用:
- 将文本转换为向量(嵌入):使用嵌入模型将文本转换成高维向量,此操作由模型完成。语义相近的文本,其向量在空间中的位置也接近。
- 实现语义检索:将用户问题也转为向量,通过计算“问题向量”与“文档向量”的相似度,快速找到最相关的文本片段。
- 依赖向量数据库进行高效管理:向量数据库(如Milvus、Qdrant)负责存储、查询向量和文本,并提供相似度计算,这是RAG实时响应的基础。
阶段二:回答 - 实时查询处理(检索与生成)
此阶段在用户提问后实时发生。
- 召回(检索)
召回的核心任务是从庞大的知识库中快速筛选出与用户问题可能相关的文本片段。这主要依赖于向量相似度计算。常用的相似度度量方法对比如下:
方法名称 |
核心原理 |
特点 |
余弦相似度 |
衡量两个向量方向的差异,计算夹角的余弦值。 |
对向量长度不敏感,专注于语义方向;计算高效。 |
欧氏距离 |
计算两点间的直线距离。 |
直观,符合物理距离概念;受向量尺度和长度影响大。 |
点积 |
两向量对应分量乘积之和。在向量归一化后与余弦相似度等价。 |
计算简单高效;结果受向量长度影响显著。 |
- 重排初步召回可能会返回大量相关片段,但质量参差不齐。重排步骤的目标是对这些结果进行更精细的排序,把最相关、最优质的片段排到最前面。常用技术是 Cross-Encoder:
- Bi-Encoder(用于召回):问题和文档分开独立编码为向量,然后计算相似度。优势是速度快,适合大规模初筛。
- Cross-Encoder(用于重排):将问题和某个文档拼接在一起,同时输入模型进行交互计算,直接输出相关度分数。判断更准确,但计算成本高。
可以理解为:召回(如余弦相似度)负责“海选”,追求速度;重排(如Cross-Encoder)则负责“精品面试”,追求精度。
- 生成
这是最后一步。系统将用户原始问题和经过重排筛选出的最相关的文本片段(如Top 3-5)组合成一个详细的提示(Prompt),然后交给LLM。LLM的任务是基于这个“增强后”的提示,综合所有信息,生成一个准确、连贯、自然的最终答案,而并非简单地复制粘贴。
三、RAG 技术演进与优化策略
RAG技术本身也在不断演进,从最初的简单模式发展出更复杂的架构以提升效果。
- 技术范式的演进:
- Naive RAG:遵循传统的“索引-检索-生成”流程。
- Advanced RAG:在检索前后引入优化策略,如查询重写、重排等,以提高检索质量。
- Modular RAG:引入多个功能模块,流程不局限于顺序检索和生成,支持迭代和自适应检索,灵活性更大。
- 常见优化工具与框架:
在实际构建RAG系统时,可以利用现有的框架和工具来简化开发,例如 LangChain 和 LlamaIndex,它们提供了文档加载、文本分割、向量化、检索和链式调用等组件的强大支持。