Skip to content
On this page

RAG技术与应用

目录

一、大模型应用开发模式

提示工程 vs RAG vs 微调

  • 提示工程:通过优化输入提示来引导模型输出
  • RAG:检索增强生成,结合外部知识库
  • 微调:在特定数据集上训练模型参数

选择依据

  1. 提示工程:通用任务,无需特定领域知识
  2. RAG:需要最新知识、特定领域知识、减少幻觉
  3. 微调:需要适应特定领域、风格或任务

二、RAG概述

什么是RAG

RAG(Retrieval-Augmented Generation):检索增强生成,结合信息检索和文本生成的技术。

核心流程

用户问题 → 检索器 → 相关文档 → LLM生成 → 回答

RAG的优势

  1. 解决知识时效性问题:可以检索最新外部知识
  2. 减少模型幻觉:引入外部知识减少虚假信息
  3. 提升专业领域回答质量:结合垂直领域知识库

三、RAG核心原理与流程

Step1:数据预处理

  1. 知识库构建:收集整理多源数据
  2. 文档分块:切分为适当大小的片段
  3. 向量化处理:使用嵌入模型转换为向量

Step2:检索阶段

  1. 查询处理:将问题转换为向量
  2. 相似度检索:在向量数据库中搜索
  3. 重排序:对检索结果进行相关性排序

Step3:生成阶段

  1. 上下文组装:组合检索结果和用户问题
  2. 生成回答:LLM基于增强上下文生成答案

四、Embedding模型选择

常见Embedding模型

类别模型特点适用场景
通用文本嵌入BGE-M3支持100+语言,8192 tokens跨语言长文档检索
中文嵌入xiaobu-embedding-v2针对中文语义优化中文文本分类、语义检索
指令驱动gte-Qwen2-7B-instruct支持代码与文本跨模态检索复杂指令驱动任务
企业级BGE-M3支持混合检索企业级语义检索

Embedding榜单

完整榜单见Hugging Face:https://huggingface.co/spaces/mteb/leaderboard

五、RAG实战案例

案例1:DeepSeek + Faiss本地知识库检索

技术栈

  • 向量数据库:Faiss
  • 嵌入模型:阿里云DashScope text-embedding-v1
  • LLM:deepseek-v3
  • 文档处理:PyPDF2

实现步骤

  1. 文档预处理:提取PDF文本并记录页码
  2. 文本分割:使用RecursiveCharacterTextSplitter
  3. 向量化:生成嵌入向量
  4. 构建索引:创建Faiss向量数据库
  5. 检索问答:相似度搜索 + LLM生成答案

案例2:迪士尼RAG助手

技术选型

  • 文档处理:PyMuPDF(PDF)、python-docx(Word)、pytesseract(OCR)
  • Embedding模型:text-embedding-v4(文本)、CLIP(图像)
  • 向量数据库:FAISS
  • LLM:Qwen-turbo

特色功能

  1. 多模态处理:支持文本、图片、表格
  2. 混合检索策略:文本+图像并行检索
  3. 关键词触发:检测"海报"、"图片"等触发图像检索

六、切片策略

5种常用切片策略

策略特点优点缺点适用场景
改进的固定长度切片优先句子边界,有重叠实现简单,处理快语义可能被切断技术文档、规范文件
语义切片按句子、段落切分语义保持好长度不均匀自然语言文本
LLM语义切片利用LLM智能切分语义理解强成本高,依赖GPU高质量要求场景
层次切片基于文档结构切分保持文档结构依赖文档格式结构化文档
滑动窗口切片固定窗口滑动重叠保持上下文连续性产生大量重叠长文档处理

策略对比

python
# 示例:改进的固定长度切片
text_splitter = RecursiveCharacterTextSplitter(
    separators=["\n\n", "\n", ":", ",", ""],
    chunk_size=1000,
    chunk_overlap=200,
    length_function=len,
)

七、RAG常见问题与优化

数据准备阶段问题

问题

  • 数据质量差:敏感、过时、矛盾信息
  • 多模态信息提取困难
  • PDF解析复杂

优化方案

  1. 构建完整的数据准备流程

    • 数据评估与分类
    • 数据清洗(去重、纠错、更新)
    • 敏感信息处理
    • 数据标记与标注
    • 建立数据治理框架
  2. 智能文档技术

    • 使用Apache POI、OCR、XML/PDF Parser
    • 多模态文档理解
    • 版面分析、信息抽取

知识检索阶段问题

问题

  • 内容缺失:检索不完整
  • 错过排名靠前文档:k值选择不当

优化方案

  1. 查询转换澄清用户意图

    • 意图识别
    • 查询扩展
    • 细化检索条件
  2. 混合检索和重排策略

    • 关键词检索 + 语义检索
    • 多路召回(向量召回、搜索召回)
    • 重排序提高准确性

答案生成阶段问题

问题

  • 未提取:上下文存在但未提取
  • 不完整:信息缺失
  • 格式错误:指令格式问题
  • 幻觉:生成虚假信息

优化方案

  1. 改进提示词模板

    text
    # 优化前
    根据以下上下文回答问题:如何申请信用卡?
    
    # 优化后
    根据以下上下文,提取与申请信用卡相关的具体步骤和所需材料:如何申请信用卡?
    
  2. 实施动态防护栏

    • 事实性校验规则
    • 参考文献验证机制
    • 格式验证和完整性检查

企业实践案例

  1. 阿里云:多粒度知识提取,按照标题级别拆分文档
  2. 哈啰出行:多路召回(向量召回+搜索召回)
  3. 中国移动:FORAG两阶段生成策略(先大纲后扩展)

总结

RAG的价值

即使LLM能够处理无限上下文,RAG仍有重要价值:

  1. 效率与成本:减少输入长度,降低计算消耗
  2. 知识更新:连接外部实时知识库
  3. 可解释性:检索过程透明,可追溯来源
  4. 定制化:针对特定领域优化检索系统
  5. 数据隐私:支持本地或私有数据源

技术文档集合