中医 RAG 项目企业级生产部署最佳实践


将中医 RAG 项目部署到企业生产环境,需要综合考虑性能、可扩展性、安全性、可维护性以及领域特定需求(如古籍数据敏感性、术语准确性等)。以下是一套从架构设计到运维监控的全方位最佳实践指南。


一、系统架构设计

1. 微服务架构 vs 单体

  • 推荐微服务:将 RAG 系统拆分为独立服务,便于独立扩展和维护。
    • 数据预处理服务:负责文档解析、分块、向量化(可离线)。
    • 检索服务:封装向量数据库及检索逻辑(混合检索、重排序)。
    • 生成服务:调用 LLM 进行答案合成,包含提示词管理。
    • API 网关:统一入口,处理路由、认证、限流。
    • 评估与日志服务:异步处理用户反馈、日志收集、质量评估。

2. 数据流设计

用户请求 → API网关 → 检索服务 → 生成服务 → LLM推理 → 响应
                 ↑           ↓
             向量数据库   缓存(Redis)
  • 异步处理:对于文档更新、日志分析等任务,使用消息队列(Kafka/RabbitMQ)解耦。

二、基础设施与部署模式

1. 容器化与编排

  • Docker:每个服务打包成镜像,确保环境一致性。
  • Kubernetes:用于自动部署、伸缩、管理容器。推荐使用云厂商的托管 K8s 服务(如 AKS, EKS, GKE)。

2. 资源隔离与伸缩

  • 检索服务:CPU 密集型,可水平扩展。
  • 生成服务:GPU 密集型(若本地部署 LLM),需 GPU 节点池,并配置 HPA(Horizontal Pod Autoscaler)基于 GPU 利用率或请求 QPS。
  • 向量数据库:若自建,需有状态集(StatefulSet)和持久化存储。

3. 云原生组件

  • 服务网格(如 Istio):提供细粒度流量控制、可观测性、安全策略。
  • API 网关(如 Kong、APISIX):处理认证、限流、路由、监控。

三、数据存储选型

1. 向量数据库(生产级)

数据库 优势 适用场景
Milvus 云原生、高性能、支持混合检索、可扩展性极强 大规模向量检索(百万级以上)
Qdrant Rust 编写,低延迟,支持过滤和有效负载 对延迟敏感,需要复杂过滤
Elasticsearch 自带全文检索,易与现有 ELK 栈集成,支持向量插件 需要同时支持关键词和向量检索
Pinecone 全托管,免运维,快速上手 初创团队或不想自建运维
  • 建议:若数据量 > 500万,推荐 MilvusQdrant;若已有 ES 生态,可使用 ES 8.x 的向量检索功能。

2. 关系型数据库

  • PostgreSQL:存储用户信息、对话日志、反馈、知识库元数据。
  • Redis:缓存高频查询结果(如热门问题),降低检索和生成压力。设置合理的 TTL。

3. 对象存储

  • MinIO / AWS S3:存储原始文档、备份向量数据。

四、LLM 推理服务部署

1. 部署方式选择

方式 优点 缺点 适用场景
云 API(OpenAI, 通义) 零运维,高并发,持续更新 数据隐私风险,成本随用量线性增长 非敏感数据,快速上线
本地开源模型(Qwen, ChatGLM) 数据私有,长期成本可控 需要 GPU 资源,运维复杂 医疗等敏感领域
模型推理框架(vLLM, TGI) 高吞吐,低延迟,支持 continuous batching 需优化配置 本地部署时的首选
  • 中医领域推荐:本地部署 Qwen-14B-ChatChatGLM3-6B,使用 vLLM 提供高效推理服务。量化(AWQ/GPTQ)可降低显存需求。

2. 推理服务 API

  • 封装为独立服务,提供 /generate 接口,支持流式输出。
  • 配置超时和重试机制(如 30 秒超时,重试 2 次)。

3. 弹性伸缩

  • 使用 K8s GPU 节点自动伸缩(如阿里云 ECI 弹性容器实例),应对突发流量。

五、检索服务优化

1. 混合检索实现

  • 在向量数据库中启用混合检索(如 Milvus 的 HybridSearch,或 Elasticsearch 的 script_score 组合 BM25)。
  • 或独立部署关键词检索(Elasticsearch)和向量检索(Milvus),在应用层融合结果(RRF 算法)。

2. 重排序服务

  • 部署一个独立的 Rerank 服务(基于交叉编码器,如 bge-reranker-base),接收查询和 top-K 文档,返回重排后的结果。
  • 使用 Flask/FastAPI 封装,可水平扩展。

3. 缓存策略

  • 一级缓存:Redis 缓存用户查询和检索结果(key: 查询向量或查询文本的哈希,value: 文档 ID 列表),TTL 根据知识库更新频率设置。
  • 二级缓存:若生成答案可复用,缓存最终响应(需注意时效性)。

六、API 与安全

1. API 设计

  • RESTfulgRPC(内部服务间使用 gRPC 提升性能)。
  • 主要接口:
    • POST /v1/query:用户提问,返回答案和来源。
    • POST /v1/feedback:用户反馈(点赞/点踩)。
    • POST /v1/documents:管理员上传新文档(触发异步处理)。

