02.什么是RAG讲一下原理和流程
文章目录
问题: 什么是RAG,讲一下原理和流程
👇 点击展开/折叠 面试背诵模板(建议先背这个)
一、RAG产生的背景与核心价值
大语言模型存在三个固有限制:① 知识截止于训练数据时间点,无法回答最新问题;② 训练数据不含企业私有文档或专业领域知识;③ 容易产生事实性幻觉(hallucination)。RAG通过实时检索外部知识库注入相关上下文,让模型基于检索到的事实而非仅凭参数化记忆生成答案,从而提升准确性、可控性和可解释性。
二、核心运作流程(两阶段详解)
阶段一:离线索引(数据准备)
- 文档加载与解析:从多种数据源(PDF、Word、网页、数据库)读取原始文档。
- 文本分块(Chunking):将长文档切分为语义完整的短文本块(通常256-512 tokens),便于精准检索。
- 向量化嵌入:使用嵌入模型(如OpenAI text-embedding-3-small、BGE等)将文本块转换为高维向量。
- 存储索引:将向量及对应的原始文本存入向量数据库(如Milvus、Pinecone、Chroma等),并构建索引加速相似度搜索。
阶段二:在线查询(检索与生成)
- 问题向量化:将用户输入的问题用与索引阶段相同的嵌入模型转换为向量。
- 相似性检索:在向量数据库中进行ANN(近似最近邻)搜索,返回与问题语义最相似的Top-k个文本块。
- 上下文注入:将检索到的文本块作为上下文,与用户问题一起组合成结构化提示词。
- LLM生成:将增强后的提示词输入大语言模型,生成基于检索事实的最终答案。
三、技术选型要点
| 组件 | 常见选择 | 考量因素 |
|---|---|---|
| 嵌入模型 | OpenAI text-embedding-ada-002、BGE、M3E | 语言支持、维度大小、推理成本 |
| 向量数据库 | Milvus、Pinecone、Weaviate、Chroma | 云原生/本地部署、规模、查询延迟 |
| 分块策略 | 固定长度、语义分割、段落边界 | 过长影响检索精度,过短丢失上下文 |
| 检索策略 | 稠密检索(向量)、稀疏检索(BM25)、混合检索 | 精度与召回率的权衡 |
四、RAG vs 微调(Fine-tuning)的对比
| 维度 | RAG | 微调 |
|---|---|---|
| 知识更新 | 实时(更新向量库即可) | 需重新训练,周期长 |
| 可解释性 | 高(可溯源到具体文档片段) | 低(知识隐含在模型参数中) |
| 成本 | 中(需向量数据库 + LLM调用) | 高(需标注数据 + GPU训练资源) |
| 适用场景 | 动态知识库、开放域问答 | 固定风格、特定领域能力固化 |
五、RAG的进阶变体
- Self-RAG:模型主动决定是否检索,以及检索后自我反思校准答案质量。
- Graph-RAG:利用知识图谱构建实体关系,实现多跳推理和更复杂的上下文关联。
- 多模态RAG:检索图像、视频、音频等多种模态数据,支持更丰富的问答场景。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 LGQ的博客!