RAG (检索增强生成) 详解

大模型 RAG (检索增强生成) 详解

RAG (Retrieval-Augmented Generation,检索增强生成) 是目前大语言模型(LLM)应用中最主流、最核心的架构模式之一。它巧妙地结合了检索系统(类似搜索引擎)和生成系统(大语言模型),旨在解决大模型固有的“幻觉”、知识滞后以及私有数据缺失等问题。


RAG标准工作流流程图

graph TD
    A[数据Ingestion<br/>(多源数据摄入+清洗)] --> B[切片策略<br/>(语义/递归切片+重叠)]
    B --> C[向量化<br/>(Embedding模型+向量归一化)]
    C --> D[索引构建<br/>(向量数据库+混合索引)]
    D --> E[检索<br/>(Hybrid Search+Top K选择)]
    E --> F[重排序<br/>(Rerank模型+过滤)]
    F --> G[生成<br/>(大模型+Prompt工程+来源追溯)]
    G --> H[答案输出<br/>(可追溯、无幻觉)]
    H --> I{用户反馈}
    I -->|需优化| J[调整切片/向量化/检索策略]
    J --> B
    I -->|无优化| K[结束]

1. 核心概念与背景

定义

RAG 是一种技术架构,它在让大模型生成回答之前,先从外部知识库中检索与用户问题相关的信息,并将这些信息作为“上下文”提供给大模型。

解决的问题

  • 知识幻觉:大模型可能会一本正经地胡说八道。RAG 通过提供事实依据,强制模型基于检索到的内容回答。
  • 知识时效性:大模型的训练数据有截止日期(Knowledge Cutoff)。RAG 可以让模型访问最新的新闻、文档或数据。
  • 私有数据:企业内部的文档、数据库通常不在大模型的训练集中。RAG 允许模型“阅读”这些私有数据而无需重新训练模型。
  • 可解释性/溯源:RAG 可以告诉用户答案出自哪篇文档的哪一段,增加了可信度。

2. RAG 的工作流程 (Pipeline)

一个标准的 RAG 系统通常包含两个主要阶段:索引阶段 (Indexing)查询/生成阶段 (Query & Generation)

第一阶段:数据准备与索引 (离线/定期执行)

这是构建知识库的过程。

  1. 数据加载 (Data Loading):收集各种来源的数据(PDF, Word, 网页, 数据库, API 等)。
  2. 数据清洗 (Cleaning):去除乱码、无关字符、格式化文本。
  3. 分块 (Chunking):将长文档切分成较小的片段(Chunks)。

    • 策略:按固定字符数、按段落、按语义递归切分等。块的大小直接影响检索效果。
  4. 向量化 (Embedding):使用嵌入模型(Embedding Model,如 text-embedding-3-large, bge-m3 等)将每个文本块转换为高维向量(Vector)。
  5. 存储 (Storage):将向量存入向量数据库(Vector DB,如 Milvus, Pinecone, Chroma, Qdrant, Elasticsearch 等),同时保留原始文本和元数据(metadata)。

第二阶段:查询与生成 (在线实时执行)

这是用户提问时的过程。

  1. 用户提问:用户输入自然语言问题。
  2. 查询优化 (Query Transformation)(可选但重要):

    • 对问题进行改写、扩写、分解(如 HyDE 技术:假设一个答案生成向量来检索)。
    • 将问题转化为向量。
  3. 检索 (Retrieval)

    • 在向量数据库中进行近似最近邻搜索 (ANN),找到与问题向量最相似的 $K$ 个文本块。
    • 可能结合关键词检索(BM25)进行混合检索 (Hybrid Search) 以提高准确率。
    • 重排序 (Re-ranking):使用更精细的重排序模型(Cross-Encoder)对检索回来的结果再次打分排序,剔除不相关内容,只保留最顶部的几条。
  4. 提示词构建 (Prompt Construction)

    • 将“检索到的上下文” + “用户问题” + “系统指令(如:请仅根据以下信息回答)”组装成最终的 Prompt。
  5. 生成 (Generation)

    • 大语言模型(LLM)读取 Prompt,基于提供的上下文生成最终答案。
  6. 引用与输出:输出答案,并标注来源引用。

3. 关键组件与技术细节

