一文读懂RAG

167 阅读12分钟

作为一个后端架构师,当我辞职闭关入门大模型,在自己会踏入大模型这片深不可测的海域那一刻时,一股莫名的情绪噗哧而来。彼时,我只知道"大模型很火",却不知这"火"背后是无数矩阵运算与梯度下降的精密舞蹈。

如今回望这段旅程,我明白大模型开发不是一蹴而就的魔法。它需要扎实的工程基础、对原理的深入理解,以及面对无数次失败的耐心。

我们应当不再只关注代码逻辑,更关注数据质量、模型行为和用户体验之间的微妙平衡。

如今,每当我启动训练脚本,看着GPU利用率飙升,损失函数逐渐下降,我仿佛看到无数开发者在代码之海中航行的身影。我们或许渺小,但正是这些微小的努力,正一点点推动着AI技术的边界向前延伸。

欢迎大家+v:lucas_chou,让我们对大模型理论更简单易懂,让大模型落地更高效。

本文资料更关注公众号【架构师那些事儿】,后台回复 大模型rag


概念

检索增强生成(Retrieval-Augmented Generation, RAG) 是一种结合信息检索与文本生成的先进自然语言处理(NLP)技术,旨在提升大型语言模型(LLM)在生成回答时的准确性、可解释性和时效性。RAG通过从外部知识库中检索相关信息,并将这些信息作为上下文输入给生成模型,从而生成更可靠、更具事实依据的回答。

RAG 的核心思想

传统语言模型(如GPT系列)依赖于训练时学到的内部知识,存在以下问题:

  • 知识固化:无法获取训练数据之后的新信息(如2023年后的事件)。
  • 幻觉(Hallucination):可能生成看似合理但错误的内容。
  • 缺乏可解释性:无法追溯答案来源。

RAG 的解决方案是:

在生成回答前,先从外部知识源中检索与问题相关的文档或段落,再将这些检索到的内容作为上下文输入生成模型,指导其生成答案。

这样,模型既保留了强大的语言生成能力,又具备了动态获取最新、准确信息的能力。

RAG 的基本架构

RAG 模型通常由两个主要模块组成:

检索器(Retriever)

  • 功能:根据用户输入的问题,从大规模文档集合(如维基百科、企业知识库、网页等)中检索出最相关的若干文档或段落。
  • 常用技术:
    • DPR(Dense Passage Retriever):使用双塔结构(question encoder 和 passage encoder)将问题和文档编码为向量,计算相似度。
    • ColBERT、ANCE、Contriever等更先进的稠密检索模型。
    • 稀疏检索:如 BM25(传统信息检索方法)。
    • 稠密检索(Dense Retrieval):使用向量表示进行语义匹配

生成器(Generator)

  • 功能:接收原始问题 + 检索到的文档内容,生成自然语言回答。
  • 通常使用预训练的序列到序列(Seq2Seq)模型,如:
    • BART
    • T5
    • FLAN-T5
    • 或基于 LLM 的生成器(如 Llama、ChatGLM 等)

生成器的输入 = 用户问题 + 检索到的 top-k 相关段落(拼接或编码后)

5大文本分块策略

ai-rag-text-chunk-5.png Fixed-size Chunking(固定分块)

  • 核心思想:按固定长度(如 256 tokens)分割文本,可重叠(滑动窗口)。
  • 优点:简单高效,适合常规 NLP 任务(如向量检索)。
  • 缺点:可能切断语义连贯性(如句子中途截断)。
  • 场景:BERT 等模型的输入预处理、基础 RAG 系统。

Semantic Chunking(语义分块)

  • 核心思想:基于文本语义边界分块(如段落、话题转折点)。
  • 实现
    • 规则:按标点(句号、段落符)分割;
    • 模型:用嵌入相似度检测语义边界(如 Sentence-BERT)。
  • 优点:保留语义完整性。
  • 缺点:计算成本较高。
  • 场景:精细化问答、摘要生成。

Recursive Chunking(递归分块)

  • 核心思想:分层分割文本(如先按段落→再按句子)。
  • 优点:平衡长度与语义,适配多级处理需求。
  • 缺点:需设计分层规则。
  • 场景:长文档处理(论文、法律文本)。

Document Structure-based Chunking(基于文档结构的分块)

  • 核心思想:利用文档固有结构(标题、章节、表格)分块。
  • 实现:解析 Markdown/HTML/PDF 的标签结构。
  • 优点:精准匹配人类阅读逻辑。
  • 缺点:依赖文档格式规范性。
  • 场景:技术手册、结构化报告解析。

