RAG 检索增强生成入门:把外部知识接进大模型
大模型把世界知识压缩进参数(即参数化记忆),但这带来两个老问题:知识有时效边界,训练截止之后的事它无从知晓;面对专业或私有语料,模型又容易自信地编造,也就是幻觉。检索增强生成(Retrieval-Augmented Generation, 简称 RAG)的思路是:在让模型开口作答之前,先从外部知识库取回相关资料,把答案「钉」在证据之上。【已核验:RAG 由 Lewis 等人于 2020 年提出,论文 arXiv:2005.11401】
为什么需要 RAG
纯参数化模型像一位闭卷考生,记不住就会发生幻觉,记错了也无从核对。RAG 把它变成开卷考试:遇到提问,先翻资料,再下笔。这样做的好处有三:知识可更新(改知识库即可,不必重训模型)、来源可溯源(答案能对应到具体片段)、私有可达(企业内网文档不必进训练集)。【已核验:上述动机为 RAG 论文与后续综述的共识】
核心流程:索引、检索、增强、生成
一条标准 RAG 链路可拆为四个阶段,下面用文字描述其衔接关系:
知识库文档:切分为片段,每段经 Embedding 向量化,存入向量库(索引阶段)
用户问题:同样向量化,在向量库中检索最相近的若干片段(检索阶段)
增强阶段:把检索到的片段拼接到问题之后,构成带上下文的提示词
生成阶段:大模型基于该提示词作答,并尽量引用所给片段
用伪代码表示更直观:
# 简化的 RAG 推理流程(伪代码,非可运行实现)
def rag_answer(question, vector_store, llm, top_k=3):
q_vec = embed(question) # 问题向量化
hits = vector_store.search(q_vec, k=top_k) # 相似检索,取回 top-k 片段
context = "\n".join(h.text for h in hits) # 拼接检索到的上下文
prompt = f"参考以下资料回答问题:\n{context}\n\n问题:{question}"
return llm.generate(prompt) # 基于上下文生成答案
Embedding 与向量库的作用
Embedding 模型把文本映射为稠密向量,语义相近的文本在向量空间里距离更近。检索时,把问题向量与库中片段向量做相似度比较(常用余弦相似度或近似最近邻搜索),找出最相关的若干片段。向量库(如 FAISS、Milvus、Chroma、Weaviate、Pinecone)负责高效地存储这些向量并支持快速检索。【已核验:前述向量库为业界常用开源或商用方案;具体选型与版本结论待核实】
Naive RAG 与 Advanced RAG
最朴素的 Naive RAG 直接切块、向量化、取回 top-k 片段塞进提示词。它上手快,却常受切块粗糙、查询表述不佳、检索噪声拖累。【已核验】
Advanced RAG 在检索前后加入增强手段,常见有四类:
- 查询改写与扩展:先把用户问题改写成更易检索的形式,或拆出多个子查询做多路召回。
- 混合检索:关键词检索(如 BM25)与向量检索并用,兼顾字面匹配与语义匹配。
- 重排(Rerank):用交叉编码器等更精细的模型对初召回结果重新打分,留下最相关片段。
- 多路召回与过滤:结合元数据过滤、父子片段等策略,提升精度与覆盖。
这些手段的共同目标,是让「最终喂给模型的那几段」更准、更全。【已核验:查询改写、混合检索、重排均为 Advanced RAG 的常见实践】
典型挑战
- 检索质量:召回不准,再强的模型也答不对;需要在召回率与精度之间权衡。
- 上下文截断:检索片段过多会超出上下文窗口,或稀释掉关键信息。
- 引用与归因:模型可能引用并不存在的资料,或答非所问,需要可追溯与事实校验。
- 时效与一致性:知识库更新后须同步重建索引,否则检索到的是过期内容。
与微调(Fine-tuning)的区别
微调改动模型权重,让模型「记住」某种风格、任务或领域分布,适合固定模式的深度定制;RAG 不改权重,只在推理时注入外部资料,擅长处理时效性强、频繁变动或私有的知识,并且天然提供出处。二者并非二选一,常结合使用:用微调塑造能力与语气,用 RAG 供给最新事实。【已核验:RAG 与微调互补为业界共识;具体收益定量结论待核实】
小结
RAG 通过在生成前接入外部检索,把大模型从「凭记忆作答」升级为「带资料作答」,有效缓解时效与幻觉问题。从 Naive 到 Advanced,核心杠杆在于把检索做准:查询改写、混合检索与重排是关键手段。理解 RAG 与微调的分工,能帮你为知识型应用选对技术路线。
参考与延伸阅读
- Lewis P, 等. Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks. arXiv:2005.11401, 2020【已核验】。
- Gao Y, 等. Retrieval-Augmented Generation for Large Language Models: A Survey. arXiv:2312.10997, 2023【待核实】。
- 向量库选型参考:FAISS、Milvus、Chroma、Weaviate 官方文档【待核实】。