简述RAG

何为RAG

检索增强生成(Retrieval Augmented Generation,简称 RAG)是一种先进的自然语言处理技术,旨在进一步提升大语言模型的输出质量和可靠性。该技术通过整合信息检索功能,将用户查询与向量数据库进行精准匹配,从而为用户提供了更加准确和可信的答案,有效减轻了大型模型在生成回答时可能出现的"幻觉"现象。

RAG的工作原理基于一个简单而强大的流程:在LLM生成答案前,先从一个外部知识库中检索出与用户查询最相关的片段,然后将这些检索结果作为额外的上下文信息与原始查询一起输入给LLM,指导LLM生成更准确、更丰富、更具时效性的回答。

简单来讲就是 :RAG=LLM+外部知识

与LLM的联系

下面通过一个图片介绍LLM与RAG的相互作用

总归而言RAG技术的核心流程通常包含三个主要阶段:

  1. 索引(Indexing) :将外部知识源(如文档、网页、数据库)处理成可检索的形式,通常涉及文本分块、生成向量嵌入,并存储在向量数据库中。
  2. 检索(Retrieval) :当用户提出问题时,系统将问题转换成查询向量,从索引中检索出最相关的知识片段。
  3. 生成(Generation) :将检索到的相关知识片段与原始问题一起提供给LLM,由LLM生成最终回答。

朴素RAG

设计之初时在2020,其严格按照 "索引->检索->生成" 的三阶段流程执行,显现的样式直接但也存在一定的局限性。

工作流程

朴素RAG的工作流程如下:

  • 索引阶段:
    • 把原始文档直接切分成固定尺寸的文本片段(chunks)
    • 为每个文本片段生成向量表征(一般采用通用嵌入模型,例如OpenAI的text-embedding-ada-002)
    • 将这些向量存入向量数据库(像Pinecone、Milvus等)
  • 检索阶段:
    • 把用户的查询转化为向量形式
    • 借助向量相似性检索,找到最相似的前K个文本片段
    • 直接返回这些文本片段,不做额外处理
  • 生成阶段:
    • 将检索到的文本片段和原始查询一同发送给大语言模型(LLM)
    • LLM根据提供的上下文内容生成相应答案

局限性

  • 噪声干扰:检索结果中可能包含与查询相关性不高的信息,干扰LLM的理解

  • 检索冗余:多个检索结果可能包含重复信息,浪费有限的上下文窗口

  • 复杂查询理解不足:对于复杂或含糊的查询,直接检索往往效果不佳

  • 召回率有限:如果关键信息分散在多个文档中,简单检索可能遗漏重要内容

  • 上下文窗口限制:LLM的上下文窗口有限,无法容纳过多检索结果

尽管存在这些局限性,朴素RAG作为一种基础实现,已经能够显著提升LLM回答特定领域问题的能力,尤其是在处理那些超出模型训练数据范围的问题时。但是人类的进步追求于精益求精,所以RAG技术随后进化出了更高级的形式。

示例

对应到Dify中的知识库中

索引阶段: 选择对文档表格等数据处理时使用通用分段方式,对每一个chunk都做相同大小分段处理

检索阶段: 单纯的使用向量检索,通过设置Top K以寻找与用户查询相似度最高的K个文本直接返回

进阶RAG

高级 RAG 是朴素 RAG 的深度优化版本,它并非对原有框架的颠覆,而是在 RAG 全流程的每个关键环节,都加入了针对性的进阶技术,以此大幅提升检索的精准度与最终生成内容的质量。与朴素 RAG 的线性流程不同,高级 RAG 在索引、检索、生成等各个阶段,都整合了更复杂、更具智能化的处理逻辑。

优化

