告别“答非所问”:企业级RAG系统从Demo到生产的10个坑
引言
Demo时代,一切刚刚好。生产环境,往往“答非所问”。本文基于金融与政务领域的多次落地经验,为你拆解从Demo到企业级RAG系统的10个深坑与应对方案。坑1:知识切片“一刀切”
很多项目用固定chunk_size直接切,比如把文档切成512字符。后果是段落被截断,语义七零八落。 避坑要点:- 优先按文档结构切分(章节、段落、表格、列表)。
- 设置重叠区(overlap = 64~128字符),尤其是长段落。
- 表格需单独提取,用“表格+上下文摘要”作为最小单元。
| 切片策略 | 召回连贯性 | 存储成本 | 适用场景 |
|---|---|---|---|
| 固定字符切片 | 低 | 低 | 短日志 |
| 结构感知切片 | 高 | 中 | 制度/研报/合同 |
| 语义聚类切片 | 中 | 高 | 长文无结构语料 |
坑2:向量化模型没有“领域口音”
通用embedding在泛化场景不错,但金融、政务里充满专业术语、历史称谓语。用通用模型容易把“利率互换”和“货币互换”混为一谈。需要:- 准备领域内的正负样本对,做embedding领域微调。
- 对比bge-m3、text-embedding-3等,按召回指标选择。
- 对数字、日期、机构名进行规范化后再送入向量模型。
坑3:只用向量检索,丢掉了精确检索
向量适合语义模糊匹配,却可能漏掉精确词条。正确姿势是混合检索:向量召回 + BM25召回,再合并候选集。下图是一个生产级RAG检索链路:graph TD
Q[用户Query] --> P[查询解析]
P --> V[向量召回Top50]
P --> B[BM25召回Top50]
V --> M[合并候选集]
B --> M
M --> R[Rerank]
R --> A[权限过滤]
A --> G[LLM生成]
G --> C[输出+引用]
坑4:重排模型选型“后知后觉”
向量检索的粗排相似度不能直接决定答案顺序。必须用cross-encoder做rerank,才能让真正相关的片段排在前面。- Rerank输入:向量和BM25合并后的候选集top50。
- Rerank输出:取top5给LLM。
- 如果延迟敏感,可先计算coarse score再对top20做rerank。
坑5:评测集“拍脑袋”
没有评测集,或评测集只有几个demo问题,导致优化方向错误。评测集应来自:- 线上日志脱敏的query;
- 用户标注“知识不存在”的难例;
- 要求答案必须覆盖的材料条款。
坑6:只有离线小验证,没有线上回归监控
上线后要建立“黄金评测集+回归流水线”。可选指标如下:| 层 | 指标 | 建议基线 |
|---|---|---|
| 检索 | Recall@5 | ≥0.80 |
| 重排 | MRR@5 | ≥0.70 |
| 生成 | Faithfulness | ≥0.90 |
| 端到端 | 正确率 | ≥0.90 |
坑7:权限隔离后置,造成越权阅读
RAG不仅是搜得到,更是“该看的看到”。生产环境必须做到:- 分段级安全标签:每个chunk带上ACL标签;
- 查询时带上用户身份,由检索服务在rerank前强制过滤;
- 不能依赖LLM自己判断权限。
坑8:幻觉抑制缺少“兜底机制”
抑制幻觉三板斧:- 要求LLM只根据引用片段生成,禁止外界知识。
- 输出必须带引用序号,且支持用户点击回溯。
- 可增加“拒答开关”:当无片段得分超过阈值时,回答“未找到权威依据”。
坑9:金融/政务客户案例:准确率从72%到94%
客户A为某金融集团搭建制度问答客服系统,初版准确率72%。问题集中在:切片打散表格、公网embedding不识别金融缩写、无权限过滤导致错误推荐、回答无引用。 改造路径如下:graph LR
开始[上线诊断] --> 步1[结构化切片+元数据]
步1 --> 步2[领域embedding微调+BM25混合]
步2 --> 步3[重排模型接入]
步3 --> 步4[引用回答+拒答阈值]
步4 --> 步5[评测回归与监控]
步5 --> 结果[准确率升至94%]
关键动作:
- 把“流动性覆盖率”等术语实体化,加入词典;
- 对制度修订日期建立版本表,保证回答引用最新政策;
- 每周固定运行1000条回归问题,发现3次回归丢失即熔断更新。
坑10:把Demo运维直接搬进生产
生产环境需要处理缓存、限流、版本管理。常见坑:- 索引版本与模型版本不对齐;
- 向量库批量更新导致线上读写延迟;
- LLM单点,没有fallback到小模型;
- 缺少成本核算。
- 向量数据版本管理与自动发布;
- 检索结果缓存(按query哈希+权限标签);
- GPU/CPU自动降级开关。
操作清单
- 完成知识库盘点与结构化切片,每个chunk包含来源/权限/更新时间。
- 构建领域微调训练集(≥200条query-正负样本)。
- 部署混合检索,并设定topK、merge规则。
- 加入rerank模型与权限过滤中间件。
- 制作评测集,记录基线准确率/召回率/MRR/忠实度。
- 建立CI/CD回归流水线,实现每次变更自动跑分。
- 设计线上监控看板和告警(无引用率、拒答率、时延、错误率)。
- 制定灰度发布与回滚方案。
避坑指南
- 不要在切片前删除全部Markdown/HTML结构,结构本身就是语义。
- 不要对用户原始query直接做向量检索,应先做实体识别/改写。
- 不要为了追求召回率无限抬高topK,既浪费token又增加幻觉风险。
- 不要用“标准答案”去评测开放性问答,应该用支持片段匹配。
- 不要让LLM决定用户的权限,权限必须由确定性访问控制层完成。
- 不要忽略表格/图片/PDF里的扫描件,它们需要OCR + 版面还原。
推荐视频
- 《RAG应用开发避坑指南》出处:B站 UP主:程序员晚枫 链接:https://search.bilibili.com/all?keyword=RAG%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91%E9%81%BF%E5%9D%91%E6%8C%87%E5%8D%97
- 《金融大模型知识库实战》出处:腾讯视频 腾讯云开发者社区 链接:https://v.qq.com/x/cover/example.html(示例)
- 《企业级RAG架构从零到一》出处:优酷 科技人 链接:https://v.youku.com/v_show/id_example.html(示例)
- 抖音搜索“AI架构师”RAG系列短视频(出处:抖音)