搜不到编号,不是模型笨,是检索方式选错了!向量搜索搜不到产品编号?50 行 Python 让关键词和语义检索互相补位
开发者实测:纯向量检索会漏掉 KB-2024-7831 这类精确编号,纯关键词检索又接不住改写过的提问,把两路排名融合起来才稳。
大白话做 RAG 的人常踩一个坑:向量搜索擅长理解意思,但碰到产品编号、人名、单号这种字面串就抓瞎;关键词搜索(BM25)反过来,字面对得上才管用,换个说法就找不到。这篇教程的思路是两边都跑一遍,各自排好名次,再用一个叫 RRF 的公式把两份排名合并成一份。关键点是不能直接把两种分数相加——BM25 分数没有上限,余弦相似度只在 -1 到 1 之间,量纲根本对不上,所以只合并名次、不合并分数。作者用 50 行 Python 从零写了一遍,方便看清底层到底在干什么。
对你意味着如果你在做知识库问答、文档检索或 AI 客服,检索漏召回是最常见的翻车原因;这套思路能直接搬进现有管线,成本只多几毫秒。
原文:Hybrid Search for RAG: BM25 + Vectors in 50 Lines of Python
打开巨象雷达,看今天全部 AI 动态