RAG 检索增强字节跳动面经高频RAG向量检索召回优化速答 · 约 6 分钟更新 2026-09-28

知识有时效性,向量检索怎么处理时间衰减?

一句话结论

可以给检索分数加上时间衰减函数,或采用新旧双路召回融合。同时要在写入侧维护文档的失效期元数据,并按文档类型配置不同衰减强度,避免误伤长期稳定的概念类知识。

先这样答

向量检索的核心是计算语义相似度,这个过程本身不包含时间维度。这会导致旧文档如果内容更长或描述更完整,得分会高于较短的新文档,过期信息就会顶掉新信息。在处理价格、政策、版本号等时效敏感内容时,这种现象会导致严重的错误。处理时间衰减,主要从召回侧和写入侧两个方向切入。

在召回侧,最直接的做法是在检索分数中加入时间衰减项。最终得分等于相似度乘以衰减函数,衰减函数可以根据文档年龄呈指数或线性下降,其中的半衰期参数需要根据具体的业务节奏来调节。另一种做法是按时间窗过滤,先只检索近几个月的文档,如果召回数量不足,再退化为全库检索。此外,还可以采用新旧双路召回,在最终融合排序时给新文档赋予更高的权重。

在写入侧,需要配合做好元数据管理,让文档自带生效期或失效期字段。一旦文档过期,系统自动将其降权或移出主索引。同时要定期重刷知识库,对齐源文档状态,避免源文档修改了但检索出来的答案还是旧的。在具体策略上,不能采取一刀切的全局衰减。长期稳定的知识,比如基础概念解释,不应该被压低分数;而时效敏感的内容,比如新闻或价格,需要强衰减。按文档类型或字段配置不同的衰减强度是更合理的做法。

最后,为了确保时间衰减策略有效,需要按时间切片构建评测集。通过对比新旧问题的准确率,验证衰减参数在提升时效性的同时,没有误伤长期稳定的基础知识。

面试官会怎么追问

  • 「指数衰减里的半衰期参数具体怎么调?」 设定半衰期需要结合业务节奏,先给出一个初始预估值。随后利用按时间切片构建的评测集进行测试,观察不同参数下时效性问题和稳定知识问题的综合准确率。最终选择一个能平衡新知识召回,又不让旧知识得分过低的参数。
  • 「怎么判断哪些文档该衰减,哪些不该衰减?」 这依赖于文档入库时的分类和元数据提取。在文档解析阶段,为文档打上类型标签。检索时系统读取这些标签,对概念解释类标签应用零衰减或极弱衰减,对新闻或价格类标签应用强衰减函数。
  • 「源文档被修改了,怎么保证知识库不读到旧版本?」 需要建立定期重刷机制对齐源文档状态。在源系统侧获取文档的状态变更情况,一旦发生修改,触发知识库的更新操作。知识库根据文档标识定位并覆盖旧的向量和元数据,避免文档改了答案还是旧的。

回答的坑

  • 认为把时间戳转换为向量一起参与相似度计算就能解决时效问题,实际上向量检索难以直接理解时间数值的大小关系,应该在计算完相似度后用时间衰减函数调整最终得分。
  • 忽略了知识类型的差异而采用全局统一的时间衰减策略,正确的方向是按文档类型或字段分别配置衰减强度,防止长期稳定的知识被误伤。
—— 本题完 ——