跳到主要内容

RAG 入门:检索增强生成基础

检索增强生成(Retrieval-Augmented Generation,简称 RAG)是一种将外部知识检索与大语言模型(LLM)生成能力相结合的技术架构。它让 AI 能够基于你自己的数据回答问题,解决了大模型"知识过时"和"缺乏领域专业度"的核心痛点。

为什么需要 RAG?

大语言模型虽然强大,但在实际应用中面临三个根本性限制:

1. 知识截止问题

大模型的训练数据有明确的时间截止点。以 GPT-4 为例,其训练数据截止于 2023 年,无法回答之后发生的事件。

用户:2024年奥运会开幕式的亮点是什么?

传统 LLM:我的训练数据截止于2023年,无法回答这个问题。
如果要获取最新信息,请...

RAG 系统:[检索最新新闻] 2024年巴黎奥运会开幕式在塞纳河上举行...
开幕式的亮点包括:运动员乘船入场、席琳·迪翁献唱...

2. 领域知识缺失

通用大模型缺乏特定领域的专业知识,如企业内部文档、医疗病例、法律条文等私有数据。

用户:我们公司的报销流程是怎样的?

传统 LLM:我不知道贵公司的具体报销流程,建议咨询人事部门...

RAG 系统:[检索公司内部文档] 根据员工手册第3章...
报销流程如下:1. 登录OA系统提交申请...

3. 幻觉问题

大模型可能"一本正经地胡说八道",生成看似合理但实际错误的信息。这在需要准确性的场景(医疗、法律、金融)中是不可接受的。

RAG 通过让模型基于检索到的真实文档生成回答,显著降低了幻觉风险,因为回答有了可追溯的来源。

RAG 如何工作?

RAG 的核心思想很简单:在生成回答之前,先从知识库中检索相关文档。

三个核心步骤

第一步:检索(Retrieval)

将用户问题转换为向量,在知识库中找到语义最相似的文档片段。

# 伪代码示例
question_embedding = embedding_model.encode("如何申请年假?")
relevant_docs = vector_db.search(question_embedding, top_k=5)

第二步:增强(Augmentation)

将检索到的文档作为上下文,与用户问题组合成完整的提示词。

# 伪代码示例
context = "\n\n".join([doc.content for doc in relevant_docs])
prompt = f"""
根据以下文档回答问题:

{context}

问题:如何申请年假?
"""

第三步:生成(Generation)

将增强后的提示词发送给大模型,生成最终回答。

# 伪代码示例
answer = llm.generate(prompt)

RAG vs 其他方案

方案优点缺点适用场景
RAG实时更新知识、可追溯来源、成本可控检索质量依赖系统设计企业知识库、客服问答、文档分析
微调(Fine-tuning)领域适应性强、推理更快知识仍有截止、成本高、难更新特定任务优化、风格迁移
长上下文实现简单成本高、有长度限制、难更新小规模文档分析
提示工程无需开发信息量有限、易超出上下文简单任务、原型验证

为什么不直接微调?

微调确实可以让模型学习领域知识,但它存在几个问题:

  1. 知识仍然会过时:微调后模型的知识也固定了,更新知识需要重新微调
  2. 成本高昂:高质量标注数据和计算资源成本很高
  3. 无法溯源:微调后的模型像"黑盒",无法告诉你答案来自哪里
  4. 易过拟合:可能在特定数据上过拟合,泛化能力下降

RAG 与微调不是互斥的,可以结合使用:RAG 负责动态知识检索,微调负责领域风格适应。

典型应用场景

企业知识库问答

员工可以通过自然语言查询公司内部文档、政策、流程。

员工:新员工入职需要办理哪些手续?
系统:根据《员工入职指南》,新员工需要:1. 提交身份证复印件...

智能客服

基于产品手册、FAQ、历史工单自动回答客户问题。

客户:我的订单显示已发货但还没收到,怎么办?
系统:根据您的订单号查询,包裹已到达北京转运中心...

法律文档分析

律师可以快速检索相关法条、案例、合同条款。

律师:股权转让协议中关于优先购买权的条款有哪些规定?
系统:根据《公司法》第71条和检索到的相关案例...

医疗辅助诊断

医生可以查询医学文献、临床指南、病例库。

医生:糖尿病肾病的早期诊断指标有哪些?
系统:根据《中国糖尿病防治指南》和最新文献...

