语义缓存与 CDC 实时 RAG 流水线:从设计到上线

2026-06-12 14:22:53

语义缓存与 CDC 实时 RAG 流水线

目标:FAQ 类场景 API 成本降 50%,知识更新延迟 < 3 分钟

一、系统全景

                    ┌──────────────┐
  用户提问 ────────→│ Query Router │
                    └───┬──────┬───┘
                        │      │
               缓存命中 ↓      ↓ 未命中
                    ┌───┴──┐  ┌────────┐
                    │Cache │  │  RAG   │
                    └───┬──┘  └───┬────┘
                        │         │
                        └────┬────┘
                             ↓
                          LLM 生成

  MySQL ──CDC──→ Kafka ──→ Embed Worker ──→ Milvus

二、语义缓存设计

2.1 何时适合语义缓存?

适合 不适合
FAQ、政策解读 实时股价、天气
重复率 > 30% 强个性化回答
答案可复用 涉及用户私有数据组合

2.2 检索流程

  1. q_embed = embed(query)
  2. ANN 检索 Top-5
  3. cosine_sim > threshold 且 TTL 有效 → 返回答案
  4. 否则走 RAG + LLM,异步写缓存

2.3 阈值调优

阈值 效果
0.95 高精度,命中率低
0.88 平衡(多数 FAQ 起点)
0.80 高命中,幻觉风险升

必须做人工标注集 A/B:100 条典型问句,对比不同阈值的用户满意度。

2.4 Redis Vector 配置

FT.CREATE cache_idx ON HASH PREFIX 1 cache: SCHEMA
  query TEXT
  answer TEXT
  embedding VECTOR HNSW 6 TYPE FLOAT32 DIM 1024 DISTANCE_METRIC COSINE

租户隔离:cache:{tenantId}:{hash} 前缀分索引。


三、CDC 实时 RAG

3.1 为什么不用定时全量?

  • 全量:夜间 4h,白天数据旧
  • CDC:秒级感知变更,Embedding 异步追赶

3.2 Canal → Kafka 配置要点

{
  "destination": "rag_sync",
  "filter": "db_name.table_name",
  "flatMessage": true
}

监听表:products, policies, faq_items

3.3 Embedding Worker

def handle_event(event):
    if event.type in ('INSERT', 'UPDATE'):
        chunks = chunk_document(event.data['content'], max_tokens=512)
        for i, chunk in enumerate(chunks):
            vec = embed(chunk)
            milvus.upsert(
                id=f"{event.pk}_{i}",
                vector=vec,
                metadata={"source": event.table, "updated_at": event.ts}
            )
    elif event.type == 'DELETE':
        milvus.delete(filter=f"source_id == '{event.pk}'")

Chunk 策略:按标题/段落切,overlap 50 tokens。


四、检索增强

hybrid_score = 0.7 * vector_sim + 0.3 * bm25(keywords)

Milvus 2.4+ 支持 BM25 混合检索;国内也可用 ES + dense_vector。

Rerank:Top-20 粗排 → bge-reranker 精排 Top-5 → 拼 Prompt。


五、Prompt 模板

你是企业知识助手。仅根据以下参考资料回答,资料中没有则说「暂无相关信息」。

参考资料:
{context}

用户问题:{query}

禁止模型使用预训练知识补全政策细节。


六、监控指标

指标 健康值
cache_hit_rate 20–45%
rag_retrieval_p99 < 200ms
cdc_lag_seconds < 180s
answer_grounded_rate > 85%(人工抽检)
negative_feedback_rate < 3%

七、负反馈闭环

用户点「不准确」→ 记录 (query, cached_answer, reason) → 自动失效缓存条目 → 可选进人工审核队列修正 FAQ。


八、上线 Checklist

  • [ ] 租户索引隔离验证
  • [ ] 敏感表排除 CDC
  • [ ] 缓存 TTL 与业务时效对齐
  • [ ] 阈值 A/B 报告归档
  • [ ] 降级:Vector 故障时纯 BM25 或直出 LLM

小结

语义缓存解决 成本与延迟,CDC RAG 解决 正确性与时效。两者组合是国内 2026 年企业知识助手的主流工程范式,关键在阈值调优与负反馈闭环,而非盲目增大 Top-K。