这道题其实本质在问,当线上数据分布快速变化时,怎么用外挂知识库低成本地保持模型效果,而不是频繁重训。因为重训成本高、周期长,而分布漂移又很常见。所以核心思路是:感知漂移,然后动态更新外挂知识,让模型在推理时能引用最新信息。
具体架构上,我把它拆成三层。第一层是漂移感知层,需要持续监控输入分布和业务指标,比如用 KL散度 检测特征偏移,或者看模型置信度是不是突然变低、转化率有没有骤降。一旦触发阈值,自动采样并进入审核或自动入库,这样能快速响应。
第二层是知识更新层。这里有个关键区分:实时流和批量流要分开处理。实时流比如用户点击行为,通过 Kafka 接 Flink 做特征工程,直接写进 Redis 或 HBase,分钟级生效。批量流比如商品描述更新,先用 Spark 生成 [[Embedding]],再增量更新到 [[Vector Database]] 比如 Milvus,小时级重建。一个容易踩的坑是,向量库频繁更新时,索引质量会下降,比如 [[HNSW]] 图结构会碎掉。我的做法是用蓝绿部署,双版本向量库,更新时切流量,失败秒级回滚,保证召回质量不崩。
第三层是检索决策层,也就是[[混合检索]]加动态权重。检索时既做向量相似度,又用实时库过滤条件,比如时间窗口或地域。然后根据漂移强度,动态调节外接知识对模型输出的影响,比如用门控网络或简单规则。举个例子,外卖业务中,商家经常上下架或改库存,如果模型推荐了一个已下架的商家,用户体验很差。所以我们会先用 Redis 存当前可用商家 ID,向量检索后再过滤掉不可用的,这就是实时库兜底。
更新机制上,我按场景分了三种模式。高频低危的,比如推荐文案,用准实时增量索引,延迟小于5分钟,最终一致就行。中频中危的,比如商品属性,小时级批量重建加热切换,强一致,用版本控制。低频高危的,比如定价策略,必须人工审核加灰度发布,天级。说白了,一致性要求和更新频率是成反比的,不能一刀切。
落地挑战有几个。先看延迟,向量检索加 [[RAG]] 生成链路可能超过500ms,解法是检索结果缓存,用 LRU 加语义去重,以及预计算热门查询的 RAG 结果,异步预填充。再看一致性,向量库和实时库的数据要对齐,我会统一事件时间戳,检索时带 valid_time 过滤。而且如果知识冲突,优先级是实时库大于向量库大于模型参数,显式标注来源。还要看效果评估,离线看分布漂移前后的 KL散度 变化和检索命中率,在线做 A/B 测试,对照组冻结知识库,实验组动态更新,重点看分布外样本的指标增益。
这里有个延伸点:当知识库规模很大时,比如百万级,全量重建成本高,但增量更新又可能影响索引质量。我倾向的做法是分层存储,把热向量常驻内存,长尾向量按需加载,这样平衡内存和召回。但具体阈值怎么定,需要结合业务数据分布来调。
最后总结一下,我更愿意把动态增强看作一个持续调优的系统,而不是一次性方案。前提是能快速感知漂移,并且有可靠的更新和回滚机制。常见失败场景是只关注更新速度而忽略了一致性,导致模型效果反而变差。所以我会特别关注效果闭环,确保每次更新都有可量化的收益。