RAG检索增强生成技术 - 场景与原理深度解析

1 阅读12分钟

一、RAG的本质思想

1.1 为什么需要RAG?

大语言模型的三大困境

知识截止日期

  • GPT-4的知识截止在2023年4月
  • 无法回答"今天的新闻是什么"
  • 业务场景:客服系统需要最新的产品信息

幻觉问题

  • LLM会"一本正经地胡说八道"
  • 编造不存在的论文、数据、人名
  • 业务场景:法律咨询、医疗诊断不能容忍错误

无法访问私有数据

  • LLM是用公开数据训练的
  • 企业内部文档、客户数据、专有知识不在训练集中
  • 业务场景:企业知识库问答、客户服务

RAG的核心思想

检索 + 生成的结合

用户问题 → 检索相关文档 → 将文档作为上下文 → LLM生成答案

深层价值

  • 知识外置化:知识存在数据库中,而非模型参数中
  • 实时更新:更新数据库即可,无需重训模型
  • 可追溯性:答案有明确的来源文档

生活类比

  • 传统LLM:闭卷考试,只能靠记忆
  • RAG:开卷考试,可以查阅资料

1.2 RAG vs 微调 vs Prompt Engineering

三种方案的业务场景对比

Prompt Engineering(提示工程)

  • 适用场景:通用任务,不需要专业知识
  • 优点:零成本,即时生效
  • 缺点:无法注入大量新知识
  • 示例:格式化输出、角色扮演

微调(Fine-tuning)

  • 适用场景:特定领域风格、行为模式
  • 优点:改变模型行为,回答风格
  • 缺点:成本高,知识更新需要重新训练
  • 示例:客服语气、医学术语理解

RAG

  • 适用场景:需要最新知识、私有数据
  • 优点:成本低,实时更新
  • 缺点:受检索质量影响
  • 示例:企业知识库问答、新闻分析

混合策略

  • 微调:让模型理解行业术语和风格
  • RAG:注入最新知识和私有数据
  • Prompt Engineering:控制输出格式

二、RAG的核心架构

2.1 文档处理流程的深层挑战

文档切分的粒度权衡

场景:一份100页的产品手册

切分策略的影响

按段落切分(200字/块)

  • 优点:语义完整性好
  • 缺点:可能遗漏跨段落的信息
  • 场景:FAQ、技术文档

按固定长度切分(512 token/块)

  • 优点:符合模型输入限制
  • 缺点:可能截断句子,破坏语义
  • 场景:长文档快速检索

按语义切分(主题段落)

  • 优点:保持主题完整性
  • 缺点:实现复杂,效果依赖算法
  • 场景:学术论文、技术规范

业务场景的最佳实践

  • 法律合同:按条款切分
  • 技术文档:按章节切分
  • 客服FAQ:按问题切分
  • 新闻文章:按段落切分

重叠窗口(Overlap)的必要性

为什么需要重叠?

  • 避免关键信息被切断
  • 例如:"这个功能的优点是...(被截断)...提升性能"

重叠策略

  • 重叠20%:512 token的块,重叠100 token
  • 前后文保持连续性

业务代价

  • 存储空间增加20%
  • 检索时可能返回重复内容

2.2 向量化与语义理解

为什么需要向量化?

传统关键词搜索的局限

  • 用户问:"如何提升销售额?"
  • 文档中:"增加收入的方法"
  • 关键词搜索:匹配不到(词汇不同)

向量化的语义理解

  • "提升销售额"和"增加收入"的向量接近
  • 能找到语义相似的文档

Embedding模型的选择

  • OpenAI text-embedding-ada-002:多语言,通用性好
  • BGE(中文):中文效果更好
  • M3E:中英双语,开源

业务场景的权衡

  • 成本:OpenAI按token收费,开源模型自部署
  • 效果:通用模型 vs 领域模型
  • 延迟:API调用 vs 本地部署

2.3 向量数据库的架构选型

为什么不用传统数据库?

向量检索的特殊性

  • 不是精确匹配,而是相似度搜索
  • 需要计算余弦相似度、欧氏距离
  • 百万级向量的相似度搜索,传统数据库慢

向量数据库的优化

  • 近似最近邻搜索(ANN)
  • HNSW、IVF等索引算法
  • 毫秒级检索百万向量

业务场景的选择

Faiss(Facebook)

  • 优点:速度快,支持GPU加速
  • 缺点:不支持分布式,数据存内存
  • 场景:中小规模(<1000万向量)

Milvus

  • 优点:分布式,支持十亿级
  • 缺点:运维复杂
  • 场景:大规模企业应用

Pinecone

  • 优点:云服务,无需运维
  • 缺点:成本高,数据在外部
  • 场景:快速POC,小团队

Elasticsearch(8.0+)

  • 优点:已有ES基础设施可复用
  • 缺点:向量检索不是核心功能
  • 场景:混合搜索(关键词 + 向量)

