实时 RAG 怎么做?业务数据变更怎么秒级同步到向量库?

第 1256 题 约 2 分钟读完

本文目录
  1. 面试怎么回答
  2. 先区分:什么数据需要实时进向量库
  3. 实时同步链路
  4. 需要注意的问题
  5. 监控

面试怎么回答

我会先区分:价格、库存、订单状态这类实时状态不该放进向量库,而是让模型通过工具实时查;需要实时进向量库的是商品描述、公告、FAQ 这类需要语义检索的内容。链路上数据库内容用 CDC、文档系统用变更事件,统一进消息队列;流式处理解析清洗,用内容哈希跳过没实质变化的更新,切分后小批量调用 Embedding;写入时按文档 ID 先删旧片段再写新片段,删除事件直接删除,权限和有效期等元数据同步更新。要注意按文档 ID 分区保证顺序、消费幂等、突发批量变更限流或走离线通道、索引刷新带来的可见性延迟,实时和离线用同样的处理逻辑并定期对账。监控端到端延迟、积压、失败数和数据量。

先把这段讲顺;面试官追问时,再展开下面的原理和细节。

详细讲解

客服 AI 回答商品问题,商品价格和库存刚改过,AI 还在按旧数据回答;新发布的公告,要第二天才能被检索到。很多 RAG 系统的知识库是每天全量或增量离线更新的,对时效要求高的场景就不够用了。面试官问这题,想看你能不能把实时数据链路的经验用到 RAG 上。

先区分:什么数据需要实时进向量库

  • 商品价格、库存、订单状态这类结构化的实时状态:其实不应该放进向量库,而是通过工具实时查询接口或数据库;
  • 文档类内容(商品描述、公告、FAQ、工单知识):需要被语义检索,变更后要尽快可检索,这才是实时 RAG 要解决的。

实时同步链路

  1. 捕获变更:
    • 数据库中的内容(商品描述、FAQ):通过 CDC 捕获变更;
    • 文档系统(Wiki、CMS):通过变更事件或 Webhook;
    • 统一写入消息队列;
  2. 流式处理:用 Flink 或流式消费程序:
    • 解析和清洗内容;
    • 判断是否真的需要重新处理(比如内容哈希没变,只是更新时间变了,就跳过);
    • 切分成片段;
    • 调用 Embedding 服务生成向量(小批量聚合后调用,提高吞吐);
  3. 写入向量库:
    • 按文档 ID 先删除旧的片段,再写入新的片段(或者用版本号覆盖),保证同一文档不会新旧片段并存;
    • 删除事件直接删除对应的片段;
  4. 元数据同步:权限、有效期、分类的变化也要同步,权限变更尤其要及时。

需要注意的问题

  • 顺序:同一文档的多次变更要按顺序处理,按文档 ID 分区;
  • 幂等:重复消费不能产生重复片段;
  • Embedding 服务的压力:突发的大量变更(比如批量导入)会冲击在线 Embedding 服务,需要限流和削峰,大批量变更走离线通道;
  • 可见性延迟:向量库写入后到可被检索可能有延迟(索引刷新),要明确告知业务的时效预期;
  • 一致性:实时链路和离线全量重建要用同样的处理逻辑,定期用离线全量结果校验实时链路有没有漏数据。

监控

  • 端到端延迟:从内容变更到可被检索的时间;
  • 消费积压;
  • 处理失败的文档数;
  • 实时和离线的数据量对账。