在RAG(检索增强生成)产品中,模型选型和微调方向直接影响系统的性能和用户体验。以下是分阶段的选型策略和微调方案,兼顾效果与成本:
一、模型选型:核心组件与推荐方案
RAG系统由 检索模型 和 生成模型 两部分组成,需分别选型:
1. 检索模型(Retriever)
模型类型 | 推荐选项 | 适用场景 | 优势 |
---|---|---|---|
稠密检索 | - OpenAI text-embedding-3-large |
通用语义搜索 | 高准确率,适合复杂查询 |
- BGE (bge-large-zh-v1.5 ) |
中文场景 | 开源可微调,支持多语言 | |
- E5 (intfloat/e5-large-v2 ) |
多语言混合数据 | 对长文本优化 | |
稀疏检索 | - BM25 (Elasticsearch/Lucene) | 关键词匹配、结构化数据 | 低延迟,无需训练 |
混合检索 | BM25 + 稠密检索加权融合 | 兼顾精确性与召回率 | 平衡语义与字面匹配 |
重排序模型 | - BGE Reranker (bge-reranker-large ) |
提升Top-K结果相关性 | 对初检结果二次精排 |
2. 生成模型(Generator)
模型类型 | 推荐选项 | 适用场景 | 优势 |
---|---|---|---|
通用大模型 | - GPT-4-turbo (API) | 高预算、高准确性需求 | 强推理能力,支持复杂指令 |
- Claude 3 (Anthropic) | 长文本生成 | 200K上下文窗口 | |
开源模型 | - LLaMA-3-70B (Meta) | 私有化部署 | 可商用,支持微调 |
- Mixtral 8x7B (MoE) | 高性价比多任务 | 激活参数少,推理成本低 | |
领域专用模型 | - Med-PaLM 2 (医疗) | 垂直领域(医疗/法律) | 预训练领域知识 |
轻量化模型 | - Phi-3-mini (4K上下文) | 移动端/边缘设备 | 低延迟,小体积 |
二、微调方向:针对RAG的优化策略
1. 检索模型微调
(1) 领域适配微调
- 目标:提升垂直领域(如医疗、金融)的语义理解。
- 方法:
- 数据:构建领域相关的 (query, positive_doc, negative_doc) 三元组。
- 损失函数:对比学习(Contrastive Loss)或三元组损失(Triplet Loss)。
- 工具:
from sentence_transformers import SentenceTransformer, losses model = SentenceTransformer("bge-base-zh") train_loss = losses.MultipleNegativesRankingLoss(model) model.fit(train_data, loss=train_loss, epochs=3)
(2) 查询扩展微调
- 目标:让模型学会生成更丰富的搜索查询。
- 方法:
- 用LLM生成查询的变体(同义词、扩展描述),训练检索模型理解等价查询。
2. 生成模型微调
(1) 基于检索内容的约束生成
- 目标:减少幻觉,强制模型依赖检索结果。
- 方法:
- 数据构造:输入格式为
[检索文档] + [问题] → 答案
,标注是否严格引用文档。 - 微调技巧:
- 在答案前添加标记(如
[据文档]...
)。 - 对“无答案”情况设置特殊标签(如
[未找到]
)。
- 在答案前添加标记(如
- 数据构造:输入格式为
(2) 领域风格适配
- 目标:生成内容符合领域规范(如法律条文、医疗报告)。
- 方法:
- 使用领域文本(如论文、专利)继续预训练(Continue Pretraining)。
- 示例代码(LoRA微调):
from peft import LoraConfig, get_peft_model config = LoraConfig(task_type="CAUSAL_LM", r=8, target_modules