第34章:Retriever 与 Postprocessor 源码剖析
定位:深入检索质量优化的核心扩展点。
源码关联:llama_index.core.retrievers、llama_index.core.postprocessor。
实战目标:实现一个自定义 Retriever,按业务优先级、时间衰减和相似度进行综合排序。
1. 项目背景
某企业知识库已稳定运行半年,团队以为"检索问题"早已解决——毕竟能把相似文档捞出来就够了。直到产品经理在一次回顾会上拍桌子:“为什么’核心产品使用手册’的检索结果排在’内部团建活动通知’后面?三年前的技术白皮书为什么天天被推到第一位?”
一句话戳破了窗户纸:知识库的需求不止于"语义相似"。产品的三个核心诉求是——业务优先级(核心产品文档 > 边缘功能文档,白金文档 > 普通文档)、时间衰减(今年更新的文档 > 三年前的文档,知识是会过期的)、语义相似度(和用户问题真正相关)。现有的VectorIndexRetriever只是机械地按余弦相似度排序,完全无视文档的业务权重和时间时效。
团队尝试在应用层手动重排:检索 20 条结果 → 应用层按 metadata 中的priority加权 → 再按updated_at做时间衰减 → 再合并相似度分数。这个逻辑