组件作用常见工具/模型示例
Embedding 模型将文本转化为向量,决定语义匹配的质量。OpenAI text-embedding-3, BGE-M3, M3E, Jina Embeddings
向量数据库高效存储和检索海量向量数据。Milvus, Qdrant, Pinecone, Weaviate, Chroma, Faiss
分块策略 (Chunking)决定信息的粒度。太小丢失上下文,太大引入噪声。固定长度、递归字符分割、语义分割 (Semantic Chunking)
检索策略决定如何找到相关信息。密度检索 (Dense), 稀疏检索 (Sparse/BM25), 混合检索 (Hybrid)
重排序 (Rerank)提升检索精度的关键一步,解决“检索到了但没排前面”的问题。Cohere Rerank, BGE-Reranker, Jina Reranker
LLM理解上下文并生成流畅的回答。GPT-4o, Claude 3.5, Llama 3, Qwen 2.5, Kimi

4. RAG 的优势 vs. 微调 (Fine-tuning)

很多用户会混淆 RAG 和微调,两者的定位完全不同:

特性RAG (检索增强生成)Fine-tuning (微调)
主要目的注入新知识、事实数据、私有数据学习特定风格、格式、任务逻辑、领域术语
知识更新实时,更新数据库即可,需要重新训练或增量训练
幻觉控制较强,基于给定事实回答较弱,模型仍可能编造训练数据中没有的细节
可解释性高,可追溯来源低,黑盒模型
成本相对较低(主要是推理和存储成本)高(算力成本、数据标注成本)
适用场景客服问答、文档分析、实时新闻查询医疗诊断逻辑、法律文书写作风格、代码生成习惯

最佳实践:通常先通过 RAG 解决知识问题,如果模型的回答风格不符合要求,再考虑在 RAG 基础上进行轻量级微调。


5. 当前面临的挑战与进阶方案 (Advanced RAG)

简单的 RAG(Naive RAG)往往存在检索不准、上下文窗口限制、多跳推理能力弱等问题。因此,业界提出了 Advanced RAGModular RAG 的概念:

1. 检索质量优化

  • 混合检索 (Hybrid Search):结合向量相似度(语义)和关键词匹配(精确匹配),互补不足。
  • 元数据过滤:利用时间、作者、部门等标签过滤检索范围。
  • 父文档检索 (Parent Document Retriever):检索小 chunk 定位,但返回其所属的大 chunk 或全文给 LLM,以保留完整上下文。

2. 查询优化

  • HyDE (Hypothetical Document Embeddings):让 LLM 先生成一个“假答案”,用假答案的向量去检索真文档,往往比直接用问题向量更准。
  • 查询分解 (Query Decomposition):将复杂问题拆解为多个子问题,分别检索后再合并(类似 LangChain 的 MultiQueryRetriever)。

3. 多跳推理 (Multi-hop RAG)

  • 对于需要跨文档推理的问题(例如:“A 公司的 CEO 是谁?他之前任职的公司上市了吗?”),系统需要进行多次“检索-思考-再检索”的迭代过程(Iterative Retrieval)。

4. GraphRAG (知识图谱 + RAG)

  • 微软等公司提出的新方向。利用知识图谱提取实体和关系,不仅检索文本块,还检索实体间的关联路径。这对于回答全局性问题(如“这篇文档集主要讨论了哪些主题及其关系?”)非常有效,弥补了传统向量检索缺乏全局观的缺陷。

5. Agentic RAG (代理式 RAG)

  • 将 RAG 作为一个工具交给 AI Agent。Agent 可以自主决定是否需要检索、检索什么、是否调用计算器、是否需要联网搜索,具有更强的规划能力。

6. 应用场景

  • 🏢 企业知识库问答:员工询问公司制度、报销流程、技术文档。
  • 🤖 智能客服:基于产品手册自动回答客户咨询,减少人工介入。
  • ⚖️ 法律/医疗辅助:律师/医生快速检索相关案例、法条或医学文献,并获得总结。
  • 🎓 学术研究助手:阅读大量论文,总结观点,查找特定实验数据。
  • 🧠 个人第二大脑:连接用户的笔记(Notion, Obsidian),实现对自己知识的智能问答。

总结

RAG 是大模型从“玩具”走向“生产力工具”的关键桥梁。它不需要改变大模型本身的参数,就能让模型拥有无限的、实时的、私有的知识。随着向量数据库技术的成熟、Embedding 模型能力的提升以及 GraphRAG 等新范式的出现,RAG 正变得越来越精准和智能,成为构建企业级 AI 应用的首选架构。

添加新评论