2. 安全措施

  • 认证授权:使用 JWT 或 OAuth2,API 网关统一验证。
  • 限流:基于用户/ IP 的限流(如每秒 10 次),防止滥用。
  • 数据加密:传输层 TLS;敏感数据(如患者病历)存储加密。
  • 审计日志:记录所有查询和反馈,便于追溯和合规检查。
  • 防注入:对用户输入进行清洗,防止提示词注入。

七、监控与运维

1. 监控指标

  • 业务指标:QPS、响应延迟(p95/p99)、检索召回率、用户满意度(点赞率)。
  • 系统指标:CPU/GPU 利用率、内存、磁盘 IO、网络 IO。
  • 组件健康:向量数据库连接数、LLM 服务错误率。

2. 日志收集

  • 结构化日志:JSON 格式,包含请求 ID、用户 ID、查询、检索片段、答案、耗时等。
  • 集中化:使用 Fluentd/Logstash 收集,存入 Elasticsearch,通过 Kibana 可视化分析。

3. 链路追踪

  • 集成 JaegerSkyWalking,追踪一个请求从网关到检索、生成的全链路,便于定位性能瓶颈。

4. 告警

  • 基于 Prometheus 指标配置告警规则(如错误率 >1%、P99 延迟 >3s),通过 Alertmanager 发送到钉钉/邮件。

八、CI/CD 与版本管理

1. CI/CD 流水线

  • 代码仓库:GitLab / GitHub。
  • 自动化测试
    • 单元测试(各服务)
    • 集成测试(RAG 端到端,使用测试集评估准确率)
  • 构建镜像:Docker build,推送到私有仓库(Harbor)。
  • 部署:ArgoCD 或 Jenkins Pipeline,实现蓝绿部署或金丝雀发布。

2. 知识库版本管理

  • 每次知识库更新(新增/修改文档)都生成一个新的索引版本。
  • 在检索服务中支持多版本切换,便于回滚和 A/B 测试。
  • 使用数据库记录版本元数据(创建时间、文档数量、描述)。

九、成本优化

1. 计算资源

  • 使用 Spot 实例(抢占式实例)运行无状态服务(检索、API 网关)。
  • GPU 实例预留包年包月 + 弹性伸缩应对突发。

2. 存储

  • 向量数据使用 对象存储 备份,低频访问。
  • 冷数据(如一年前的日志)归档到更低成本的存储。

3. 模型推理

  • 采用 vLLM 的 continuous batching,提升 GPU 利用率。
  • 对非高峰时段缩容至零(若使用 Serverless 方式)。

十、中医领域特定实践

1. 数据隐私与合规

  • 患者数据:若涉及真实病历,需脱敏处理,遵守 HIPAA/国内医疗数据保护法规。
  • 古籍数据:一般公开,但注意版权,存储加密即可。

2. 术语归一化服务

  • 独立部署一个 术语服务,提供:
    • 口语转标准术语(如“后脖子发僵” → “项强”)
    • 同义词扩展(如“玄参” → “元参”)
  • 该服务可被检索服务调用,也可作为前置过滤器。

3. 知识库更新流程

  • 增量更新:新文档上传后,触发预处理管道,计算 embedding 并插入向量库,无需重建全量索引。
  • 全量重建:每周或每月离线重建一次,优化索引结构(如调整 IVF 参数)。

4. 评估与迭代

  • 建立 中医领域评估集(包含辨证、方剂、古籍条文等问题),在 CI 中自动运行,监控版本更新后效果变化。
  • 收集用户 bad cases,定期分析并优化数据或模型。

十一、部署架构图(示例)

[用户] → CDN → [API网关] → [认证/限流]
                ↓
         [查询路由] → [缓存 Redis] ←→ [检索服务]
                ↓                          ↓
           [生成服务] ←→ [LLM推理 (vLLM)]   [向量数据库 (Milvus)]
                ↓                          ↓
           [响应返回]               [消息队列] → [日志/评估服务]
  • 检索服务:调用 Milvus 混合检索 + Rerank 服务。
  • 生成服务:调用 LLM,注入自定义提示词,返回答案及来源。
  • 异步处理:用户反馈、日志通过 Kafka 写入 ELK。

十二、总结

企业级中医 RAG 部署最佳实践的核心要点:

维度 关键措施
架构 微服务拆分,API 网关统一入口,异步处理非核心任务。
数据 生产级向量数据库(Milvus/Qdrant)+ 关系型数据库,Redis 缓存。
模型 本地部署开源 LLM(vLLM 加速),术语归一化服务独立部署。
安全 认证授权、限流、传输加密、审计日志。
运维 K8s 编排,Prometheus 监控,ELK 日志,Jaeger 链路追踪。
领域特性 术语服务、增量更新、版本管理、合规处理。

通过遵循这些实践,你可以构建一个高可用、可扩展、安全可控的中医 RAG 生产系统,并能够持续迭代优化。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