企业生产实践
把 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 Cache | query/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 从玩具变成业务基础设施。