当前位置: 首页 > news >正文

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

你有没有过这种冲动:网站有几百篇文章,想做一个「站内 AI 助手」,于是把全部文章正文拼进 system prompt,再问问题?

我最初也是这么干的。直到账单出来、回答开始胡说八道、长文章直接超出上下文窗口——才意识到这是条弯路。

这篇教程把 RAG(Retrieval-Augmented Generation,检索增强生成)讲透:为什么不要「全塞进 prompt」,正确的姿势是什么,怎么用硅基流动免费的两个模型(嵌入BAAI/bge-m3+ 重排BAAI/bge-reranker-v2-m3)搭出又准又省钱的问答系统。

想白嫖这两个免费模型,可以用这个注册链接:https://cloud.siliconflow.cn/i/MBwLMSrY


一、什么是 RAG(Why)

RAG = Retrieval-Augmented Generation(检索增强生成):在让大模型生成答案之前,先从外部知识库里检索出最相关的资料,把这些资料连同问题一起交给大模型,让它「带着资料」回答。

它的核心思想一句话:让模型「现查现答」,而不是指望它把全世界的 knowledge 都背在参数里。

为什么会出现 RAG?

大模型本身有几个天生的天花板:

  • 知识有截止日期:模型只在训练数据时间点之前「懂」,之后的事一概不知。
  • 看不到你的私有数据:公司文档、你的博客、客户聊天记录,模型训练时根本没见过。
  • 上下文窗口有限:哪怕有 200K 上下文,也装不下整个知识库。
  • 会一本正经地胡说(幻觉 / Hallucination):资料里没有的内容,它也会编得头头是道。

2020 年 Meta 等提出的Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks论文,就是为了让模型在回答时「先查资料」,从而缓解上述问题。后来随着向量数据库和 embedding 模型成熟,RAG 成了落地 LLM 应用最主流的范式。

它解决了什么问题 / 与传统大模型回答的区别

传统大模型回答RAG 增强回答
知识来源训练时「背」进去的参数实时检索的外部资料
时效性停在训练截止日资料更新即生效
私有数据看不到能检索到
可溯源无法引用出处能给出资料来源
幻觉容易编造有资料约束,显著降低

一句话:传统大模型是「凭记忆考试」,RAG 是「开卷考试」。


二、为什么需要 RAG

重点说痛点,这恰恰是 RAG 存在的理由:

  1. 大模型知识会过时:2024 年的模型答不了 2026 年的新政策、新 API。
  2. 容易产生幻觉(Hallucination):没有资料时,模型会自信地编造事实、链接、数字。
  3. 无法直接访问企业私有数据:内部 Wiki、合同、工单,模型根本不知道。
  4. Prompt 太长,Token 成本高:把全站文章塞进 prompt,每次提问都重发几百万 token。
  5. 无法引用资料来源:用户无法核实「这句话到底出自哪里」,不信任。

RAG 把「记忆」和「查资料」解耦——模型负责推理和表达,知识存放在外面随时可更新。


三、RAG 的工作流程

一张流程图就能说清:

用户问题

Embedding 向量化

Vector Database 向量库

Retriever 检索 Top-K

Reranker 重排 可选

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-m3(1024 维,中英文都强),在硅基流动上免费

那「向量」到底是什么?

一句话:向量就是一串数字,代表一段文本在「语义空间」里的坐标。

想象一张地图:每篇文章、每句话都是一个点,语义相近的句子在地图上离得近,不相关的离得远。但文字本身没法直接算「距离」,所以嵌入模型把它变成一串定长的数字,比如 1024 维的[0.12, -0.03, 0.87, …]。这串数字就是那句话的「坐标」。

  • 维度越高,能表达的语义越细腻(1024 维比 384 维装得下更多细微差别)。
  • 「语义相似」≈「向量距离近」:用余弦相似度(两个向量夹角的余弦)衡量,越接近 1 越相关,越接近 0 越不相关。

大模型「读」的是向量吗?——这是个常见误解