LLM-based Chunking(基于大模型的分块)

  • 核心思想:用 LLM(如 GPT-4)动态决定分块策略。
  • 方法
    • 直接生成分块边界;
    • 指导规则引擎优化(如“将这段话按时间线拆分”)。
  • 优点:灵活适配复杂需求。
  • 缺点:成本高、延迟大。
  • 场景:高价值文本处理(如医疗记录、跨语言内容)。

对比总结

策略核心逻辑优势局限性
Fixed-size固定长度切割高效、通用语义断裂风险
Semantic语义边界检测保留上下文计算复杂度高
Recursive多级递归分割灵活适配长文本规则设计复杂
Structure-based文档标签解析精准匹配结构依赖格式标准化
LLM-based大模型动态决策智能适应场景成本高、速度慢

RAG 的工作流程

  1. 用户提问:例如,“爱因斯坦获得诺贝尔奖是在哪一年?”
  2. 检索阶段:
    • 检索器将问题编码,从知识库中查找相关段落。
    • 返回如:“爱因斯坦因光电效应研究获得1921年诺贝尔物理学奖。”
  3. 生成阶段:生成器结合问题和检索到的文本,生成答案:“爱因斯坦于1921年获得诺贝尔奖。”
  4. 输出答案,并可附带引用来源(提高可解释性)。

RAG 的主要优势

优势说明
✅ 减少幻觉回答基于真实文档,降低虚构内容风险
✅ 支持动态知识更新只需更新知识库,无需重新训练模型
✅ 可解释性强可追溯答案来源,便于审计和验证
✅ 领域适应性强可用于医疗、法律、金融等专业领域,只需更换知识库
✅ 成本较低相比训练超大模型,维护知识库更经济

RAG 的应用场景

应用场景示例
智能客服基于产品手册、FAQ 自动生成准确回答
医疗问答结合医学文献回答患者问题
法律咨询检索判例、法规生成法律建议
企业知识库问答查询内部文档、会议纪要等
教育辅导基于教材内容解答学生问题
新闻摘要与事实核查检索多源信息生成客观摘要

典型工具与框架

工具说明
LangChain支持 RAG 的主流框架,集成检索、生成、记忆等功能
LlamaIndex专为构建索引和检索优化的框架,适合文档问答
Haystack(by deepset)开源 NLP 框架,支持 DPR、FARM 等
Vespa / Weaviate / Pinecone向量数据库,支持高效相似性搜索
Hugging Face Transformers提供 DPR、BART、T5 等模型实现

RAG 的挑战与局限

挑战说明
检索质量依赖知识库若知识库不完整或过时,效果下降
检索-生成错位检索到的内容可能不完全匹配问题,导致生成错误
延迟较高检索 + 生成两阶段增加响应时间
多跳推理困难复杂问题需多次检索与推理,RAG 原生不支持
文档噪声检索到的文本可能包含无关或错误信息

RAG 的变体与扩展

RAG-Sequence:对每个检索到的文档分别生成答案,然后选择最优或融合多个答案。

RAG-Token:在生成每个 token 时动态选择最相关的文档,更细粒度控制。

FLARE(Forecasting, Retrieval, and Generation):预测模型何时可能“不知道”,主动触发检索,提升效率。

Self-RAG / Reflexion-RAG:模型具备“反思”能力,评估生成内容质量,决定是否重新检索。

Hybrid RAG:结合稀疏检索(BM25)与稠密检索(DPR),提升召回率与准确率。

接下来不同的变体进行比对:

RAG vs Graph RAG:

ai-rag-vs-graph-rag.png

维度RAG(检索增强生成)Graph RAG(图增强检索生成)
知识结构基于扁平文本(向量检索)基于知识图谱(图结构检索)
检索方式语义相似度匹配(如BM25/Embedding)图遍历(如节点关系推理、路径查询)
优势简单高效,适合事实型问答擅长多跳推理、关系推理
缺点难以处理复杂逻辑关系依赖高质量知识图谱,构建成本高
适用场景问答、文档摘要复杂推理(如因果分析、事件链推导)

核心区别

  • RAG 直接检索文本片段,适合短平快问答;
  • Graph RAG 利用知识图谱的结构化关系,更适合需要逻辑推理的任务(如“某药物的副作用机制是什么?”)。

传统RAG vs HyDE:

ai-rag-vs-hyde.png