三、检索质量的深层优化

3.1 语义检索 vs 关键词检索

混合检索的必要性

场景:用户问"iPhone 15 Pro的价格"

纯语义检索的问题

  • 可能返回"iPhone 14 Pro的价格"(语义相似)
  • 但用户要的是具体型号

纯关键词检索的问题

  • 用户问"最新款苹果手机多少钱"
  • 关键词搜索:"最新款"、"苹果手机"、"多少钱"
  • 匹配不到"iPhone 15 Pro价格"

混合检索策略

最终得分 = 0.7 × 语义相似度 + 0.3 × BM25得分

业务场景的权重调整

  • 技术文档:语义70%,关键词30%(概念理解重要)
  • 产品搜索:语义50%,关键词50%(型号精确匹配重要)
  • 法律条文:语义30%,关键词70%(术语精确匹配重要)

3.2 重排序(Rerank)的价值

为什么需要二次排序?

向量检索的局限

  • Embedding模型将文本压缩为固定长度向量
  • 信息有损失,排序不够精确

Rerank模型的优势

  • 直接计算问题和文档的匹配度
  • 考虑更多细节信息
  • 但计算慢,不能用于初筛

两阶段检索架构

  1. 召回(Recall):向量检索,从10万文档中召回100个
  2. 精排(Rerank):Rerank模型,从100个中选出最相关的10个

业务场景的代价分析

  • 初筛:向量检索,10万文档,耗时50ms
  • 精排:Rerank模型,100文档,耗时200ms
  • 总耗时:250ms,但准确率提升20%

3.3 查询理解与改写

用户问题的模糊性

场景示例

  • 用户问:"它支持5G吗?"
  • 问题:不知道"它"是什么

查询改写策略

1. 指代消解

  • 历史对话:"iPhone 15 Pro怎么样?"
  • 当前问题:"它支持5G吗?"
  • 改写后:"iPhone 15 Pro支持5G吗?"

2. 查询扩展

  • 原问题:"RAG技术"
  • 扩展后:"RAG技术"、"检索增强生成"、"Retrieval-Augmented Generation"
  • 提高召回率

3. 多查询生成

  • 原问题:"如何提升模型效果?"
  • 生成多个子问题:
    • "如何提升模型准确率?"
    • "如何优化模型性能?"
    • "模型调优方法有哪些?"
  • 并行检索,合并结果

业务场景的成本权衡

  • 简单问答:不需要改写
  • 多轮对话:需要指代消解
  • 复杂查询:需要查询扩展

四、生成质量的控制

4.1 Prompt工程的深度应用

上下文构建的艺术

场景:检索到3篇相关文档

简单拼接的问题

文档1:xxx
文档2:xxx
文档3:xxx
问题:xxx
  • 模型不知道哪些信息重要
  • 可能被无关信息干扰

结构化Prompt

你是一个专业的客服助手。
请根据以下参考文档回答用户问题。

【重要】如果文档中没有相关信息,请明确告知用户,不要编造。

参考文档:
[文档1 - 来源:产品手册第3页]
内容:xxx

[文档2 - 来源:FAQ第12条]
内容:xxx

用户问题:xxx

回答要求:
1. 引用具体文档来源
2. 如果多个文档有冲突,说明差异
3. 语气友好专业

业务场景的定制

  • 客服:强调友好、耐心
  • 技术支持:强调准确、详细
  • 法律咨询:强调严谨、引用条文

4.2 幻觉检测与控制

为什么RAG仍会产生幻觉?

场景

  • 文档中:"iPhone 15 Pro有三个摄像头"
  • 用户问:"iPhone 15 Pro有几个摄像头?"
  • LLM回答:"iPhone 15 Pro有四个摄像头"(幻觉)

深层原因

  • LLM的预训练知识与检索文档冲突
  • LLM倾向于"创造性"补充信息
  • 上下文太长,LLM忽略部分内容

幻觉控制策略

1. 强制引用

要求:回答必须引用文档原文,用引号标注
例如:根据文档,"iPhone 15 Pro配备三个摄像头"

2. 置信度标注

要求:对回答的每个事实标注置信度
例如:iPhone 15 Pro有三个摄像头(置信度:高,来源:官方文档)

3. 事实核查

  • 用另一个LLM检查答案与文档的一致性
  • 如果不一致,拒绝回答

业务场景的权衡

  • 创意类(营销文案):允许适度发挥
  • 事实类(技术支持):严格限制幻觉
  • 关键领域(医疗、法律):必须引用原文

4.3 答案的可解释性

为什么需要引用来源?

业务价值

  • 用户可以验证信息真实性
  • 便于用户深入阅读原文
  • 提升信任度

引用格式的设计

回答:iPhone 15 Pro配备三个摄像头...

来源:
[1] 产品手册 - 第3页 - "技术规格:后置三摄系统"
[2] 官方发布会 - 20239月 - "全新的Pro级摄像系统"