不是。要把两件事分清楚:

  1. 向量只用来「检索」:检索阶段,系统把问题也变成向量,去向量库里找「离得最近」的几个文本片段。这一步全是数学计算(算距离、排序),大模型不参与。
  2. 真正喂给大模型的是「原文」:检索完成后,系统把对应的原始文本片段(注意,不是那串数字)拼进 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

完整流程:

  1. 准备文档:博客文章、PDF、Wiki、工单等原始资料。
  2. 文本切分(Chunk):按语义切成 300~500 字的小段。
  3. Embedding:用 bge-m3 把每段变成向量。
  4. 写入向量数据库chunk + 向量 + 元数据入库。
  5. 用户提问:问题进来。
  6. 检索:问题向量化后,在库里召回 Top-15。
  7. 重排(可选但推荐):用 bge-reranker 重排,取 Top-5。
  8. 交给 LLM 回答:把 Top-5 拼进 prompt,生成答案并附来源。

具体内容来看我博客:

RAG教程

http://www.jsqmd.com/news/1166309/

相关文章:

  • 为什么92%的开发者在ChatGPT API调用中漏掉这3个Headers?——HTTP协议层深度优化指南
  • 紧急预警!ChatGPT免费用户正面临“渐进式功能阉割”——依据OpenAI Terms v4.27与最新CDN路由日志的72小时实证分析
  • 宝珀中国官方售后服务中心|地址与客户服务热线权威信息声明(2026年7月更新) - 宝珀官方售后服务中心
  • 告别Excel手工导入:基于Luban与Jenkins的Unity配置表自动化管线实践
  • 2026年半封闭丝杆模组选这3家,实用不踩坑!
  • 雅典官方服务项目及价格查询|服务热线及全部维修详细地址权威信息通告(2026年7月最新) - 亨得利官方服务中心
  • 互联网大厂 Java 求职者面试:如何应对复杂问题的挑战
  • 工业级高精度ADC与STM32信号采集系统设计
  • ArcGIS Pro 3.1 符号化实战:从单一符号到热点图的5种方法对比
  • 喜马拉雅音频下载器:5步解锁VIP音频永久保存方案
  • C++控制台游戏开发实战:从零实现《和平精英》文字版
  • 2026年7月最新天梭南京江宁万达广场维修保养服务电话 - 天梭服务中心
  • Agent 插件体系:用工厂模式构建可插拔的 Agent 工具注册与发现机制
  • 武汉科谷技工学校宠物养护与驯导专业招生简章 - 湖北找学校
  • 高并发场景下,Claude 中转站为什么更考验稳定性
  • Cocos Creator资源管理终极指南:从Asset Bundle到热更新的完整实践
  • 引言-无处不在的电容传感器
  • 佛山黄金回收 你的第二份收入在首饰盒里 六家店等你来 - 新芸鼎珠宝首饰
  • 3分钟快速上手:m4s-converter让你轻松转换B站缓存视频为MP4格式
  • C++实现搜索引擎核心:正排与倒排索引构建与优化实战
  • sdcard检索输出里是否存在分区
  • 2026年7月最新积家龙湖天津梅江天街维修保养服务电话 - 积家官方售后服务中心
  • 警惕 Claude Opus 4.6 不存在:识别AI模型虚假版本与安全调用指南
  • 3分钟搞定:让经典老游戏在现代Windows上完美运行的终极方案
  • Excel VLOOKUP 函数实战:3步完成跨表图书销售数据自动填充
  • 深圳黄金回收 你的下班时间还能多一笔收入 清奢六家店帮你 - 新芸鼎珠宝首饰
  • Vector GL记录仪5大实用技巧,助力全场景车辆数据采集
  • AI自我改进:从概念到工程实践,探索Harness驱动的可控迭代
  • 安卓平板真实使用指南:连接性、USB-C接口与文件系统决定生产力
  • 将军山夜游业态升级 点亮阿勒泰夏日经济