Skip to content

企业生产实践

把 RAG 从 Demo 搬到生产,需要解决索引规模、实时性、多租户、安全、成本、可观测性等一系列工程问题。本章按主题给出落地经验。

1. 大规模索引

问题实践
文档量大分布式 embedding 服务 + 异步任务队列(Celery / Temporal / Argo)
索引时间长批量编码、pipeline 并行、增量更新
版本管理为每个索引版本打标签,支持灰度切换与回滚
脏数据在 parser 阶段做质量打分,过滤低质量文档

2. 实时更新策略

策略说明适用
全量重建定期重新索引整个知识库数据量小、变更少
增量更新只处理新增/修改/删除的文档大多数生产场景
流式更新监听 Kafka / CDC 实时写入新闻、股票、客服对话
双写切换新索引构建完成后原子切换对一致性要求高的场景

注意向量索引的 delete/upsert 支持度不同,选型时要确认是否支持真正的删除而非仅标记。

3. 多租户数据隔离

隔离级别实现适用
物理隔离每个 tenant 独立 collection/index强合规、高价值客户
逻辑隔离同一索引用 tenant_id metadata 过滤成本敏感、租户多
混合隔离大客户独立索引,小客户共享索引+过滤SaaS 平台常见

关键点:

  • 查询时必须把 tenant_id 作为前置过滤条件。
  • 权限层要在 API Gateway 处校验 tenant。
  • 审计日志记录谁访问了哪个 tenant 的哪些文档。

4. PII、权限与审计

  • 数据脱敏:索引前识别并替换手机号、身份证号、银行卡号。
  • 访问控制:文档级 ACL,检索时按用户角色过滤。
  • 审计:记录文档来源、chunk 版本、检索结果、生成答案。
  • 合规:GDPR、CCPA 要求支持“被遗忘权”,即删除用户相关数据。

5. 缓存策略

缓存层缓存对象TTL
Query Cache相同 query 的答案分钟级
Embedding Cachequery/chunk 的向量小时级
Retrieval Cache热门检索结果分钟级
Prompt Cache高频 prompt 模板长期

缓存能显著降低 embedding 和 LLM 调用成本,但要注意缓存失效与答案时效性。

6. 延迟与成本优化

手段效果
减小 chunk降低 embedding 与检索开销
ANN 索引用可接受的精度损失换检索速度
异步 embedding把索引阶段成本摊平到离线
轻量 reranker在线用 BGE-Reranker 替代大 cross-encoder
模型路由简单问题走小模型,复杂问题走大模型
结果缓存减少重复 LLM 调用

7. 可观测性

  • Trace:OpenTelemetry/LangSmith 记录完整流水线。
  • Metrics
    • 检索延迟 P50/P99
    • 检索命中率 / 空召回率
    • Rerank 前后 Top-1 变化率
    • 生成 token 成本 / 延迟
    • 用户反馈(点赞/点踩)
  • 日志:query、rewritten query、retrieved chunks、prompt、answer(注意 PII)。

8. 故障模式与应对

故障现象应对
空召回检索不到相关 chunk改写查询、放宽过滤、fallback
低质量召回召回结果不相关Multi-Query、Hybrid、Reranker 调优
幻觉引用模型引用不存在引用校验、降低 temperature
延迟飙升检索或生成超时缓存、超时降级、批量限制
索引落后答案基于旧文档增量更新、版本切换、 freshness 权重
租户越权用户看到他人数据前置过滤 + ACL 校验

9. 人机协同反馈闭环

  • 用户反馈:点赞/点踩收集 bad cases。
  • 人工标注:对检索结果和答案进行人工纠偏。
  • 持续迭代:把 bad cases 加入评估集,优化 chunking、embedding、reranker。
  • A/B 测试:对不同检索策略、prompt 模板、模型进行实验。

小结

生产 RAG 的核心挑战不是“让检索跑通”,而是让检索在大规模、多租户、强合规、高可用的条件下持续稳定。把可观测性、缓存、权限、评估闭环做扎实,才能把 RAG 从玩具变成业务基础设施。

Released under CC-BY-SA-4.0 License.