RAG基础
RAG(检索增强生成)通过结合外部知识库与LLM,有效解决大模型幻觉和知识过时问题。
共 3 篇文章·阅读时间:约25分钟
01什么是RAG
RAG通过检索外部知识来增强大语言模型的生成能力,是一种高效解决知识受限问题的方法。
RAG的定义
RAG(Retrieval-Augmented Generation,检索增强生成)是一种将信息检索系统与语言模型结合的技术框架。 当LLM需要回答问题时,先从外部知识库检索相关信息,再结合这些信息生成答案。
为什么需要RAG?
- 知识截止:LLM的知识有截止日期,无法获取最新信息
- 幻觉问题:LLM可能生成看似合理但错误的内容
- 知识盲区:LLM在特定垂直领域知识不足
- 可追溯性:RAG生成的答案可以追溯到具体来源
RAG工作流程
- 索引阶段:将文档切分为chunk,通过Embedding模型编码存入向量数据库
- 检索阶段:用户提问 → 编码为向量 → 从向量库检索Top-K相关chunk
- 生成阶段:将检索到的chunk作为上下文,结合用户问题发送给LLM生成答案
- 输出:返回带有引用来源的答案
RAG的核心价值
- 让LLM"知道"训练数据之外的知识
- 答案可以提供出处,增强可信度
- 知识库可随时更新,无需重新训练模型
- 成本远低于模型微调
02RAG vs 微调
RAG和微调是两种主流的LLM定制化方法,各有优劣,适用场景不同。
对比分析
| 维度 | RAG | 微调 (Fine-tuning) |
|---|---|---|
| 知识更新 | 实时更新知识库即可 | 需要重新训练 |
| 成本 | 较低(向量数据库+检索) | 较高(GPU+训练时间) |
| 可解释性 | 高(可追溯来源) | 低(隐含在权重中) |
| 适合场景 | 知识问答、事实性查询 | 风格迁移、任务定制 |
| 数据需求 | 文档形式的知识库 | 高质量问答对/指令数据 |
| 幻觉问题 | 可显著减少 | 可能减少但无法根治 |
选择指南
选择RAG的场景
需要最新知识、需要可追溯来源、频繁更新知识库、 知识以文档形式存在、数据量较大。
选择微调的场景
需要改变模型输出风格、需要特定任务模式、 交互格式固定、知识相对稳定。
两者结合
对于复杂场景,可以同时使用RAG和微调: RAG提供知识,微调优化交互风格和任务适配。
03RAG架构
RAG系统由多个核心组件构成,不同组件的组合形成不同的架构方案。
核心组件
- 文档加载器 (Document Loader):从多种来源(PDF、网页、数据库)加载文档
- 文本分割器 (Text Splitter):将长文档切分为适合的chunk
- 向量化模型 (Embedding Model):将文本编码为向量
- 向量数据库 (Vector Store):存储和检索向量
- 检索器 (Retriever):根据查询找到相关文档
- 生成器 (Generator):LLM根据上下文生成答案
架构变体
Naive RAG(基础RAG)
最简单的架构:检索Top-K chunk → 直接拼接到prompt → LLM生成。
优点:简单直接;缺点:检索质量直接影响效果。
Retrieve-Read-Retrieve(迭代RAG)
迭代检索:在生成过程中发现问题可以回头再检索。
适用于复杂问题,单次检索无法获取足够信息。
RAG + Post-processing(后处理RAG)
在检索后增加重排序、摘要、过滤等处理步骤, 提升检索结果的质量和多样性。
RAG + Fine-tuning(融合RAG)
结合微调技术,训练专门的检索器或生成器, 进一步提升系统在特定领域的性能。
架构选择建议
- 简单问答:从Naive RAG开始
- 复杂推理:考虑迭代RAG或后处理RAG
- 垂直领域:融合RAG可能效果更好