Appearance
RAG技术与应用
目录
一、大模型应用开发模式
提示工程 vs RAG vs 微调
- 提示工程:通过优化输入提示来引导模型输出
- RAG:检索增强生成,结合外部知识库
- 微调:在特定数据集上训练模型参数
选择依据
- 提示工程:通用任务,无需特定领域知识
- RAG:需要最新知识、特定领域知识、减少幻觉
- 微调:需要适应特定领域、风格或任务
二、RAG概述
什么是RAG
RAG(Retrieval-Augmented Generation):检索增强生成,结合信息检索和文本生成的技术。
核心流程:
用户问题 → 检索器 → 相关文档 → LLM生成 → 回答
RAG的优势
- 解决知识时效性问题:可以检索最新外部知识
- 减少模型幻觉:引入外部知识减少虚假信息
- 提升专业领域回答质量:结合垂直领域知识库
三、RAG核心原理与流程
Step1:数据预处理
- 知识库构建:收集整理多源数据
- 文档分块:切分为适当大小的片段
- 向量化处理:使用嵌入模型转换为向量
Step2:检索阶段
- 查询处理:将问题转换为向量
- 相似度检索:在向量数据库中搜索
- 重排序:对检索结果进行相关性排序
Step3:生成阶段
- 上下文组装:组合检索结果和用户问题
- 生成回答: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
实现步骤:
- 文档预处理:提取PDF文本并记录页码
- 文本分割:使用RecursiveCharacterTextSplitter
- 向量化:生成嵌入向量
- 构建索引:创建Faiss向量数据库
- 检索问答:相似度搜索 + LLM生成答案
案例2:迪士尼RAG助手
技术选型:
- 文档处理:PyMuPDF(PDF)、python-docx(Word)、pytesseract(OCR)
- Embedding模型:text-embedding-v4(文本)、CLIP(图像)
- 向量数据库:FAISS
- LLM:Qwen-turbo
特色功能:
- 多模态处理:支持文本、图片、表格
- 混合检索策略:文本+图像并行检索
- 关键词触发:检测"海报"、"图片"等触发图像检索
六、切片策略
5种常用切片策略
| 策略 | 特点 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|
| 改进的固定长度切片 | 优先句子边界,有重叠 | 实现简单,处理快 | 语义可能被切断 | 技术文档、规范文件 |
| 语义切片 | 按句子、段落切分 | 语义保持好 | 长度不均匀 | 自然语言文本 |
| LLM语义切片 | 利用LLM智能切分 | 语义理解强 | 成本高,依赖GPU | 高质量要求场景 |
| 层次切片 | 基于文档结构切分 | 保持文档结构 | 依赖文档格式 | 结构化文档 |
| 滑动窗口切片 | 固定窗口滑动重叠 | 保持上下文连续性 | 产生大量重叠 | 长文档处理 |
策略对比
python
# 示例:改进的固定长度切片
text_splitter = RecursiveCharacterTextSplitter(
separators=["\n\n", "\n", ":", ",", ""],
chunk_size=1000,
chunk_overlap=200,
length_function=len,
)
七、RAG常见问题与优化
数据准备阶段问题
问题:
- 数据质量差:敏感、过时、矛盾信息
- 多模态信息提取困难
- PDF解析复杂
优化方案:
构建完整的数据准备流程
- 数据评估与分类
- 数据清洗(去重、纠错、更新)
- 敏感信息处理
- 数据标记与标注
- 建立数据治理框架
智能文档技术
- 使用Apache POI、OCR、XML/PDF Parser
- 多模态文档理解
- 版面分析、信息抽取
知识检索阶段问题
问题:
- 内容缺失:检索不完整
- 错过排名靠前文档:k值选择不当
优化方案:
查询转换澄清用户意图
- 意图识别
- 查询扩展
- 细化检索条件
混合检索和重排策略
- 关键词检索 + 语义检索
- 多路召回(向量召回、搜索召回)
- 重排序提高准确性
答案生成阶段问题
问题:
- 未提取:上下文存在但未提取
- 不完整:信息缺失
- 格式错误:指令格式问题
- 幻觉:生成虚假信息
优化方案:
改进提示词模板
text# 优化前 根据以下上下文回答问题:如何申请信用卡? # 优化后 根据以下上下文,提取与申请信用卡相关的具体步骤和所需材料:如何申请信用卡?实施动态防护栏
- 事实性校验规则
- 参考文献验证机制
- 格式验证和完整性检查
企业实践案例
- 阿里云:多粒度知识提取,按照标题级别拆分文档
- 哈啰出行:多路召回(向量召回+搜索召回)
- 中国移动:FORAG两阶段生成策略(先大纲后扩展)
总结
RAG的价值
即使LLM能够处理无限上下文,RAG仍有重要价值:
- 效率与成本:减少输入长度,降低计算消耗
- 知识更新:连接外部实时知识库
- 可解释性:检索过程透明,可追溯来源
- 定制化:针对特定领域优化检索系统
- 数据隐私:支持本地或私有数据源