RAG 超级教程:从原理到实战,用向量+重排模型搭出又准又省钱的 AI 问答

RAG 超级教程:从原理到实战,用向量+重排模型搭出又准又省钱的 AI 问答 你有没有过这种冲动网站有几百篇文章想做一个「站内 AI 助手」于是把全部文章正文拼进 system prompt再问问题我最初也是这么干的。直到账单出来、回答开始胡说八道、长文章直接超出上下文窗口——才意识到这是条弯路。这篇教程把 RAGRetrieval-Augmented Generation检索增强生成讲透为什么不要「全塞进 prompt」正确的姿势是什么怎么用硅基流动免费的两个模型嵌入BAAI/bge-m3 重排BAAI/bge-reranker-v2-m3搭出又准又省钱的问答系统。想白嫖这两个免费模型可以用这个注册链接https://cloud.siliconflow.cn/i/MBwLMSrY一、什么是 RAGWhyRAG Retrieval-Augmented Generation检索增强生成在让大模型生成答案之前先从外部知识库里检索出最相关的资料把这些资料连同问题一起交给大模型让它「带着资料」回答。它的核心思想一句话让模型「现查现答」而不是指望它把全世界的 knowledge 都背在参数里。为什么会出现 RAG大模型本身有几个天生的天花板知识有截止日期模型只在训练数据时间点之前「懂」之后的事一概不知。看不到你的私有数据公司文档、你的博客、客户聊天记录模型训练时根本没见过。上下文窗口有限哪怕有 200K 上下文也装不下整个知识库。会一本正经地胡说幻觉 / Hallucination资料里没有的内容它也会编得头头是道。2020 年 Meta 等提出的Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks论文就是为了让模型在回答时「先查资料」从而缓解上述问题。后来随着向量数据库和 embedding 模型成熟RAG 成了落地 LLM 应用最主流的范式。它解决了什么问题 / 与传统大模型回答的区别传统大模型回答RAG 增强回答知识来源训练时「背」进去的参数实时检索的外部资料时效性停在训练截止日资料更新即生效私有数据看不到能检索到可溯源无法引用出处能给出资料来源幻觉容易编造有资料约束显著降低一句话传统大模型是「凭记忆考试」RAG 是「开卷考试」。二、为什么需要 RAG重点说痛点这恰恰是 RAG 存在的理由大模型知识会过时2024 年的模型答不了 2026 年的新政策、新 API。容易产生幻觉Hallucination没有资料时模型会自信地编造事实、链接、数字。无法直接访问企业私有数据内部 Wiki、合同、工单模型根本不知道。Prompt 太长Token 成本高把全站文章塞进 prompt每次提问都重发几百万 token。无法引用资料来源用户无法核实「这句话到底出自哪里」不信任。RAG 把「记忆」和「查资料」解耦——模型负责推理和表达知识存放在外面随时可更新。三、RAG 的工作流程一张流程图就能说清用户问题Embedding 向量化Vector Database 向量库Retriever 检索 Top-KReranker 重排 可选LLM 生成答案放到文字里就是用户问题 ↓ Embedding向量化把问题变成向量 ↓ Vector Database向量数据库里存着所有资料的向量 ↓ Retriever检索找出和问题向量最相似的若干段 ↓ Reranker重排可选对召回结果按真实相关性重新打分 ↓ LLM带着最相关的资料生成答案每一步的作用Embedding把自然语言变成一串数字向量让「语义相似」可以被「数学距离」衡量。Vector Database存放所有资料的向量支持「按向量找最近邻」的高效检索。Retriever用问题的向量去库里做最近邻搜索粗筛出候选如 15 段。Reranker把「问题 每个候选」拼起来重新打分精排出真正最相关的如 5 段。这是质量的关键一步。LLM只消费 top-N 资料生成带出处的答案。四、RAG 的核心组件1. Embedding嵌入模型把文本映射成固定维度的稠密向量。维度常见的有 768 / 1024 / 1536。中文场景首选BAAI/bge-m31024 维中英文都强在硅基流动上免费。那「向量」到底是什么一句话向量就是一串数字代表一段文本在「语义空间」里的坐标。想象一张地图每篇文章、每句话都是一个点语义相近的句子在地图上离得近不相关的离得远。但文字本身没法直接算「距离」所以嵌入模型把它变成一串定长的数字比如 1024 维的[0.12, -0.03, 0.87, …]。这串数字就是那句话的「坐标」。维度越高能表达的语义越细腻1024 维比 384 维装得下更多细微差别。「语义相似」≈「向量距离近」用余弦相似度两个向量夹角的余弦衡量越接近 1 越相关越接近 0 越不相关。大模型「读」的是向量吗——这是个常见误解不是。要把两件事分清楚向量只用来「检索」检索阶段系统把问题也变成向量去向量库里找「离得最近」的几个文本片段。这一步全是数学计算算距离、排序大模型不参与。真正喂给大模型的是「原文」检索完成后系统把对应的原始文本片段注意不是那串数字拼进 prompt大模型读的是这些文字再据此生成答案。所以更准确的说法是向量负责「找得准」大模型负责「读得懂」。向量是给检索器用的「地址」不是给大模型读的「内容」。也是因为这个分工RAG 才能用很便宜的模型就答得准——大模型看到的只是精挑细选出来的几段文字。2. Chunk文本切分把长文档切成小段chunk。RAG 的检索粒度是 chunk不是整篇文档。切得太粗→召回不精准太细→语义被切碎。常见甜区是300~500 字。3. Vector Database向量数据库专门存向量、支持 ANN近似最近邻检索的数据库。可选 Qdrant / Milvus / Chroma / FAISS或直接在 Postgres 里用pgvector扩展本博客用的就是它。4. Retriever检索器负责「问题向量 → 候选 chunk」的粗筛。核心是余弦相似度 / 内积 / 欧氏距离。5. Reranker重排模型Cross-Encoder 结构比单纯余弦准得多。把query 候选一起喂进去打分。BAAI/bge-reranker-v2-m3在硅基流动上同样免费。6. LLM生成模型最后消费 top-N 资料生成答案。因为只看到几段所以可以用更便宜的模型成本骤降。它们如何配合嵌入模型负责「入库」和「查」时的向量化向量库检索器负责粗筛重排模型负责精排LLM负责表达。前三者决定「找得准」最后一个决定「答得好」。五、RAG 的优势回答更准确带着真实资料回答而不是凭空编。降低幻觉有资料约束编造空间被压缩。可引用来源每条答案能附上出处段落用户可核实。知识实时更新往库里加新文档即可不用动模型。降低 Token 消耗只送 top-N 段几千 token不是全库。可使用更便宜的生成模型因为上下文短而精小模型也答得不错。企业数据无需重新训练模型知识在外面模型参数不动。六、RAG 与微调Fine-tuning的区别这是高频搜索话题一张表说清维度RAG微调Fine-tuning知识更新快加文档即生效慢需重新训练是否修改模型不改参数修改模型权重实时更新知识支持不支持需重训成本低主要是检索少量生成高训练算力数据标注适合场景知识库 / 检索问答让模型学会某种「能力 / 风格」重点很多企业实际采用「RAG 微调」组合——用 RAG 提供最新、可溯源的知识用微调让模型掌握特定的表达风格或任务格式。不是二选一。七、如何搭建一个 RAG完整流程准备文档博客文章、PDF、Wiki、工单等原始资料。文本切分Chunk按语义切成 300~500 字的小段。Embedding用 bge-m3 把每段变成向量。写入向量数据库chunk 向量 元数据入库。用户提问问题进来。检索问题向量化后在库里召回 Top-15。重排可选但推荐用 bge-reranker 重排取 Top-5。交给 LLM 回答把 Top-5 拼进 prompt生成答案并附来源。具体内容来看我博客:RAG教程