【RAG】001-RAG概述
0、整体思维导图
下面的知识是基于一个视频教程结合 AI 生成的笔记,我也看了一遍,有了一些印象,但这种印象很快就会消失,知识也就消失了,为了使得知识在我的大脑中停留更长的时间,我要主动增加学习的宽度(在更多场景下学习和记忆同一知识)!
一、RAG 介绍
1、LLM 的主要局限性
大语言模型(LLM)尽管功能强大,但仍存在以下明显的局限性:
- 时效性问题:模型的知识在预训练后就固定了,无法自动更新最新信息
- 知识覆盖局限 :
- 缺乏特定领域或私有领域的专业知识
- 对组织内部文档、数据等私域信息无法感知
- 幻觉问题:容易生成看似合理但实际错误的内容,影响可靠性
2、RAG 的价值与优势
检索增强生成(Retrieval-Augmented Generation,RAG)技术能够有效解决上述问题:
-
提升输出质量:
- 通过实时检索相关信息,显著提高生成内容的准确性
- 基于事实的回答,减少模型幻觉
-
降低实施成本:
- 无需大规模模型训练,显著降低计算资源消耗
- 相比微调方案,实施门槛更低,投入产出比更高
-
灵活性与可扩展性:
- 支持知识库持续更新,确保信息时效性
- 易于整合多源数据,快速扩充知识范围
- 可根据实际需求动态调整检索策略
二、RAG 概述
1、RAG 的概念
RAG(Retrieval-Augmented Generation,检索增强生成)是一种结合了检索和生成技术的文本处理方法 ,主要用于提高语言模型的输出质量。
RAG 通过在生成回答之前,先从知识库中检索相关信息,然后将检索到的信息作为上下文提供给语言模型,从而实现更准确、更可靠的响应。这种方法既保留了 LLM 强大的理解和生成能力,又克服了其知识局限性。
2、RAG 的工作原理
RAG 的核心工作流程包含以下步骤:
-
知识库构建:
- 收集和处理文档资料
- 将文档切分为适当大小的文本块
- 使用向量化模型将文本转换为向量并存储
-
检索过程:
- 接收用户查询并向量化
- 在向量数据库中搜索相似内容
- 获取最相关的文本片段
-
生成过程:
- 将检索到的相关内容与用户问题组合
- 构建合适的提示词(Prompt)
- 通过 LLM 生成最终答案
3、RAG 的应用场景
RAG 技术在多个领域都有广泛应用:
-
企业知识库问答:
- 客服智能问答
- 内部文档检索
- 技术支持服务
-
个性化内容生成:
- 产品推荐
- 个性化营销文案
- 定制化报告生成
-
实时信息服务:
- 新闻摘要生成
- 市场分析报告
- 数据洞察分析
4、实施注意事项
在实施 RAG 系统时,需要注意以下几点:
-
数据质量控制:
- 确保知识库数据的准确性和时效性
- 定期更新和维护知识库内容
- 建立数据质量审核机制
-
性能优化:
- 选择合适的向量数据库
- 优化检索策略和参数
- 合理设置缓存机制
-
系统监控:
- 跟踪系统响应时间
- 监控检索准确率
- 收集用户反馈并持续优化
三、RAG vs Fine-tuning(微调)
1、两种方法的基本概念
-
RAG:
- 通过实时检索相关信息来增强模型输出
- 无需对模型本身进行修改
- 知识库可以随时更新
-
Fine-tuning:
- 在预训练模型基础上进行额外训练
- 直接修改模型权重
- 知识被固化在模型参数中
2、对比分析
2.1 实施成本
-
RAG:
- 初始投入低,主要成本在知识库建设
- 无需大规模计算资源
- 部署维护相对简单
-
Fine-tuning:
- 需要较高的计算资源
- 需要专业的训练技能
- 对数据量和质量要求高
2.2 灵活性
-
RAG:
- 知识库可以随时更新
- 易于添加或移除信息
- 支持多源数据整合
-
Fine-tuning:
- 知识更新需要重新训练
- 模型一旦训练完成较难修改
- 数据变更成本高
2.3 性能表现
-
RAG:
- 输出更可控,有明确的信息来源
- 适合需要高准确度的场景
- 响应时间可能较长(需要检索)
-
Fine-tuning:
- 响应速度快
- 可能出现知识遗忘
- 难以追溯答案来源
3、选择建议
3.1 适合使用 RAG 的场景
- 需要频繁更新知识的应用
- 对答案准确性要求高的场景
- 预算有限但需求明确的项目
- 需要透明解释的业务场景
3.2 适合使用 Fine-tuning 的场景
- 任务明确且相对固定的应用
- 对响应速度要求高的场景
- 有充足的训练资源和专业团队
- 需要深度定制模型行为的项目
3.3 混合使用策略
在实际应用中,可以考虑将两种方法结合使用:
- 使用 Fine-tuning 优化模型的基础能力
- 使用 RAG 补充最新知识
- 根据具体场景动态选择或组合使用
四、RAG 工作流程
1、离线处理阶段
1.1 文档预处理
-
数据收集:
- 整理各类文档资源(PDF、Word、HTML等)
- 提取文本内容
- 清洗和标准化文本
-
文档分块:
- 按语义完整性分割文本
- 控制文本块大小(通常256-1024个token)
- 保持上下文连贯性
-
元数据提取:
- 记录文档来源
- 提取时间戳信息
- 标注文档类型和主题
1.2 向量化处理
-
文本嵌入:
- 选择合适的嵌入模型
- 将文本块转换为向量
- 优化向量维度和质量
-
向量存储:
- 选择向量数据库
- 建立索引结构
- 设置检索参数
2、实时处理阶段
2.1 查询处理
-
查询分析:
- 理解用户意图
- 提取关键信息
- 优化查询表达
-
查询向量化:
- 使用与文档相同的嵌入模型
- 生成查询向量
- 标准化处理
2.2 相似度检索
-
向量检索:
- 执行向量相似度计算
- 应用过滤条件
- 排序筛选结果
-
上下文组装:
- 获取相关文本片段
- 组织检索结果
- 控制上下文长度
2.3 生成响应
-
Prompt 构建:
- 设计提示模板
- 整合检索内容
- 添加约束条件
-
LLM 调用:
- 发送完整 Prompt
- 控制生成参数
- 处理模型输出
-
后处理优化:
- 格式化输出
- 添加引用来源
- 质量检查
3、性能优化策略
3.1 检索优化
-
索引优化:
- 选择合适的索引算法
- 定期重建索引
- 优化检索参数
-
缓存策略:
- 热点查询缓存
- 结果集缓存
- 智能预加载
3.2 质量提升
-
文本分块策略:
- 重叠分块
- 动态块大小
- 语义完整性保证
-
相关性优化:
- 多轮检索
- 结果重排序
- 相关度阈值控制
3.3 响应速度
-
并行处理:
- 批量向量化
- 并行检索
- 异步处理
-
资源调优:
- 硬件配置优化
- 负载均衡
- 服务扩缩容