学术研究

研究人员可以检索论文、数据集、实验方法。

研究员:Transformer架构在图像处理中有哪些应用?
系统:根据检索到的论文,主要应用包括...

RAG 系统的核心组件

一个完整的 RAG 系统包含以下核心组件:

┌─────────────────────────────────────────────────────────────────┐
│ RAG 系统架构 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 文档加载 │───▶│ 文档分块 │───▶│ 向量化 │ │
│ │ (Loaders) │ │ (Chunking) │ │ (Embedding) │ │
│ └─────────────┘ └─────────────┘ └──────┬──────┘ │
│ │ │
│ ▼ │
│ ┌─────────────┐ │
│ │ 向量数据库 │ │
│ │ (Vector DB) │ │
│ └──────┬──────┘ │
│ │ │
│ ┌─────────────┐ ┌─────────────┐ │ │
│ │ 用户问题 │───▶│ 问题向量化 │───────────┼───▶ 检索 │
│ └─────────────┘ └─────────────┘ │ │
│ │ │
│ ┌──────▼──────┐ │
│ │ 检索结果 │ │
│ │ + 重排序 │ │
│ └──────┬──────┘ │
│ │ │
│ ▼ │
│ ┌─────────────┐ │
│ │ LLM 生成 │ │
│ │ 回答 │ │
│ └─────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘

数据处理管道

文档加载器:负责从各种来源(PDF、网页、数据库、API)加载原始文档。

文档分块器:将长文档切分成适当大小的片段,平衡语义完整性和检索精度。

嵌入模型:将文本转换为向量表示,捕捉语义信息。

存储与检索

向量数据库:存储文档向量,支持高效的相似度搜索。常用选择包括 Pinecone、Milvus、Weaviate、Qdrant 等。

检索策略:决定如何找到最相关的文档,包括向量检索、关键词检索、混合检索等。

生成与优化

大语言模型:基于检索结果生成最终回答。

重排序器:对初步检索结果进行精排,提高相关性。

学习路径

本教程按照由浅入深的顺序组织,建议按以下顺序学习:

基础篇

  1. 架构原理:深入理解 RAG 的工作流程和设计原则
  2. 文档分块:学习如何正确切分文档,这是 RAG 效果的基础
  3. 嵌入模型:理解文本向量化的原理和模型选择

核心篇

  1. 向量数据库:对比主流向量数据库的特点和选型
  2. 检索策略:掌握向量检索、混合检索、多查询等技术
  3. 重排序:学习如何通过重排序提升检索质量

进阶篇

  1. 高级技术:探索多模态 RAG、Graph RAG、自适应 RAG 等前沿技术
  2. 实战实现:完整的生产级 RAG 系统代码实现
  3. 最佳实践:性能优化、评估方法、常见问题解决

参考篇

  1. 速查表:常用代码片段、配置模板、问题排查指南

技术栈概览

构建 RAG 系统常用的技术栈:

组件常用工具
开发框架LangChain、LlamaIndex、Haystack
嵌入模型OpenAI text-embedding-3、BGE、Cohere、Voyage
向量数据库Pinecone、Milvus、Weaviate、Qdrant、Chroma
重排序模型Cohere Rerank、BGE Reranker、ColBERT
大语言模型OpenAI GPT-4、Claude、Llama、Qwen
文档处理Unstructured、PyPDF、Apache Tika

准备工作

在开始学习之前,建议你:

  1. 掌握 Python 基础:RAG 系统主要使用 Python 开发
  2. 了解大模型基础:理解 LLM 的基本原理和 API 调用方式
  3. 熟悉向量概念:理解向量和相似度计算的基本概念
  4. 准备开发环境:安装 Python 3.10+,配置虚拟环境
# 创建虚拟环境
python -m venv rag-env
source rag-env/bin/activate # Linux/Mac
# rag-env\Scripts\activate # Windows

# 安装基础依赖
pip install langchain langchain-openai chromadb

小结

RAG 是连接大模型与外部知识的桥梁,它让 AI 应用能够:

  • 访问最新的、特定的知识
  • 提供可追溯的信息来源
  • 降低幻觉风险
  • 以较低成本实现知识更新

在接下来的章节中,我们将深入每个组件的实现细节,帮助你构建生产级的 RAG 系统。

参考资料