Skip to content

07. RAG 生产化 ​

1. 先定义数据边界 ​

每个 chunk 都应带 tenant、文档 ID、版本、生效时间、过期时间、来源、ACL 标签和解析器版本。检索时先按用户权限过滤,再做相似度排序;事后过滤会把越权内容暴露给排序器或日志。

text
request → authenticate → authorize filters → retrieve → rerank → generate

权限变化时,缓存、向量索引、引用链接和导出文件都要失效。不要把“提示词要求模型保密”当作访问控制。

2. 索引版本与增量更新 ​

为每次构建生成 index_version,记录输入快照、embedding 模型、切分配置、解析器版本和构建时间。先构建新索引并抽样评估,再原子切换别名;失败时切回上一版本。删除文档必须按稳定 document_id 删除所有 chunk,不能只删除一个文件名。

增量流程:

  1. 读取变更事件并去重。
  2. 校验来源和权限。
  3. 解析、切分、向量化到临时批次。
  4. 对同一文档旧 chunk 做替换。
  5. 运行小型回归集。
  6. 提交版本并发布。

3. 可靠性 ​

外部模型调用设置连接和总超时、有限重试、指数退避和熔断;重试只用于幂等请求。索引写入使用批次和校验,临时文件完成后再 rename。检索为空、模型超时和引用生成失败要有明确降级:返回可解释拒答或检索结果,不要编造。

4. 可观测性 ​

每个请求关联 trace ID,记录阶段耗时、候选数量、过滤数量、top-k 分数、模型/索引版本、token、错误类型和引用 ID。敏感原文按权限脱敏。告警关注 p95 延迟、空结果率、引用覆盖率、越权拒绝、索引新鲜度和成本,而不是只看 HTTP 200。

5. 成本和容量 ​

Embedding 离线批处理并缓存 hash;相同文档和模型不重复计算。限制问题长度、候选数量和上下文 token。先用便宜模型做召回,再把少量候选交给重排或生成。容量测试要覆盖文档增长、并发、重建索引和模型限流。

6. 安全清单 ​

  • 文档内容视为不可信输入,防止提示注入影响系统指令。
  • 引用 URL 做允许列表,避免 SSRF 或把内部路径返回用户。
  • 日志、评估集和缓存按敏感级别处理。
  • 租户字段不能由用户查询参数直接决定。
  • 工具调用设置最小权限、参数校验和审计。
  • 依赖许可证、镜像和模型来源在发布前锁定并扫描。

7. 上线门槛 ​

必须有:权限过滤测试、无答案拒答测试、索引回滚演练、20 条以上回归集、p95 和成本预算、数据删除流程、事故联系人。没有这些证据时只允许内部试用。

练习 ​

模拟 embedding 模型升级:构建 v2,比较 Recall@k 和成本;故意让构建失败,证明线上仍使用 v1;删除一份制度,验证引用、缓存和搜索均不可见。

参考 06 评估 与 05 实战。

评论

正在加载评论…