RAG 是什么?16 种 RAG 方案全解(流程图+代码+面试题+答案)AI 开发必看万字干货
作者:翎洛洛
发布:2026-04-28
分类:人工智能 / 大模型应用开发
标签:RAG、检索增强生成、AI开发、大模型、向量数据库、面试题
前言
最近两年,只要做 AI 应用开发,RAG 绝对是绕不开的核心技术。不管是面试还是实际项目,面试官都会问:RAG 是什么?有哪些方案?怎么选型?
但很多同学对 RAG 只停留在“检索增强生成”六个字,一深入就懵。
这篇文章带你一次性吃透 RAG 核心原理 + 16 种主流 RAG 方案 + 流程图 + 伪代码 + 高频面试题,学完直接能写进简历、应对面试。
一、RAG 到底是什么?
1. 定义
RAG = Retrieval-Augmented Generation
检索增强生成
2. 为什么要用 RAG?
大模型天生 3 个硬伤:
- 知识有截止日期,无法实时更新
- 容易一本正经胡说八道(幻觉)
- 无法访问企业私有文档、内部数据
RAG 解决思路:先检索外部知识,再让大模型基于知识回答
像开卷考试,先翻书再答题,答案更准、更可信。
3. RAG 标准流程
用户提问 → 向量化 → 向量库检索 → 拼接参考资料 → Prompt → LLM 生成答案
4. RAG 优势
- 无需训练,直接更新知识库
- 大幅降低幻觉
- 可解释、可溯源
- 比纯长上下文更便宜、更稳定
二、16 种 RAG 方案全景分类
- 标准 RAG 及变体:Naive RAG、Multi-Query RAG、HyDE
- 提升检索质量:语义分块、层级索引、Hybrid Search、Reranking
- 反思机制:Corrective RAG、Adaptive RAG、Self-RAG
- 结构化知识:GraphRAG、Text-to-SQL RAG
- 智能体驱动:Agentic RAG、Multi-Agent RAG
- 能力扩展:多模态 RAG、Speculative RAG
三、核心 RAG 方案详解(流程图 + 代码)
1. Naive RAG(最基础)
流程
- 离线:文档切块 -> Embedding -> 存入向量库
- 在线:问题向量化 -> 检索 Top-K -> 生成答案
流程图
文档 → 固定大小切块 → Embedding → 向量数据库
用户问题 → Embedding → 检索相似块 → Prompt → LLM
伪代码
# 离线索引
chunks = split_into_chunks(documents, chunk_size=500, chunk_overlap=50)
for chunk in chunks:
vec = embedding_model.encode(chunk)
vector_store.insert(vec, chunk)
# 在线查询
q_vec = embedding_model.encode(query)
top_chunks = vector_store.search(q_vec, k=5)
prompt = "参考资料:" + str(top_chunks) + "\n问题:" + query
answer = llm.generate(prompt)
缺点
- 切块生硬,切断语义
- 检索质量完全依赖 Embedding
- 无过滤,易引入噪声
2. Multi-Query RAG(多查询检索)
思路
用户问法口语化 -> LLM 生成多个同义问句 -> 分别检索 -> 合并去重
流程图
怎么报销?
-> LLM 改写
报销流程是什么、费用审批怎么操作、如何提交报销申请
-> 多路检索 -> 合并去重 -> LLM
伪代码
queries = llm.generate("改写为3个不同问法:" + query)
results = [vector_store.search(embed(q), k=5) for q in queries]
merged = deduplicate(results)
answer = llm.generate(str(merged) + query)
适用场景
客服、电商、用户口语化提问
3. HyDE(假设答案检索)
思路
短问题向量与长文档不匹配 -> LLM 先生成假答案 -> 用假答案检索
流程图
KV Cache 是什么?
-> LLM 生成假答案
假答案向量 -> 检索 -> 命中真实文档
伪代码
hypo_ans = llm.generate("回答:" + query)
hypo_vec = embedding_model.encode(hypo_ans)
top_chunks = vector_store.search(hypo_vec, k=5)
answer = llm.generate(str(top_chunks) + query)
适用场景
短问题匹配技术长文档
4. 语义分块(Semantic Chunking)
思路
不按字数切,按句子相似度切,相似度骤降 = 切块
伪代码
sentences = split_sentences(doc)
for i in range(1, len(sentences)):
sim = cos_sim(embed(sentences[i-1]), embed(sentences[i]))
if sim < threshold:
chunks.append(cur_chunk)
cur_chunk = []
cur_chunk.append(sentences[i])
适用场景
会议纪要、访谈、结构松散文本
5. 层级索引(Parent-Child)
思路
大块(Parent)套小块(Child)
Child 检索,Parent 返回上下文
流程图
文档 -> 大块(章节)-> 小块(段落)
检索小块 -> 返回大块给 LLM
伪代码
# 离线
parents = split_sections(doc)
for p in parents:
children = split_paragraphs(p)
for c in children:
index.insert(embed(c), c, parent_id=p.id)
# 在线
matched_children = index.search(embed(query), k=5)
parents = get_parent_by_child(matched_children)
answer = llm.generate(str(parents) + query)
适用场景
长文档、合同、技术手册
6. Hybrid Search(混合检索)
思路
向量检索(语义) + BM25(关键词精确匹配) -> RRF 融合排序
伪代码
semantic = vector_store.search(embed(q), k=20)
keyword = bm25.search(q, k=20)
# RRF 融合
for doc in semantic | keyword:
score = 0
if doc in semantic:
score += 1/(60 + rank_s)
if doc in keyword:
score += 1/(60 + rank_k)
适用场景
技术文档、错误码、术语密集、法律医疗
四、RAG 高频面试题 20 道(带标准答案)
一、基础题(必背)
1. RAG 是什么?解决什么问题?
答案:RAG 是检索增强生成,核心是先检索外部知识库,再让大模型基于检索结果生成答案。解决大模型知识过时、幻觉、无法访问私有数据三大问题。
2. RAG 和 Fine-tuning 区别?
答案:
- RAG:免训练、更新快、成本低、适合私有知识库、可控性强
- Fine-tuning:需要训练数据、更新成本高、适合学习风格/能力
3. Naive RAG 的流程是什么?有什么缺点?
答案:流程:文档切块→Embedding→入库→问题检索→生成答案。缺点:切块生硬、检索依赖 Embedding、无结果过滤、易引入噪声。
4. 什么是向量 Embedding?
答案:把文本转换成一串数字向量,让计算机可以计算语义相似度,是 RAG 检索的基础。
5. 常见向量数据库有哪些?
答案:Milvus、Chroma、Qdrant、FAISS、Pinecone。
二、进阶题(高频)
6. Multi-Query RAG 解决什么问题?
答案:解决用户提问口语化、表述不标准,导致检索匹配差的问题。通过 LLM 生成多组查询,扩大检索覆盖。
7. HyDE 原理是什么?为什么有效?
答案:先让 LLM 生成一段假答案,再用假答案向量检索。因为假答案文体更接近真实文档,向量距离更近,检索更准。
8. 语义分块和固定分块区别?
答案:固定分块按字数切,简单但容易切断语义;语义分块按句子相似度切,保证语义完整,适合结构松散文本。
9. Parent-Child 检索优势?
答案:小块保证检索精度,大块保证上下文完整,长文档场景必用。
10. Hybrid Search 为什么比纯向量好?
答案:向量负责语义理解,BM25 负责精确术语/编号匹配,RRF 融合排序,兼顾语义与精度,生产环境标配。
11. Reranking 作用是什么?
答案:对检索结果二次重排序,把最相关的排前面,过滤噪声、提升生成质量。
12. 如何解决 RAG 检索不到信息?
答案:优化分块策略、使用 Multi-Query/HyDE、开启混合检索、扩大召回数量、更换更好的 Embedding 模型。
13. 如何解决 RAG 幻觉?
答案:严格限定只使用参考资料、增加引用溯源、优化分块、使用高质量知识库、加入反思机制。
14. RAG 如何评估效果?
答案:准确率、召回率、相关性评分、人工评估、ROUGE/BLEU 指标。
15. Chunk Size 怎么设置?
答案:通用 300~800 字;长文档用层级分块;短文档/代码块设更小。
三、项目/架构题(大厂爱问)
16. 生产环境 RAG 系统怎么设计?
答案:标准架构:文档解析→分块→Embedding→向量库→混合检索→重排→Prompt 优化→LLM 生成→结果返回。
17. 百万级文档 RAG 如何优化性能?
答案:分库分索引、批量 Embedding、热点缓存、GPU 加速、缩小召回数量、使用混合检索。
18. RAG + Agent 有什么优势?
答案:Agent 可自主决策是否检索、多轮检索、工具调用、复杂推理,让 RAG 更智能、更可靠。
19. GraphRAG 适用场景?
答案:知识关联强、需要深度推理的场景,如医疗、法律、学术、企业知识图谱、金融研报。
20. RAG 项目中常见坑?
答案:分块切断语义、检索不准、Prompt 不合理、Embedding 模型不匹配、幻觉、上下文过长。
五、RAG 快速选型指南
- 简单 Demo:Naive RAG
- 口语提问:Multi-Query
- 短问长文:HyDE
- 松散文本:语义分块
- 长文档:Parent-Child
- 术语/编号:Hybrid Search
六、总结
RAG 不是一个固定算法,而是一套检索 + 生成的技术体系。
从最简单的 Naive RAG 到 Agentic RAG,核心都是提升检索质量、增强生成可靠性。
掌握本文 16 种方案 + 面试题(带答案),不管是面试还是做项目,都能直接上手。
本文已整理成可直接背诵版本,建议点赞+收藏+关注,后续持续更新 AI 开发干货!
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)