传统RAG(Retrieval-Augmented Generation)和HyDE(Hypothetical Document Embeddings)都是检索增强生成(RAG)技术的变体,但它们在检索策略和性能优化上有显著差异。以下是两者的对比:

  1. 核心流程对比
维度传统RAGHyDE
检索方式直接对用户查询(Query)进行向量检索先让LLM生成假设答案(Hypothetical Answer),再检索相似文档
匹配逻辑Query-to-Document 相似度匹配Answer-to-Document 相似度匹配
生成阶段直接使用检索到的文档生成答案结合假设答案+检索文档生成最终答案

关键区别

  • 传统RAG依赖查询与文档的语义匹配,但用户问题(如“什么是ML?”)可能与答案(如“机器学习是一种方法”)表述不同,导致检索失败。
  • HyDE通过生成假设答案(如“ML是让计算机学习数据的方法”),使嵌入更接近真实答案的语义,从而提高检索精度。
  1. 性能对比
指标传统RAGHyDE
检索精度较低(依赖查询表述)显著提升(如ARAGOG实验显示优于基线)
答案质量可能因检索失败而错误更准确(利用假设答案引导检索)
计算成本低(仅需一次检索)较高(需LLM生成假设答案)

实验数据

  • OpenAI测试显示,传统RAG准确率仅45%,HyDE可提升至65%。
  • ARAGOG研究表明,HyDE与LLM重排序结合后,检索精度显著优于朴素RAG。
  1. 适用场景
场景传统RAGHyDE
简单问答适用(如事实型问题)适用,但可能过度复杂
复杂查询易失败(表述差异大)更优(如多跳推理)
实时性要求更高效延迟较高(需生成步骤)
  1. 优缺点总结
技术优点缺点
传统RAG简单、计算成本低检索精度受查询表述限制
HyDE检索精度高、适配复杂语义延迟高、依赖LLM生成质量

传统RAG vs Agentic RAG:

ai-rag-vs-agentic-rag.png 传统RAG

核心流程

  • 检索(Retrieval) :从固定知识库中检索与输入相关的文档片段(如BM25/向量检索)。
  • 生成(Generation) :将检索结果拼接为上下文,输入大模型生成回答。

特点

  • 静态处理:检索与生成分离,无反馈循环。
  • 局限性
    • 检索结果质量直接限制生成效果;
    • 无法动态优化检索策略;
    • 多跳推理能力弱(需人工设计分步查询)。

Agentic RAG

核心思想

将RAG流程赋予自主决策能力,通过智能体(Agent)动态管理检索与生成。

关键改进:

  • 动态检索
    • 基于生成内容的反馈调整检索策略(如改写查询、多轮检索);
    • 支持复杂查询的多跳推理(自动分解子问题并迭代检索)。
  • 任务感知
    • 根据任务类型(问答、摘要等)选择检索工具或生成策略;
    • 可调用外部API或工具补充知识(如计算、实时数据)。
  • 自我验证
    • 对生成结果进行事实性检查(如二次检索验证)、逻辑一致性评估。

对比总结

维度传统RAGAgentic RAG
检索方式单次、静态多轮、动态优化
推理能力单跳,依赖人工设计多跳,自主分解任务
上下文管理固定拼接动态筛选与精炼
错误处理无自检机制结果验证与修正
适用场景简单问答、文档摘要复杂推理、实时交互、工具调用

演进本质:Agentic RAG将RAG从“管道流程”升级为“自主决策系统”,更贴近人类问题解决模式。

如何构建一个 RAG 系统

步骤概览:

  1. 准备知识库
    • 收集文档(PDF、网页、数据库等)
    • 分块(chunking):将长文档切分为小段(如每段512 token)
    • 向量化:使用嵌入模型(如 BERT、bge、text-embedding-ada-002)生成向量
  2. 建立检索系统
    • 使用向量数据库(如 FAISS、Pinecone、Weaviate、Milvus)存储向量
    • 实现检索接口(输入问题 → 返回 top-k 段落)
  3. 选择生成模型
    • 可使用开源模型(如 Llama 3、ChatGLM、Qwen)或 API(如 GPT-4)
  4. 构建 pipeline
    • 将检索结果与问题拼接,输入生成模型
    • 可加入重排序(rerank)、去重、摘要等后处理
  5. 评估与优化
    • 指标:准确率、F1、BLEU、ROUGE、MRR 等
    • 优化:调整 chunk 大小、嵌入模型、检索策略等