作者:AI技术观察 | 发布时间:2026年4月10日 北京时间
当我们在对话框中向AI提问“2025年诺贝尔物理学奖得主是谁”,它不但能准确给出答案,还会贴心地附上信息来源。这样“言之有据”的回答背后,依靠的正是RAG(Retrieval-Augmented Generation,检索增强生成)技术。ai写作助手在哪资料才能做到既准确又实时?答案就藏在RAG这个当下最热门的大模型应用框架之中。

本文将从传统LLM的痛点切入,系统拆解RAG的技术原理、检索策略、与微调的对比关系,并提供可运行的代码示例和高频面试题,帮你建立完整的RAG知识链路。
痛点切入:为什么大模型需要“查资料”

先来看一段传统LLM(Large Language Model,大语言模型)直接生成回答的代码:
传统LLM直接生成(不经过检索) def direct_llm_response(question): 模型仅凭参数化记忆生成回答 return llm.generate(question)
这种纯参数化模式看似简洁,却存在三大致命痛点-12:
知识时效性差:模型知识依赖训练数据截止时间,无法自动获取最新信息。要更新知识,必须重新训练模型——数千GPU小时、数百万美元的成本,让多数企业望而却步-12。
“幻觉”问题严重:模型会一本正经地编造看似合理但实则错误的信息。经典案例中,BART模型将“中耳”定义为“耳朵和鼻子之间的部分”,在医疗、法律等严肃场景下完全不可接受-11-12。
答案无法溯源:模型生成回答时,用户无法验证信息来自哪里,也无法判断其可靠性-12。
这些问题正是RAG技术诞生的直接驱动力。
核心概念:RAG——让AI学会“查资料”
RAG(Retrieval-Augmented Generation,检索增强生成) 并非一个全新的模型,而是一种将信息检索系统与LLM生成能力巧妙结合的技术框架-11。
生活化类比:如果说传统LLM是一个只能依赖脑中陈旧教材答题的天才学生,那么RAG就是为他配备了一位顶级图书管理员和一座实时更新的数字图书馆。每次回答问题前,这位管理员都会迅速从图书馆中找出最权威的资料供他参考-11。
RAG的工作流程可概括为“索引 → 检索 → 增强与生成”三个核心步骤-11:
索引:将可靠的知识源(如内部文档、研究报告)分割成片段,转换为向量,存入向量数据库。
检索:用户提问时,系统先将问题转换为向量,在数据库中最相关的文档片段。
增强与生成:将检索到的文档与原始问题一起提交给LLM,基于增强后的上下文生成答案。
检索策略全景:从BM25到Embedding再到Reranker
检索是RAG系统的“知识入口”,其质量直接影响最终回答的准确度。正所谓“Garbage In, Garbage Out”——如果检索员找来的资料牛头不对马嘴,再强大的LLM也难以给出正确回答-51。
BM25:关键词匹配的“老兵”
BM25(Best Matching 25)是一种基于词袋模型的经典排序算法,广泛应用于传统引擎中。其核心思想是通过关键词匹配程度来衡量文档与查询的相关性-51。它的打分会综合考虑词频(TF,Term Frequency)、逆文档频率(IDF,Inverse Document Frequency)和文档长度归一化三个因素-51。
底层原理:BM25的本质是倒排索引(Inverted Index),通过建立“词 → 文档”的映射关系实现快速检索。在处理查询时,系统会生成一个稀疏向量,利用预先构建的倒排索引迅速定位包含查询词的文档集合,再通过BM25公式进行相关性打分排序-。
Embedding与向量检索:语义匹配的“新锐”
向量检索的核心思想是将文本通过Embedding模型映射到高维向量空间,然后通过余弦相似度等算法计算向量之间的距离,实现语义级匹配-16。
from sentence_transformers import SentenceTransformer import numpy as np 初始化语义编码器 model = SentenceTransformer('paraphrase-multilingual-MiniLM-L12-v2') 文档库编码 documents = ["二甲双胍是2型糖尿病的一线用药...", "胰岛素治疗适用于..."] doc_embeddings = model.encode(documents) 查询编码与检索 query = "2型糖尿病初始治疗方案" query_embedding = model.encode([query]) similarities = np.dot(query_embedding, doc_embeddings.T)[0] top_idx = np.argmax(similarities)
底层原理:向量检索依赖嵌入模型(如BERT、Sentence-BERT)将文本转化为高维向量,借助向量数据库(如FAISS、Milvus、Chroma)进行存储和管理,通过余弦相似度等算法计算向量距离,配合HNSW、IVF等索引算法实现亿级向量的毫秒级检索-22。
Reranker:最后的“把关人”
Reranker(重排序模型)作为检索流程的最后一环,通过交叉编码器(Cross-Encoder)对初步召回的候选文档进行精细打分和重新排序,能显著提升检索准确率。
混合检索:取其精华的最佳实践
单一检索方式各有短板:BM25擅长关键词精确匹配但语义理解不足,Embedding擅长语义理解但可能遗漏精确关键词。业界普遍采用混合检索策略——同时使用BM25(关键词检索)和向量检索(语义检索),将两者结果融合后,再经过Reranker进行精细排序,以达到最佳效果-51-60。
关联概念:RAG vs 微调——一场“开卷”与“闭卷”的较量
在AI知识增强领域,RAG与微调(Fine-Tuning,FT)是两条主流技术路径,理解它们的区别是面试和工程选型的高频考点。
核心区别一句话总结:微调是在模型内部“灌知识”(把书背下来),RAG是让模型“查资料”(开卷考试)-60。
| 对比维度 | RAG方案 | 微调方案 |
|---|---|---|
| 知识更新周期 | 分钟级(更新索引即可) | 天/周级(需重新训练) |
| 单次查询延迟 | 200-500ms | 50-200ms |
| 可解释性 | 强(可追踪引用来源) | 弱(知识内化,无法溯源) |
| 启动成本 | 中等(需搭建检索系统) | 高(需GPU训练资源) |
| 适用场景 | 知识频繁更新、需要溯源 | 领域术语特殊、响应延迟敏感 |
选型建议:当知识需要频繁更新(如政策法规问答)、需要严格的内容溯源、或初期预算有限时,优先选择RAG;当领域术语存在特殊语义、要求极低延迟响应、或长期运营成本敏感时,优先选择模型微调。对于关键业务系统,建议采用混合架构:基础层用微调模型掌握核心概念,增强层用RAG提供最新补充信息-40。
代码示例:从零搭建一个RAG问答系统
下面使用FAISS和Ollama搭建一个完整的RAG问答系统-22:
import faiss from sentence_transformers import SentenceTransformer import numpy as np from langchain_ollama import OllamaLLM Step 1: 准备知识库文档 knowledge_base = [ "RAG通过检索增强生成,让AI能够实时查阅外部知识库。", "向量数据库是RAG的核心组件,用于存储和检索文档向量。", "混合检索结合BM25和向量检索,能大幅提升RAG系统准确率。" ] Step 2: 构建向量索引(索引阶段) model = SentenceTransformer('paraphrase-multilingual-MiniLM-L12-v2') doc_embeddings = model.encode(knowledge_base) dimension = doc_embeddings.shape[1] index = faiss.IndexFlatL2(dimension) index.add(doc_embeddings.astype('float32')) Step 3: RAG问答函数(检索 → 增强 → 生成) def rag_query(question): 检索阶段:查询向量化并最相关文档 query_embedding = model.encode([question]).astype('float32') distances, indices = index.search(query_embedding, k=2) 增强阶段:构建增强上下文 retrieved_docs = [knowledge_base[i] for i in indices[0]] context = "\n".join(retrieved_docs) enhanced_prompt = f"基于以下参考资料回答问题:\n{context}\n\n问题:{question}" 生成阶段:调用本地LLM生成答案 llm = OllamaLLM(model="qwen2.5:7b") return llm.invoke(enhanced_prompt) 测试 response = rag_query("RAG的核心组件是什么?") print(response)
执行流程解读:
索引阶段:知识库文档 → 编码为向量 → 存入FAISS索引
检索阶段:用户问题 → 编码为向量 → FAISS相似度 → 返回Top-k文档
增强阶段:检索到的文档 + 原始问题 → 构建增强Prompt
生成阶段:LLM基于增强Prompt生成最终答案
底层原理支撑:RAG的技术基石
RAG系统的底层运作依赖几个关键技术点的支撑:
嵌入模型(Embedding Model) :负责将非结构化的文本转化为高维向量。代表性模型有BERT、Sentence-BERT、BGE等。
向量数据库(Vector Database) :专门存储和高效检索高维向量的数据库系统。主流选择包括FAISS(内存级)、Milvus(分布式)、Chroma(轻量级)等。
近似最近邻(ANN,Approximate Nearest Neighbor) :在保证一定精度的前提下大幅提升向量检索速度的核心算法,如HNSW、IVF等。
相似度计算:常用余弦相似度(Cosine Similarity)或欧氏距离来衡量向量之间的语义相关性。
高频面试题(含参考答案)
1. 什么是RAG?请简述其工作原理
参考答案:RAG全称Retrieval-Augmented Generation(检索增强生成),是一种结合外部知识检索和大语言模型生成的混合架构。其工作流程分为三步:首先将知识库文档向量化存入向量数据库(索引);用户提问时将问题向量化检索最相关文档(检索);最后将检索结果与问题一起提交给LLM生成答案(增强与生成)。RAG能有效降低幻觉、实现知识实时更新、并提供可追溯的信息来源-60。
2. RAG与模型微调有什么区别?分别适用于什么场景?
参考答案:RAG是在推理时动态检索外部知识,属于“开卷考试”,知识更新快(分钟级)、可溯源、成本低,但延迟较高;微调是将知识训练进模型参数,属于“闭卷考试”,延迟低、响应自然,但知识更新需重新训练(天/周级),成本高且不可溯源。RAG适用于知识频繁更新、需要溯源的场景(如政策问答);微调适用于专业术语密集、离线环境或对延迟敏感的场景(如医疗诊断助手)-60-40。
3. 如何解决RAG系统中“检索结果不相关”的问题?
参考答案:检索不相关通常源于三个方面——数据预处理、检索策略和后处理。解决方案包括:①优化文本分块策略,采用基于语义的动态分块;②使用混合检索(BM25+向量检索)提高召回覆盖面;③引入Reranker(重排序模型)对检索结果进行精细排序;④调整相似度阈值和Top-k参数;⑤使用查询改写技术优化原始查询的语义表达-60-61。
结尾总结
回顾全文,RAG技术的核心价值在于:通过“检索+生成”的框架设计,让大模型不再依赖有限的内置记忆,而是学会实时查阅外部知识库,从根本上解决知识滞后和幻觉问题。
关键知识点回顾:
✅ RAG = 索引 + 检索 + 增强与生成
✅ 检索策略:BM25(关键词) + Embedding(语义) + Reranker(精排)
✅ RAG vs 微调 = 开卷考试 vs 闭卷考试
✅ 核心底层技术:嵌入模型 + 向量数据库 + ANN算法
✅ 典型应用:企业知识库问答、政策法规咨询、科研文献综述
进阶预告:下一篇文章我们将深入探讨RAG系统的工程优化实践——如何应对高并发场景?如何优化检索延迟?如何实现多模态RAG?敬请期待!
本文由AI技术观察原创,转载需注明出处。