这道题其实问的是,在一个结合了[[RAG]]和[[知识图谱]]的[[Agent]]系统里,知识怎么动态更新,以及怎么保证更新不崩。我觉得本质是一个变更管理的问题,不是单纯的技术堆叠。
先说更新机制的核心步骤。我把它分成四层:触发层、抽取层、验证层、融合层。触发层,常见三种方式:事件驱动、定时扫描、还有Agent主动学习。事件驱动适合业务系统里实时产生的变更,比如订单状态变化;定时扫描适合批量数据,比如每天拉一次商品库;主动学习是Agent发现自己知识盲区了,主动请求补充。实际落地时,很少只用一种,往往是事件驱动加定时扫描混合,事件驱动保证实时性,定时扫描兜底。
接下来是抽取层,也就是从原始数据里抽实体和关系。这里有个坑:如果原始数据质量差,比如非结构化文本,[[NER]] 和 [[Relation Extraction]] 的准确率会直接影响后面。所以我会在抽取后加一个质量验证,规则校验加模型打分,比如实体置信度低于0.8的直接丢弃或打回人工。验证通过后进入冲突检测,比如同一个实体在不同来源里属性不一致,这时需要版本合并或者按来源优先级处理。然后图谱融合,更新索引,最后发通知给下游。
实时性和一致性的平衡,是这道题的核心。实时性不是越高越好,得看场景。比如电商的价格更新,必须强一致,否则用户看到的价格和结算不一样,会出大问题。我会用MVCC版本快照,写时复制,保证查询不中断。更新时走分布式事务,比如Saga模式,失败能回滚。而对于非关键信息,比如商品描述,可以接受秒级延迟,用Kafka加Flink流处理,近实时更新。
准确性方面,除了刚才说的规则加模型打分,我还会加灰度发布。比如新图谱先切5%流量,跑一段时间看召回率和用户反馈,没问题再全量。异常自动回滚,这比事后修复成本低得多。
再一个,和RAG的联动。图谱更新后,向量索引不能阻塞等待,得异步刷新。查询时走双路召回,向量相似度加图谱结构化检索,结果融合排序。这里有个细节:图谱更新后,向量索引可能还没更新,导致召回不一致。我会在查询时加版本号过滤,确保用户看到的是同一个版本的数据。
说到这,其实还有一个容易被忽视的点:知识图谱的动态更新,和RAG里的[[Chunk]]更新策略有很强的关联。比如图谱里一个实体改了,它对应的文档块要不要重新切分和索引?如果直接重切,可能影响其他实体的关联。这块我还没完全想透,但感觉可以用事件溯源的思想,只更新增量部分,而不是全量重建。
所以总结一下,我更倾向于把知识图谱的动态更新看作一个持续演化的过程,而不是一次性的工程。前提是你得先有好的数据治理和监控,否则更新越多,错误越多。实际落地时,我会优先保证核心场景的一致性,用灰度发布控制风险,再逐步优化实时性。