AI 基础 · RAG 进阶
RAG 进阶:让大模型用上你自己的资料
大模型再聪明,也不知道你公司内部那本《员工手册》写了啥,更不知道昨天刚发的公告。RAG(检索增强生成)就是:先去你的资料库里把相关段落捞出来,塞进提示词,再让模型照着答。这一课讲怎么把"粗捞"升级成"精捞"——切块、选向量、混合检索、重排序,一个都不能少。
① RAG 的基本流水线
1切块 Chunking
把长文档切成一段段小文本。
2向量化 Embedding
每块转成一个向量存进库。
3检索
用户问题找最相似的几块。
4生成
把捞到的块连同问题交给大模型作答。
为什么要切块整篇文章太长,模型塞不下、也抓不住重点;切成合适大小的块,既能精准检索,又能完整放进上下文。切块切得好不好,直接决定 RAG 答得准不准。
② Chunking 策略:怎么切才不把句子切两半
| 策略 | 做法 | 优缺点 |
| 固定大小 | 按 token 数硬切,如每 500 token 一块,带重叠 | 简单快,但可能把一句话切两半、上下文断裂 |
| 递归切分 | 优先按段落→句子→词逐级切,尽量在自然边界断 | 保留语义完整,最常用、性价比高 |
| 语义切分 | 用 embedding 检测语义突变点,话题一变就切 | 块内话题纯,但慢、成本高 |
块大小怎么定太小(如 100 token)信息不全;太大(如 2000 token)检索不精准、还浪费上下文。经验值 300–800 token,留 10%–20% 重叠防止边界信息丢失。
③ Embedding 模型选择:把文字变成向量
Embedding 模型负责把一段文字映射成一串数字(向量),意思相近的句子向量也相近。选哪个很关键:
| 模型 | 特点 | 适合 |
| OpenAI text-embedding-3 | 效果稳、开箱即用、按调用收费 | 图省事、可联网的场景 |
| BGE(智源) | 开源、中文效果强、可本地部署 | 中文知识库、要私有化 |
| M3E | 开源轻量、中英双语 | 资源有限、快速起步 |
小贴士查询和文档最好用同一个 embedding 模型,否则两边向量不在一个空间里,相似度算出来全乱。
④ Hybrid Search:向量 + 关键词一起上
纯向量检索擅长"意思相近",但遇到专有名词、编号、药名、代码变量就抓瞎——因为它是按语义模糊匹配,不是精确找词。这时候要叠上传统的关键词检索。
| 方式 | 原理 | 强项 | 弱项 |
| BM25(关键词) | 统计词频,谁命中关键词多谁排前 | 精确名词、编号、缩写 | 不懂同义改写 |
| 向量检索 | 语义相似度 | 同义、换个说法也能找到 | 对精确名词不敏感 |
| Hybrid(融合) | 两路各召回一批,加权合并排序 | 两者通吃,准确率最高 | 链路稍复杂 |
融合常用做法两路结果分别归一化分数,按权重相加:
$score = \alpha \cdot score_{向量} + (1-\alpha)\cdot score_{BM25}$,$\alpha$ 常取 0.5 左右再调。
⑤ Rerank 重排序:先粗筛,再精排
召回阶段为了快,一次捞 20–50 条,但这里面有真有假。Rerank(重排序)是用一个更强大但更慢的 cross-encoder 模型,把"问题 + 每篇文档"放一起重新打分,挑出最相关的 top 3–5 条喂给大模型。
| 阶段 | 模型 | 追求 | 数量 |
| 召回 Recall | 向量/BM25 | 快,别漏掉相关的 | 20–50 条 |
| 重排 Rerank | bge-reranker 等 | 准,把最相关的顶上来 | 精排到 3–5 条 |
为什么要两段式如果直接用大模型对 50 条逐篇精读,太慢太贵;先粗召回省时间,再用 rerank 精排,速度和准确率兼得。bge-reranker 是中文场景常用的开源重排模型。
⑥ Query 改写、多轮 RAG 与 HyDE
| 技巧 | 解决什么问题 | 怎么做 |
| Query 改写 | 用户问得口语化、缺上下文 | 先让大模型把问题改写成更适合检索的标准问句 |
| 多轮对话 RAG | "那它多少钱?"里的"它"指代不明 | 结合历史把指代补全,再去检索 |
| HyDE | 问题太抽象,直接检索效果差 | 先让模型"脑补"一个假设答案,用这个假答案的向量去检索真文档 |
HyDE 的思路人问"怎么缓解失眠",直接搜可能匹配不好;先让模型编一段"假设的失眠建议",这段文字的向量反而更接近真正相关的文档段落——用想象去钓真相。
⑦ 三个例子:RAG 调优实战
例 1 · 切块把答案切没了
用户问"年假有几天",答案在"年假规定:工作满 1 年享 5 天"这句话里。
如果硬切正好在"5 天"处断开,检索到的那半句就残缺。改用递归切分 + 留重叠,答案就完整了。
例 2 · 靠关键词找到编号
用户搜"Q3-2024 报销标准"。
纯向量可能把"报销"语义相关的都捞出来,但漏掉精确编号;BM25 一眼命中含"Q3-2024"那篇。Hybrid 融合两路,结果最稳。
例 3 · Rerank 把错的挤下去
召回 30 条,其中第 1 条是"差旅费报销",第 18 条才是"餐饮费报销"。
用户问的是餐饮费。向量召回把差旅费排前面是因为都带"报销";rerank 模型精读问题和每篇文档后,把餐饮费那条顶到第一位。
防坑提示
① 别一上来就上复杂架构——大多数场景"递归切块 + BGE + 向量检索 + 重排"就够好。
② 检索不到相关内容时,模型会硬编答案。要么提升召回,要么让模型"不知道就说不知道"。
③ Embedding 模型换了,历史向量库必须全量重建,否则语义空间对不上。
⑧ 折叠自测(点开看答案)
基础1. RAG 解决大模型的什么痛点?
大模型不知道你私有的、最新的资料。RAG 先从知识库检索相关段落,再让模型基于这些资料回答,解决幻觉和知识过时问题。
中档2. 为什么要做 Hybrid Search(向量 + BM25)?
向量擅长语义相似(同义改写),BM25 擅长精确关键词(编号、专有名词)。两者融合后既懂意思又能精确命中,召回更全更准。
拔高3. Rerank 为什么放在召回之后,而不是直接用它?
Rerank 模型精读"问题+文档"对,更准但慢、贵。库里成千上万篇文档不可能全精排一遍。所以先用快的召回粗筛出 20–50 条,再用 rerank 精排出 top 3–5,速度与精度兼顾。
⑨ 费曼三问:讲给自己听
问 1:RAG 和直接问大模型有啥区别?
直接问靠模型死记的旧知识;RAG 先查你的资料再答,更新更准、还能溯源。
问 2:为什么不能整篇文档直接塞给模型?
太长塞不下、也抓不住重点;切块后只把最相关的几段捞出来,既省 token 又准。
问 3:召回和重排分工是什么?
召回求快求全(别漏),重排求准(把最相关顶上来),两段配合。
口述全链路
"RAG 就是先切块、向量化,用户提问时检索相关段落,再让大模型照着答。"
"块别切太碎,用 BGE 类中文向量模型;检索上向量加 BM25 混合,再用 rerank 精排。"
"指代模糊就改写查询,问题太抽象就用 HyDE 假答案钓真文档。"
⑩ RAG vs 微调 vs 全塞上下文:怎么选
有了私有数据,到底是 RAG、微调还是整篇塞进去?一张表说清:
| 方案 | 适合 | 优点 | 缺点 |
| RAG | 知识频繁更新、要溯源、数据多 | 更新便宜、可引用出处 | 依赖检索质量 |
| 微调 | 要改语气/风格/固定技能 | 风格内化、无需每次塞资料 | 知识更新贵、不擅长记事实 |
| 全塞上下文 | 资料很短(几页内) | 最简单、信息最全 | 长了塞不下、费 token |
经验法则要"记住最新事实"用 RAG;要"改变说话风格"用微调;资料短就直接塞。两者常组合:RAG 供事实,微调定风格。
⑪ 向量数据库是干嘛的
切好块、算好向量后,要存起来并能快速按相似度找出来——这就是向量数据库的活:
| 方案 | 特点 | 适合 |
| FAISS | Meta 开源的向量检索库,库本身 | 自己写程序、离线试验 |
| Chroma | 轻量、上手快 | 原型、小项目 |
| Milvus / Qdrant | 生产级、可扩展 | 企业大规模知识库 |
别神化向量库本质是"给向量建了快速相似索引",核心还是召回那套逻辑,不是什么黑魔法。
⑫ 常见误区辨析
误区 1:Embedding 模型随便选一个就行不同模型向量空间不通用,查询和文档必须同模型;换模型必须全量重建索引。
误区 2:向量检索万能,不用关键词专有名词、编号、代码变量靠 BM25 更稳,纯向量会漏。生产建议 Hybrid。
误区 3:召回越多越好塞太多无关片段会稀释重点、浪费上下文,还可能带偏模型。重排后只留 top 3–5。
误区 4:RAG 就不会幻觉了检索到错的或片面的资料,模型照样会据此一本正经地错。要加"找不到就说不知道"的约束。
⑬ 分层练习(点开解析)
基础RAG 四个步骤依次是?
切块 → 向量化入库 → 按问题检索相关块 → 把块交给大模型生成答案。
基础为什么查询和文档要用同一个 Embedding 模型?
不同模型向量空间不同,混用后相似度不可比,检索会乱。
中档BM25 擅长找什么?
精确关键词:编号、专有名词、药名、代码变量——它数词频,不做语义模糊。
中档Recursive(递归)切分比固定大小好在哪?
优先在段落、句子等自然边界断开,避免把一句话或一个答案从中间切坏。
中档多轮 RAG 为什么要做 Query 改写?
用户常说"那它多少钱"这种指代句,得结合历史把"它"补全成完整问题再检索。
拔高HyDE 为什么能用"假答案"检索到真文档?
先让模型脑补一段假设答案,这段文字在语义空间里反而更接近真正相关的文档,再用它的向量去召回。
拔高RAG 和微调分别更适合解决什么?
RAG 适合"频繁更新的事实"和溯源;微调适合"固定的语气风格/技能"。常组合使用。
⑬ 三句记忆口诀
① 切块别切一半句,递归切分留重叠;查询文档同模型。
② 向量懂语义、BM25 抓名词,Hybrid 两路融合。
③ 先粗召回 20-50 条,再用 rerank 精排出 top 3-5。
| 问题 | 对策 |
| 指代不清 | 多轮 Query 改写 |
| 问题太抽象 | HyDE 假答案检索 |
| 要更新的事实 | 用 RAG 而非微调 |
📌 知识链路
本节位置
把通用大模型接到你的私有知识上,这是落地最常见的工程形态。