一、RAG 的本质:开卷考试
核心痛点:LLM(大语言模型)的知识是静态的,像一个"已毕业的学生",不知道最新的新闻,也不了解企业内部的私有数据。
解决方案:RAG = LLM + 搜索引擎/数据库。
类比一下:
- 纯 LLM:闭卷考试,全靠脑子里的死记硬背(参数记忆)。
- RAG:开卷考试,允许翻阅参考书(外部知识库)来回答问题。
二、RAG 的标准流程(Naive RAG)
RAG 的朴素实现可以拆成三个阶段:
1. 索引(Indexing)
- 把文档切分成小块(Chunking)。
- 把文字变成向量(Embedding),存入向量数据库。
2. 检索(Retrieval)
- 用户提问 → 变成向量。
- 在数据库中找"距离最近"的文档块(Top-K)。
3. 生成(Generation)
- Prompt 组装:用户问题 + 检索到的上下文 + 指令。
- 喂给 LLM 生成最终答案。
三、进阶:如何搜得更准?(Advanced RAG)
检索前的优化
- 查询重写(Query Rewriting):用户的提问往往是不完整的。
- 例子:用户问"它怎么收费?",RAG 需要将其改写为"OpenAI 的 API 怎么收费?"。
- 假设性文档嵌入(HyDE):
- 让 LLM 先生成一个"假答案"。
- 用这个假答案去数据库搜,通常比直接搜问题更准。
检索后的优化
- 重排序(Rerank):
- 向量检索(Cosine Similarity)只能看大概相似度,不够精细。
- Rerank 模型:像老师批改作业一样,仔细给检索回来的 Top-50 个结果打分,挑出真正最相关的 Top-5。
四、模块化 RAG(Modular RAG)
思路:不再是线性的"检索-生成",而是模块化组合。
常见模块:
- Memory 模块:记住之前的对话上下文。
- Routing(路由):判断这个问题需不需要查库?查哪个库?
- Self-Refine(自省):LLM 生成答案后,自己检查一遍"我答对了吗?",如果不对继续查。
五、RAG vs Fine-tuning(微调)
| 维度 | RAG(外挂大脑) | Fine-tuning(脑科手术) |
|---|---|---|
| 知识更新 | 极快(直接存入文档即可) | 慢(需要重新训练) |
| 数据隐私 | 高(数据在本地数据库) | 低(数据进入模型参数) |
| 幻觉问题 | 较少(基于事实回答) | 仍可能存在 |
| 适用场景 | 查阅文档、客服、私有知识库 | 学习特定的说话风格、行业术语 |
六、核心公式与逻辑
生成概率:
- x:用户输入
- y:生成的回答
- z:检索到的文档片段
解释:回答 y 的概率,取决于检索到的文档 z 有多靠谱,以及有了 z 之后生成 y 有多顺畅。
- 本文链接: https://diyuyizhu.github.io/posts/rag-introduction/
- 版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 许可协议。
