简述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的真谛。

相关推荐
CoderJia程序员甲17 小时前
GitHub 热榜项目 - 日榜(2026-1-9)
开源·大模型·llm·github·ai教程
树獭非懒18 小时前
AI大模型小白手册|如何像工程师一样写Prompt?
llm·aigc·ai编程
视觉&物联智能19 小时前
【杂谈】-多智能体系统的效能悖论:协作优势的认知边界
ai·llm·agent·智能体·人工 智能
AI架构师易筋1 天前
多模态 LLM 与本地多模态检索 PoC:从原理到工程落地(图片 / 视频关键帧 / LaTeX 公式)
人工智能·llm·多模态·多模态llm
且去填词1 天前
DeepSeek API 深度解析:从流式输出、Function Calling 到构建拥有“手脚”的 AI 应用
人工智能·python·语言模型·llm·agent·deepseek
EdisonZhou1 天前
MAF快速入门(11)并行工作流
llm·aigc·agent·.net core
进击的松鼠2 天前
LangChain 实战 | 快速搭建 Python 开发环境
python·langchain·llm
悟乙己2 天前
使用TimeGPT进行时间序列预测案例解析
机器学习·大模型·llm·时间序列·预测
智泊AI2 天前
AI Agent 架构核心:如何构建多意图路由与动态查询分发引擎
llm
xiao5kou4chang6kai42 天前
贯通LLM应用→数据分析→自动化编程→文献及知识管理→科研写作与绘图→构建本地LLM、Agent→多模型圆桌会议→N8N自动化工作流深度应用
人工智能·自动化·llm·科研绘图·n8n