Featured image of post RAG生产实践:常见坑、性能优化与迭代路线图

RAG生产实践:常见坑、性能优化与迭代路线图

从 Demo 到生产环境,RAG 最大的挑战通常不是搭起来,而是持续稳定地跑下去。

RAG 的 Demo 很容易做,生产环境却很容易失控。

一开始你可能只要:

  • 一个 embedding 模型
  • 一个向量库
  • 一个聊天模型

但真到线上,问题会迅速变成:

  • 更新怎么做
  • 成本怎么控
  • 延迟怎么降
  • 数据怎么隔离
  • 错误怎么排查
  • 版本怎么回归

所以生产级 RAG 的重点是“工程稳定性”,不只是“回答效果”。

一、最常见的 10 个坑

1. 把所有文档放进一个大集合

后果:

  • 检索范围太大
  • 噪声高
  • 权限和租户隔离难做

建议按业务边界拆 source,而不是全塞一起。

2. chunk 没有业务上下文

后果:

  • 单个 chunk 语义不完整
  • query 很难命中真正有用的内容

建议补充标题、章节、对象名、时间版本等上下文。

后果:

  • 编号、缩写、关键词类查询表现不稳

建议逐步升级到 hybrid retrieval。

4. 以为自己有 rerank,其实只是再按向量分数排一次

后果:

  • 工程上看似完整
  • 效果上没有真正精排

建议接入真实 rerank 模型,再做前后指标对比。

5. top_k 和阈值写死

后果:

  • 某些 query 召回不足
  • 某些 query 噪声过大

建议把“召回候选数”和“最终注入数”拆开,并用数据集调参。

6. 没有 context budget 设计

后果:

  • prompt 过长
  • 延迟和成本升高
  • 证据质量下降

建议把 prompt 当作“有限预算的证据包”来设计。

7. 文档更新了,索引没同步

后果:

  • 回答依据过期
  • debug 很难看出问题

建议建立文档版本、增量更新和重建流程。

8. 没有证据引用

后果:

  • 用户不信任答案
  • 团队也难排查错误

建议把引用显示做成默认能力。

9. 没有离线 benchmark

后果:

  • 每次优化都像盲人摸象

建议固定一组 gold queries,长期跟踪 Recall@K 和答案质量。

10. 没有 inspect 页面

后果:

  • 系统错了,但没人知道哪一层错了

建议把 inspect 视为 RAG 的标配功能,而不是可选功能。

二、生产环境里最重要的 4 个非功能点

1. 延迟

RAG 延迟常见来源:

  • embedding
  • 向量检索
  • rerank
  • LLM 生成

常见优化手段:

  • query embedding cache
  • 候选结果 cache
  • 减少不必要的 rerank 数量
  • 把召回和精排拆成不同预算
  • 根据 query 类型动态走轻重路径

2. 成本

成本不只是 LLM 调用,还包括:

  • embedding 成本
  • rerank 成本
  • 存储成本
  • 索引重建成本

建议至少区分:

  • 离线摄取成本
  • 在线查询成本

3. 数据隔离

如果涉及多租户、内部知识、权限差异,必须在检索前就做好边界控制。

建议把隔离逻辑放在:

  • source 级
  • metadata 级
  • 查询过滤级

不要把安全问题留给最终 prompt。

4. 可回归

生产系统最怕的是:

  • 这次更新后没人知道为什么变差
  • 看起来更快了,但答案质量掉了

所以每次重要改动后,都应该至少复跑:

  • 检索指标
  • 生成指标
  • 典型线上 bad cases

三、一个实用的性能优化顺序

不要一开始就做所有优化。更推荐按收益排序。

第一阶段:低成本高收益

  1. 优化 chunking
  2. 补 metadata
  3. 做 source 过滤
  4. 控制上下文长度
  5. 加 inspect

第二阶段:质量优化

  1. hybrid retrieval
  2. 真实 rerank
  3. query rewrite
  4. better prompt assembly

第三阶段:工程优化

  1. 缓存
  2. 异步摄取
  3. 增量索引更新
  4. trace 级评分

四、推荐的版本路线图

V1:可跑通

  • 文档导入
  • chunking
  • dense retrieval
  • 基础引用

V2:可诊断

  • inspect 页面
  • 原始候选可视化
  • prompt 快照
  • 基础 benchmark

V3:可优化

  • hybrid retrieval
  • rerank
  • metadata 策略
  • query routing

V4:可运营

  • trace 打分
  • 线上问题回放
  • 数据集版本化
  • 回归门禁

五、一个推荐的团队协作方式

如果团队里有算法、后端、产品一起协作,最好明确分工:

算法 / NLP

  • embedding / rerank 选择
  • chunking 方案
  • benchmark 设计

后端

  • ingestion pipeline
  • 索引与缓存
  • trace / inspect

产品 / 运营

  • bad cases 收集
  • 用户反馈归类
  • 高价值问题维护

这样 RAG 才不会变成“只有一个人能调”的黑盒系统。

六、最后给一个非常实用的判断标准

如果你的 RAG 系统满足下面这些条件,说明已经开始走向成熟:

  1. 你知道每次回答用了哪些证据。
  2. 你能复现一次错误回答的完整链路。
  3. 你有一组固定 benchmark。
  4. 你能比较不同版本的检索和答案质量。
  5. 你知道下一步该优化哪一层。

如果这 5 条还做不到,那么最应该投入的通常不是“换更强模型”,而是把检索、inspect 和评测体系补完整。

七、系列总结

这组 RAG 文章的重点不是讲某一个框架怎么调 API,而是回答更底层的问题:

  • RAG 到底该怎么设计
  • 为什么 chunking 和检索策略决定了上限
  • 为什么 inspect 和评测是刚需
  • 怎么把 Demo 迭代成生产系统

如果后面你还想继续往下写,我建议下一批文章可以直接进入更细的专题:

  1. Query Rewrite 和 Query Decomposition
  2. Contextual Retrieval
  3. 多租户与权限过滤
  4. RAG 的引用生成与 Grounding
  5. RAG 与 Agent 的结合方式
使用 Hugo 构建
主题 StackJimmy 设计