RAG 检索增强生成完全指南
AI 导读
RAG 检索增强生成完全指南 Maurice | 灵阙学院 2026-02-27 为什么需要 RAG 大语言模型有两个核心短板:知识截止日期和幻觉。RAG(Retrieval-Augmented Generation)通过在推理时注入外部知识,让模型基于真实文档回答问题,从根本上缓解了这两个问题。 与微调相比,RAG 不需要重新训练模型,知识更新只需替换文档库,成本低且可审计。...
RAG 检索增强生成完全指南
Maurice | 灵阙学院 2026-02-27
为什么需要 RAG
大语言模型有两个核心短板:知识截止日期和幻觉。RAG(Retrieval-Augmented Generation)通过在推理时注入外部知识,让模型基于真实文档回答问题,从根本上缓解了这两个问题。
与微调相比,RAG 不需要重新训练模型,知识更新只需替换文档库,成本低且可审计。
核心架构:三阶段流水线
┌─────────────────────────────────────────────────────────┐
│ RAG Pipeline │
├──────────┬──────────────┬──────────────┬───────────────┤
│ Ingest │ Retrieve │ Rerank │ Generate │
│ │ │ │ │
│ Document │ Query -> │ Cross-encoder│ LLM + │
│ Chunk │ Embedding -> │ Score -> │ Retrieved │
│ Embed │ Vector Search│ Top-K Filter │ Context -> │
│ Store │ │ │ Answer │
└──────────┴──────────────┴──────────────┴───────────────┘
阶段一:文档索引(Indexing)
分块策略对比
| 策略 | 原理 | 优势 | 劣势 | 适用场景 |
|---|---|---|---|---|
| 固定长度 | 按字符/token 数切分 | 实现简单,速度快 | 可能切断语义 | 结构化日志、代码 |
| 递归分割 | 按段落/句子/字符逐级回退 | 尽量保留语义边界 | 需调参 | 通用文档(推荐默认) |
| 语义分割 | 用 Embedding 相似度检测语义断点 | 语义完整性最佳 | 计算成本高 | 长文、论文、法律文书 |
| 文档结构 | 按 Markdown/HTML 标题层级切分 | 保留文档结构 | 依赖格式规范 | 技术文档、Wiki |
| 滑动窗口 | 固定窗口+重叠区域 | 减少边界信息丢失 | 存储冗余 | 对召回率要求高的场景 |
分块代码示例
from langchain.text_splitter import RecursiveCharacterTextSplitter
# 递归分割 -- 推荐默认方案
splitter = RecursiveCharacterTextSplitter(
chunk_size=512,
chunk_overlap=64,
separators=["\n\n", "\n", "。", ";", " ", ""],
length_function=len,
)
chunks = splitter.split_documents(documents)
print(f"Total chunks: {len(chunks)}")
from langchain_experimental.text_splitter import SemanticChunker
from langchain_openai import OpenAIEmbeddings
# 语义分割 -- 适合长文精细检索
semantic_splitter = SemanticChunker(
OpenAIEmbeddings(model="text-embedding-3-small"),
breakpoint_threshold_type="percentile",
breakpoint_threshold_amount=90,
)
semantic_chunks = semantic_splitter.split_documents(documents)
Embedding 模型对比
| 模型 | 维度 | MTEB 均分 | 中文能力 | 价格 | 部署方式 |
|---|---|---|---|---|---|
| OpenAI text-embedding-3-large | 3072 | 64.6 | 良好 | $0.13/1M tokens | API |
| OpenAI text-embedding-3-small | 1536 | 62.3 | 良好 | $0.02/1M tokens | API |
| Cohere embed-v4 | 1024 | 66.3 | 良好 | $0.10/1M tokens | API |
| BGE-M3 (BAAI) | 1024 | 65.0 | 优秀 | 免费 | 本地/API |
| Jina-embeddings-v3 | 1024 | 65.5 | 优秀 | $0.02/1M tokens | API/本地 |
| GTE-Qwen2 (阿里) | 1536 | 64.8 | 优秀 | 免费 | 本地 |
选型建议:中文场景优先 BGE-M3 或 Jina-v3;英文通用场景 OpenAI text-embedding-3-small 性价比最高;对精度要求极高用 Cohere embed-v4。
阶段二:检索(Retrieval)
向量检索 + 关键词混合
单纯向量检索在精确匹配(产品编号、人名、专有名词)上表现不佳。混合检索(Hybrid Search)结合 BM25 关键词匹配与向量语义匹配,是生产环境的推荐方案。
from langchain_community.retrievers import BM25Retriever
from langchain.retrievers import EnsembleRetriever
from langchain_qdrant import QdrantVectorStore
# 向量检索器
vector_retriever = QdrantVectorStore.from_documents(
chunks, embedding=embeddings, collection_name="docs"
).as_retriever(search_kwargs={"k": 20})
# BM25 关键词检索器
bm25_retriever = BM25Retriever.from_documents(chunks, k=20)
# 混合检索 -- RRF 融合
hybrid_retriever = EnsembleRetriever(
retrievers=[bm25_retriever, vector_retriever],
weights=[0.4, 0.6], # 语义权重略高
)
results = hybrid_retriever.invoke("什么是增值税留抵退税政策?")
阶段三:重排序(Reranking)
初次检索返回 Top-20,用 Cross-Encoder 精排后取 Top-5 送入 LLM。这一步对最终回答质量影响巨大。
from langchain.retrievers import ContextualCompressionRetriever
from langchain_cohere import CohereRerank
reranker = CohereRerank(model="rerank-v3.5", top_n=5)
compression_retriever = ContextualCompressionRetriever(
base_compressor=reranker,
base_retriever=hybrid_retriever,
)
reranked = compression_retriever.invoke("留抵退税的申请条件")
阶段四:生成(Generation)
from langchain_openai import ChatOpenAI
from langchain.chains import RetrievalQA
from langchain.prompts import PromptTemplate
prompt = PromptTemplate.from_template("""
你是一位税务合规专家。请严格基于以下检索到的上下文回答问题。
如果上下文中没有相关信息,明确说明"根据现有资料无法回答"。
上下文:
{context}
问题:{question}
回答(附引用来源):
""")
qa_chain = RetrievalQA.from_chain_type(
llm=ChatOpenAI(model="gpt-4o", temperature=0),
retriever=compression_retriever,
chain_type_kwargs={"prompt": prompt},
return_source_documents=True,
)
result = qa_chain.invoke({"query": "小规模纳税人的增值税免征额是多少?"})
print(result["result"])
评估指标
| 指标 | 定义 | 计算方式 | 目标值 |
|---|---|---|---|
| Faithfulness | 回答是否忠于检索文档 | LLM-as-Judge 逐句验证 | > 0.85 |
| Answer Relevancy | 回答与问题的相关性 | 反向生成问题再比较 | > 0.80 |
| Context Precision | 相关文档排名是否靠前 | 加权精确率 | > 0.75 |
| Context Recall | 是否召回了所有相关文档 | 标注集对比 | > 0.70 |
from ragas import evaluate
from ragas.metrics import faithfulness, answer_relevancy, context_precision
score = evaluate(
dataset=eval_dataset,
metrics=[faithfulness, answer_relevancy, context_precision],
)
print(score.to_pandas())
进阶模式
┌──────────────────────────────────────────────────────┐
│ Advanced RAG Patterns │
├──────────────────────────────────────────────────────┤
│ │
│ Naive RAG ──→ Advanced RAG ──→ Modular RAG │
│ │
│ Query Rewriting HyDE Graph RAG │
│ Step-back Prompt Self-RAG Agentic RAG │
│ Multi-query CRAG Adaptive RAG │
│ │
└──────────────────────────────────────────────────────┘
- Query Rewriting:用 LLM 改写用户问题,消除歧义,提升检索命中率
- HyDE:先让 LLM 生成假设性回答,再用该回答做检索(适合开放式问题)
- Self-RAG:模型自行判断是否需要检索、检索结果是否相关、回答是否有依据
- Graph RAG:将文档构建为知识图谱,检索时同时利用图结构关系
- Agentic RAG:检索器作为 Agent 的工具之一,Agent 自主决定何时检索、检索什么
生产部署清单
- 分块参数已根据文档类型调优(chunk_size / overlap)
- 混合检索已启用(向量 + BM25)
- Reranker 已部署(Cohere/BGE-Reranker)
- 评估流水线已接入(RAGAS / 自定义评测集)
- 文档更新管道已自动化(增量索引)
- 引用溯源已实现(返回 source_documents + 页码/段落)
- 安全过滤已部署(PII 脱敏、权限隔离)
Maurice | [email protected]
深度加工(NotebookLM 生成)
基于本文内容生成的 PPT 大纲、博客摘要、短视频脚本与 Deep Dive 播客,用于多场景复用
PPT 大纲(5-8 张幻灯片) 点击展开
RAG 检索增强生成完全指南 — ppt
这是一份为您基于《RAG 检索增强生成完全指南》生成的 PPT 大纲,共包含 7 张幻灯片,严格按照您的要求使用 Markdown 格式和指定数量的要点:
幻灯片 1:RAG 简介与核心价值
- 解决大模型核心短板: RAG 从根本上缓解了大语言模型存在的“知识截止日期”和“幻觉”两大核心问题 [1]。
- 工作原理: 通过在推理时注入外部知识,让大模型能够基于真实的文档内容来回答用户问题 [1]。
- 对比微调的优势: 不需要重新训练模型,只需替换文档库即可完成知识更新,具备成本低且可审计的特点 [1]。
幻灯片 2:RAG 核心架构流水线
- 整体架构: 包含文档摄取(Ingest)、检索(Retrieve)、重排序(Rerank)和生成(Generate)四大阶段 [1]。
- 数据处理流程: 原始文档首先经历切分(Chunk)和向量化(Embed),随后存入向量数据库中 [1]。
- 问答工作流: 用户的查询被转化为向量,通过向量检索匹配并过滤出 Top-K 的上下文,最后由 LLM 生成答案 [1]。
幻灯片 3:阶段一:文档索引与分块策略
- 推荐默认分块: 递归分割按段落/句子逐级回退,能尽量保留语义边界,是通用文档的推荐默认方案 [1]。
- 长文精细分块: 语义分割的语义完整性最佳,非常适合长文、论文或法律文书,但计算成本相对较高 [1]。
- 其他分块策略: 还包括速度快的固定长度切分、保留格式的文档结构切分,以及减少边界信息丢失的滑动窗口策略 [1]。
- Embedding 模型选型: 中文场景优先推荐 BGE-M3 或 Jina-v3,英文通用场景 OpenAI 性价比最高,追求极高精度则推荐 Cohere [2, 3]。
幻灯片 4:阶段二与三:检索与重排序优化
- 混合检索策略: 单纯向量检索在产品编号等精确匹配上表现不佳,生产环境推荐结合 BM25 关键词匹配与向量语义匹配 [3]。
- 检索融合: 可将 BM25 检索器和向量检索器结合,并赋予语义检索略高的权重进行融合召回 [3]。
- 引入重排序(Reranking): 初次检索返回的 Top-20 结果需使用 Cross-Encoder 进行精排,这对最终回答质量影响巨大 [3]。
- 精准提取: 经过重排后,通常只提取最相关的 Top-5 上下文送入大语言模型进行生成 [3]。
幻灯片 5:阶段四:生成提示词与核心评估指标
- 防幻觉提示词: 在 Prompt 中要求模型严格基于检索到的上下文回答,若无相关信息需明确说明“无法回答” [4]。
- 回答忠实度(Faithfulness): 使用 LLM-as-Judge 逐句验证回答是否忠于检索文档,目标值应大于 0.85 [4]。
- 回答相关性(Answer Relevancy): 通过反向生成问题再进行比较,确保回答与问题高度相关,目标值需大于 0.80 [4]。
- 上下文指标: 包含评估排名是否靠前的加权精确率(Context Precision)和评估是否找全文档的召回率(Context Recall) [4]。
幻灯片 6:RAG 的进阶模式(Advanced RAG)
- 查询优化: 通过 Query Rewriting 改写用户问题消除歧义,或利用 HyDE 生成假设性回答来辅助检索(适合开放式问题) [5]。
- 自纠错机制(Self-RAG): 允许模型自行判断是否需要检索、检索结果是否相关,以及最终回答是否有依据 [5]。
- 图谱结合(Graph RAG): 将文档构建为知识图谱,在检索时同时利用图结构关系提升效果 [5]。
- 智能体模式(Agentic RAG): 检索器作为 Agent 的工具之一,由 Agent 决定何时调用检索以及检索的具体内容 [5]。
幻灯片 7:生产环境部署清单
- 算法调优确认: 已根据文档类型调优分块参数,启用了“向量+BM25”混合检索,并部署了 Reranker [5]。
- 工程与数据管道: 文档更新管道已实现增量索引自动化,并且接入了 RAGAS 等自动化评估流水线 [5]。
- 合规与安全性保障: 实现了带有页码和段落的引用溯源机制,同时部署了 PII(个人身份信息)脱敏与权限隔离等安全过滤 [5]。
博客摘要 + 核心看点 点击展开
RAG 检索增强生成完全指南 — summary
SEO 友好博客摘要:
本文是一份全面的 RAG(检索增强生成)完全指南,深度解析如何通过注入外部知识解决大语言模型幻觉与知识截止的痛点[1]。文章详细拆解了包含文档分块、混合检索、Rerank 重排序及生成的四大阶段流水线,并提供了主流 Embedding 模型选型对比与 Python 实战代码[1-3]。此外,指南不仅涵盖了基于 RAGAS 的量化评估体系,还深入探讨了 Graph RAG 等进阶模式与生产环境部署清单[4, 5]。本教程是开发者构建企业级 AI 知识库的必备参考。
核心看点:
- 架构解析:详述文档分块、向量与BM25混合检索、Rerank重排序及生成的四大核心阶段[1, 3, 4]。
- 模型选型:对比主流 Embedding 模型性能,推荐中文场景首选 BGE-M3 以实现最高性价比[2]。
- 进阶与部署:前瞻探讨 Graph RAG 等高级模式,并提供包含安全过滤的八大生产级部署清单[5]。
60 秒短视频脚本 点击展开
RAG 检索增强生成完全指南 — video
这是一段基于您提供的文章内容撰写的 60 秒短视频脚本,严格按照您的字数和结构要求进行了设计:
【钩子开场】(14字)
大模型总胡说?RAG轻松解决![1]
【核心解说 1:痛点与原理】(27字)
RAG通过注入外部文档,免重训即可解决大模型知识过期与幻觉问题。[1]
【核心解说 2:核心架构】(28字)
架构含索引、检索、重排和生成四步,[1]推荐使用向量加关键词混合检索。[2]
【核心解说 3:关键与进阶】(28字)
重排序对最终回答质量影响巨大,[2]后续还能探索Graph RAG等进阶模式。[3]
【一句收束】(16字)
掌握这套流程,让你的AI严谨又可靠!
课后巩固
与本文内容匹配的闪卡与测验,帮助巩固所学知识
延伸阅读
根据本文主题,为你推荐相关的学习资料