语义缓存与 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 检索流程
q_embed = embed(query)- ANN 检索 Top-5
- 若
cosine_sim > threshold且 TTL 有效 → 返回答案 - 否则走 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。