深层挑战

  • 如何提取引用片段?
  • 如何定位文档位置(页码、章节)?
  • 如何处理多文档冲突的引用?

五、高级RAG技术

5.1 自适应检索(Self-RAG)

为什么不是每个问题都需要检索?

场景分析

  • "1+1等于几?":常识问题,不需要检索
  • "今天北京天气如何?":需要实时数据,必须检索
  • "什么是RAG?":LLM已知,但检索可提供更多细节

自适应策略

  1. LLM判断是否需要检索
  2. 如果需要,执行RAG
  3. 如果不需要,直接生成答案

业务价值

  • 减少不必要的检索,降低延迟
  • 节省向量数据库查询成本

5.2 多跳推理(Multi-Hop)

复杂问题的分解

场景

  • 用户问:"iPhone 15 Pro相比上一代提升了多少性能?"
  • 需要两步:
    1. 查iPhone 15 Pro的性能
    2. 查iPhone 14 Pro的性能
    3. 对比

Chain-of-Thought RAG

问题分解:
1. iPhone 15 Pro的性能是多少?
   → 检索 → A15芯片,性能xxx
2. iPhone 14 Pro的性能是多少?
   → 检索 → A14芯片,性能yyy
3. 对比:提升了(xxx - yyy) / yyy

业务场景

  • 技术对比:产品A vs 产品B
  • 因果推理:政策A导致了什么影响?
  • 时间序列:某指标的历史变化趋势

5.3 Graph RAG(图检索)

为什么需要知识图谱?

场景

  • 用户问:"张三的老板是谁?"
  • 向量检索:可能找不到"张三的老板"这句话
  • 知识图谱:张三 → 隶属于 → 部门A → 负责人 → 李四

Graph RAG的架构

  1. 从文档中抽取实体和关系
  2. 构建知识图谱
  3. 用户问题 → 实体识别 → 图查询 → 找到路径
  4. 将路径作为上下文,生成答案

业务场景

  • 企业组织架构查询
  • 产品关系网络(配件、兼容性)
  • 学术论文引用关系

六、实战场景的深度设计

6.1 企业知识库问答系统

业务挑战

多文档类型

  • Word文档、PDF、Excel表格
  • 不同格式的解析质量差异

权限控制

  • 不同员工能访问不同文档
  • RAG检索时需要过滤

知识时效性

  • 政策文档会过期
  • 需要标注文档的有效期

架构设计

文档上传 → 格式解析 → 切分 → 向量化 → 存储(附带元数据)
         ↓
      元数据:部门、权限、有效期、版本

用户提问 → 检索(过滤权限) → Rerank → 生成答案 → 引用来源

6.2 智能客服系统

多轮对话的状态管理

场景

  • 用户:"我要买手机"
  • 客服:"您想要什么价位的?"
  • 用户:"3000左右"
  • 客服:"推荐iPhone 15"
  • 用户:"它支持5G吗?"(指代:iPhone 15)

对话状态管理

  • 维护对话历史
  • 提取关键实体(当前关注的商品)
  • 查询改写时加入上下文

业务价值

  • 用户体验:流畅的多轮对话
  • 转化率:精准推荐

6.3 代码助手(Code RAG)

代码检索的特殊性

挑战

  • 代码结构化:函数、类、注释
  • 语义理解:变量名、函数名的语义

检索策略

  • 向量检索:找语义相似的代码
  • 符号检索:找特定函数、类
  • 混合检索:结合两者

业务场景

  • 代码补全:根据上下文推荐代码
  • 代码解释:查找相关文档和示例
  • Bug修复:找到相似的修复案例

七、性能优化与成本控制

7.1 缓存策略

为什么需要缓存?

场景

  • 100个用户问"iPhone 15 Pro的价格"
  • 每次都检索 + 生成,成本高

缓存层次

  1. 问题缓存:相同问题直接返回
  2. 检索缓存:相同检索结果复用
  3. 向量缓存:相同文档的向量复用

业务价值

  • 降低LLM调用成本
  • 提升响应速度

7.2 成本优化策略

LLM调用成本分析

场景

  • 检索到10个文档,每个1000 token
  • 总上下文:10000 token
  • GPT-4成本:10000 token × 0.03/1k=0.03/1k = 0.3/次

优化方案

  1. 文档摘要:将1000 token压缩到200 token
  2. 只传标题:初筛用标题,精选后传全文
  3. 使用更便宜的模型:Claude、Llama

业务场景的权衡

  • 高频低价值:用便宜模型(如Claude Instant)
  • 低频高价值:用强模型(如GPT-4)

思考题

  1. 在什么场景下,RAG不如微调?
  2. 如何平衡检索数量(Top-K)与生成质量?K越大越好吗?
  3. 如果让你设计一个法律咨询的RAG系统,你会特别注意哪些问题?