预检索优化

  • 查询重写(Query Rewriting)

    使用LLM对原始查询进行改写,生成多个语义相似但表达不同的变体,增加检索到相关内容的概率。例如,将"股票市场今天怎么样?"改写为"今日股市表现如何?"和"最新的股票市场指数是多少?"

  • 查询分解(Query Decomposition)

    将复杂查询分解为多个简单子查询,分别检索后再整合结果。例如,"比较DeepSeek和豆包的擅长领域和调用成本"可分解为分别关于擅长领域和API成本的子查询。

  • 智能索引优化

    使用更先进的文档分块策略(如QA问答分块而非固定大小分块),为文档添加元数据标签,使用领域适应的嵌入模型等,提高索引质量。

通过知识库设定QA分段,有助于LLM 更精确定位用户查询的内容以减少模型幻觉问题

检索过程优化

  • 混合检索(Hybrid Search)

    结合稠密检索(向量相似度)和稀疏检索(关键词匹配,如BM25算法),平衡语义理解和关键词精确匹配的优势。

  • 多查询检索(Multi-Query Retrieval)

    使用不同的查询变体并行检索,然后合并结果,提高查全率。

  • 元数据过滤(Metadata Filtering) 基于文档的元数据(如时间、来源、主题分类等)进行检索范围限定,提高检索效率和相关性

不仅可以使用知识库自带的类似时间、关键词等元数据,还可以自定义强相关性的元数据来帮助模型更好完成查询任务。

后检索优化

  • 重排序(Reranking)

    使用更复杂的模型对初步检索结果进行二次评分和排序,将最相关的内容排在前面。例如,使用交叉编码器(Cross-encoder)模型评估查询与每个检索结果的精确匹配度。

  • 冗余过滤(Redundancy Filtering)

    检测并移除检索结果中的重复信息,优化上下文窗口利用。

  • 提示压缩(Prompt Compression)

    使用LLM提取检索结果的核心信息,生成更紧凑的摘要,以便在有限的上下文窗口中包含更多信息。

  • 信息过滤与整合(Filtering and Synthesis)

    根据相关性和重要性筛选信息,并将分散的信息整合成连贯的背景知识。

较朴素RAG的优势

高级RAG通过上述优化策略,成功解决了朴素RAG面临的主要问题,带来了一系列显著的性能提升:

  • 更高的检索精度和召回率,确保找到最相关的信息

  • 更有效利用有限的上下文窗口,避免浪费在冗余或不相关内容上

  • 更好地理解复杂查询意图,提供更全面、准确的回答

  • 能够处理多步推理问题,即使所需知识分散在多个文档中

  • 生成更连贯、更相关、更准确的回答

RAG技术远不止于此剩下的交给大家去继续探索,理论知识总归是落实到实践的,唯有自己动手才能真正领悟RAG的真谛。

相关推荐
ApacheSeaTunnel3 小时前
LLM 时代,DataAgent × WhaleTunnel 如何将数据库变更瞬时 “转译” 为洞察?
大数据·ai·开源·llm·数据同步·白鲸开源·whaletunnel
砖业林coco7 小时前
go语言使用 zhinao-go 轻松调用 360智脑
llm·go
Baihai_IDP8 小时前
怎样为你的 RAG 应用选择合适的嵌入模型?
人工智能·llm·aigc
常先森8 小时前
【解密源码】 RAGFlow 切分最佳实践- naive parser 语义切块(pdf 篇)
架构·llm·agent
多喝开水少熬夜1 天前
损失函数系列:focal-Dice-vgg
图像处理·python·算法·大模型·llm
大千AI助手1 天前
微软SPARTA框架:高效稀疏注意力机制详解
人工智能·深度学习·神经网络·llm·大千ai助手·sparta·稀疏注意力机制
Cyril_KI1 天前
大模型长文生成中的幻觉与事实性:研究进展综述
大模型·llm·github·综述·幻觉
智泊AI1 天前
AI大模型八股 | 多模态RAG怎么做?
llm
win4r1 天前
🚀超越DeepSeek-OCR!OCR领域的革命性突破:Chandra OCR本地部署+真实测评!手写体、繁体字、数学公式、重叠文字全部完美识别,告别漏字漏页
llm·aigc·deepseek