1. 项目概述:RAG与微调双引擎架构的价值
去年我们团队接手了一个金融行业的智能问答系统项目,客户要求系统不仅能准确回答专业问题,还要能理解行业术语和业务场景。经过多次技术选型讨论,我们最终采用了RAG(检索增强生成)结合大模型微调的双引擎架构,这在当时算是一个相对大胆的尝试。现在回头看,这套方案成功将问答准确率从初期的68%提升到了92%,今天我就来分享这个架构的设计思路和落地经验。
RAG和微调本质上解决的是不同维度的问题:RAG像是一个实时更新的外接知识库,让模型能获取最新信息;微调则是让模型"学会"特定领域的思维方式和表达习惯。在金融、医疗、法律等专业领域,两者结合往往能产生1+1>2的效果。举个例子,当用户询问"LPR下调对房贷的影响"时,RAG负责提供最新的央行政策文件,微调过的模型则能用投资顾问的口吻进行专业解读。
2. 技术架构设计解析
2.1 整体架构设计
我们的系统采用分层设计:
- 接入层:处理用户请求的路由和负载均衡
- 决策层:通过意图识别模块判断使用RAG还是微调路径
- 执行层:包含RAG管道和微调模型两个并行引擎
- 融合层:对双引擎结果进行加权融合
graph TD A[用户提问] --> B(意图识别) B -->|事实查询| C[RAG引擎] B -->|专业咨询| D[微调模型] C & D --> E[结果融合] E --> F[响应输出]2.2 RAG子系统实现
RAG部分我们选择了以下技术栈:
- 向量数据库:Milvus(支持GPU加速)
- 嵌入模型:bge-large-zh-v1.5
- 检索策略:Hybrid Search(稠密+稀疏检索)
关键优化点:
- 文档预处理时加入领域实体识别,对专业术语做特殊标记
- 采用动态分块策略,法律条款保持完整段落,新闻资讯则按语义分块
- 实现查询扩展机制,自动补充行业同义词
# 典型检索代码示例 def hybrid_search(query): # 查询扩展 expanded_terms = query_expander.expand(query) # 稀疏检索(BM25) sparse_results = bm25_retriever.retrieve(expanded_terms) # 稠密检索 dense_embedding = embed_model.encode(query) dense_results = milvus.search(dense_embedding) # 结果融合 return fusion_algorithm.merge(sparse_results, dense_results)2.3 微调方案选型
考虑到金融数据的敏感性,我们选择本地化部署+微调的方案:
- 基座模型:Qwen-14B-Chat
- 微调方法:LoRA(低秩适配)
- 训练数据:15万条历史QA对+3万条人工标注数据
微调时的关键参数:
lora_rank: 64 lora_alpha: 128 target_modules: ["q_proj", "k_proj", "v_proj"] learning_rate: 3e-5 batch_size: 323. 核心挑战与解决方案
3.1 知识冲突问题
当RAG检索结果与微调模型记忆的知识不一致时,我们设计了置信度加权机制:
- 对RAG结果计算来源权威性评分
- 对微调输出计算概率分布熵值
- 通过门控网络动态调整权重
3.2 时效性管理
建立三层更新机制:
- 实时层:RAG连接的数据库每小时同步
- 天级:微调模型每周增量训练
- 月级:全量数据重新训练
3.3 成本控制技巧
- RAG侧:采用分级存储,热点数据放内存,冷数据存磁盘
- 微调侧:使用QLoRA技术将显存占用降低40%
- 推理优化:实现动态批处理,吞吐量提升3倍
4. 性能优化实战
4.1 检索性能提升
通过以下优化将平均响应时间从1200ms降至380ms:
- 对Milvus建立复合索引(IVF_FLAT + HNSW)
- 实现缓存预热机制
- 对高频查询建立倒排索引
4.2 微调效果增强
采用课程学习策略:
- 先训练通用金融知识
- 再训练细分领域(如债券、外汇)
- 最后精调业务场景对话
评估指标对比:
| 训练阶段 | Accuracy | Rouge-L |
|---|---|---|
| 初始 | 71.2% | 0.68 |
| 阶段1 | 82.5% | 0.76 |
| 阶段2 | 89.1% | 0.83 |
| 阶段3 | 92.3% | 0.87 |
5. 部署架构详解
5.1 生产环境配置
我们使用Kubernetes集群部署,关键配置:
- RAG服务:4台16核32G节点(带T4 GPU)
- 模型服务:8台32核64G节点(A10G GPU)
- 向量数据库:3节点Milvus集群
5.2 流量调度策略
基于用户类型的路由规则:
- 普通用户:70%流量走RAG优先路径
- VIP用户:100%走双引擎融合路径
- 内部用户:直接访问微调模型
6. 踩坑经验分享
中文分词陷阱:
- 初始使用通用分词器导致金融术语切分错误
- 解决方案:训练领域适配的分词模型
数据闭环构建:
- 初期人工审核反馈链路太长
- 后改为自动收集用户"有帮助"点击作为弱监督信号
冷启动问题:
- 通过构造合成数据生成初始训练集
- 采用主动学习策略优先标注关键样本
7. 效果评估方法论
我们建立了三维评估体系:
- 客观指标:准确率、召回率、响应时间
- 主观评分:邀请领域专家盲测
- 业务指标:用户满意度、问题解决率
典型bad case分析:
| 问题类型 | 占比 | 解决方案 |
|---|---|---|
| 多跳推理 | 32% | 增强检索链 |
| 术语歧义 | 25% | 完善同义词库 |
| 数值计算 | 18% | 接入公式引擎 |
这个项目给我们的最大启示是:在专业领域,单纯的RAG或微调都难以达到理想效果。RAG确保答案的准确性,微调保证回答的专业性,两者的有机结合才是构建高质量行业问答系统的关键。后续我们计划探索Agent架构进一步优化复杂问题处理能力。