代码语言

知识点思维导图

33 个知识节点

RAG(12) - RAG 是什么

读完后,你应能完成以下任务:

  • 绘制“RAG(16) - RAG 是什么 / 与进阶篇的分工”的关键对象与数据流,解释“进阶 RAG 主线从 58 开始,”,并用源码位置、日志或 Trace 标注证据。
  • 为“RAG(16) - RAG 是什么 / RAG 的本质:先检索,再生成”设计正常与异常输入,验证“区别就一处:模型回答前,多了一步「带着问题去资料库捞证据」。”,输出首个偏差位置与回归测试结果。
  • 实现“RAG(16) - RAG 是什么 / 为什么不直接微调模型”的最小代码或配置,检验“知识经常变、需要给用户看依据、又不想烧训练成本——这三个条件凑齐,就是 RAG 的主场。”,输出命令、结果与 Diff,并说明不适用边界。

一句话目标:读完你能讲清 RAG 解决什么问题、它和「裸模型直接问」差在哪,并跑通一个能拒答的最小 RAG。

一、与进阶篇的分工

本篇保留为 RAG 入门总览:目标是先讲清“先检索、再生成、证据不足拒答”。 进阶 RAG 主线从 58 开始, 继续展开向量化检索、loader/splitter、Milvus、混合检索、GraphRAG、LangSmith 和企业级多模态 RAG。

二、RAG 是什么的真实应用场景

你给公司做了个客服助手,接的是通用大模型。 用户问「你们标准版套餐多少钱」,模型张口就答「大概一个月几十块吧」。 问题是:模型根本不知道你们的定价,它在编。

模型的知识来自训练数据,里面没有你公司的价格表、制度文档、最新公告。 这些私有的、会变的知识,它一概不知。 但它又「不会承认不知道」,于是编一个看起来合理的答案——这就是幻觉。

RAG 就是来解决这件事的。 它的思路特别朴素:回答之前, 先去你的资料库里查一查, 把查到的资料一起交给模型, 让它基于资料回答。 查不到,就老实说不知道。

三、RAG 的本质:先检索,再生成

RAG 全称 Retrieval-Augmented Generation,检索增强生成。 拆开看就是两步:

裸模型:   问题 ──────────────────→ 模型 → 凭记忆答(可能编)

RAG:      问题 → 检索资料库 → 相关资料 ┐
                                      ├→ 模型 → 基于资料答(有据)
           问题 ───────────────────────┘

区别就一处:模型回答前,多了一步「带着问题去资料库捞证据」。 捞到了,证据和问题一起喂给模型; 没捞到,直接拒答,不让模型硬编。

很多人以为 RAG 是「把所有文档都塞给模型」。 不是。 文档可能有几万字,模型上下文塞不下,塞进去也会被无关内容淹没。 RAG 的关键恰恰是只检索出最相关的几段给模型,又准又省。

四、为什么不直接微调模型

「让模型记住公司知识」还有另一条路:微调。 但大多数场景 RAG 更合适,原因有三:

对比 RAG 微调
知识更新 改资料库即可,实时生效 要重新训练,慢且贵
可追溯 能给出答案来自哪份文档 答案从权重里来,说不清依据
成本 低,不动模型 高,要算力和数据

知识经常变、需要给用户看依据、又不想烧训练成本——这三个条件凑齐,就是 RAG 的主场。 企业知识库几乎全中。

五、离线入库与在线问答是两条链路

RAG 系统在两个时刻干两件事,别混在一起:

离线入库(资料变动时做一次):
  文档 → 切分成 chunk → 转成向量 → 存进向量库(带来源元数据)

在线问答(用户每次提问):
  问题 → 转成向量 → 检索 topK 相关 chunk → 拼进 prompt → 模型基于资料答 → 附引用来源

上面这条链路里的每一步, 正是后面几篇要逐个拆开讲的:切分(21)、向量化(22)、向量库(23)、检索重排(24)、回答与引用(25)、评测调优(26)。 这一篇先建立整体认知。

六、工程上真正会踩的坑(本篇独有)

  • 以为 RAG 就是把文档塞进 prompt。文档动辄上万字,塞不下也塞不准。RAG 的价值在「只检索出最相关那几段」,检索质量才是上限。
  • 检索为空还硬答。这是 RAG 最危险的坑:没检索到资料,模型会拿手头任何东西编一个。必须 if not hits: 拒答,这是硬性兜底,不是可选项。
  • 拿 RAG 当成万能答疑。RAG 只擅长「答案明确写在某份资料里」的问题。需要跨多份文档推理、计算、做判断的,光靠检索不够,那是 Agent 的活(27 篇起)。

七、一句话面试答法

RAG 是什么,为什么用它? RAG 是检索增强生成:模型回答前先从知识库检索相关资料,基于资料作答,检索不到就拒答。它解决大模型不知道企业私有知识、知识更新慢、答案无法溯源三个问题。相比微调,RAG 改资料就能更新知识、能给出引用来源、还不用烧训练成本,所以企业知识库基本都走 RAG。

八、动手实践:20 RAG 是什么

用最小代码把 RAG 全流程跑一遍, 并和「裸模型」做对照:同一个问题, 裸模型凭记忆编, RAG 先检索资料再基于资料回答, 没资料就拒答。

8.1 在线运行

直接使用本文“可运行源码”中的沙盒执行; 源码、复制内容和实际运行入口保持一致。

零依赖,纯标准库。

8.2 预期输出

问题:标准版套餐多少钱?
  [裸模型] 我们的套餐大概一个月几十块吧,具体记不太清,应该都支持随时退款。
  [RAG ] 我们的标准版套餐每月 99 元,包含 5 个席位。(依据:product-faq.md)
         引用:product-faq.md -> 我们的标准版套餐每月 99 元,包含 5 个席位。
------------------------------------------------------------
问题:几天内可以退款?
  [裸模型] 我们的套餐大概一个月几十块吧,具体记不太清,应该都支持随时退款。
  [RAG ] 购买后 7 天内未使用可全额退款,超过 7 天不支持退款。(依据:refund-policy.md)
         引用:refund-policy.md -> 购买后 7 天内未使用可全额退款,超过 7 天不支持退款。
------------------------------------------------------------
问题:你们在北京有办公室吗?
  [裸模型] 我们的套餐大概一个月几十块吧,具体记不太清,应该都支持随时退款。
  [RAG ] 知识库里没有找到相关资料,这个问题我无法回答。
------------------------------------------------------------

对照着看三件事:裸模型每次都答同样一段编的话; RAG 命中资料时基于资料回答并给出来源; 知识库没有相关资料时 RAG 直接拒答。

8.3 代码↔概念对应

概念 在 main.py 哪里
知识库(已入库的资料 + 来源元数据) KNOWLEDGE
检索打分(模拟向量相似度) score
topK 检索,只留命中的 retrieve
裸模型回答(无依据,会编) answer_without_rag
RAG 回答(基于资料 + 引用来源) answer_with_rag
检索为空时拒答 answer_with_ragif not hits

8.4 说明

真实项目里 score 会换成 embedding 余弦相似度(OpenAI / bge 等), KNOWLEDGE 会换成向量数据库。 这个 demo 用关键词重叠打分只为讲清流程,不代表生产检索质量。

8.5 可运行源码:RAG 是什么

下方代码就是在线沙盒实际执行的完整源码。

main.py

九、总结

  • RAG 的本质:先检索,再生成:区别就一处:模型回答前,多了一步「带着问题去资料库捞证据」。
  • 为什么不直接微调模型:知识经常变、需要给用户看依据、又不想烧训练成本——这三个条件凑齐,就是 RAG 的主场。
  • 离线入库与在线问答是两条链路:正是后面几篇要逐个拆开讲的:切分(21)、向量化(22)、向量库(23)、检索重排(24)、回答与引用(25)、评测调优(26)。
  • 工程上真正会踩的坑(本篇独有):以为 RAG 就是把文档塞进 prompt。
  • 一句话面试答法:RAG 是检索增强生成:模型回答前先从知识库检索相关资料,基于资料作答,检索不到就拒答。

学完自测

选择所有正确答案;提交后逐项核对判断依据。

1在“RAG 是什么”中,需要同时满足“与进阶篇的分工”与“RAG 是什么的真实应用场景”。给定正文约束“继续展开向量化检索、loader/splitter、Milvus、混合检索、GraphRAG、LangSmith 和企业级多模态 RAG。”,哪些判断保持了原有处理机制?多选
2“RAG 是什么”出现偏差:“在“RAG 是什么 / RAG 的本质:先检索,再生成”中,即使不满足“RAG 全称 Retrieval-Augmented Generation,检索增强生成”,结果与副作用仍会保持不变。”已成为实际行为。围绕“RAG 的本质:先检索,再生成”与“为什么不直接微调模型”,哪些判断能定位被改变的职责或边界?多选
3评审“RAG 是什么”方案时,验收条件包含“切分(21)、向量化(22)、向量库(23)、检索重排(24)、回答与引用(25)、评测调优(26)。”。关于“离线入库与在线问答是两条链路”与“一句话面试答法”的哪些决策符合正文机制?多选