吾与之共事者,尝困于诡谲之败,旬有二日矣。内AI助,虽见"GPT-4o定价"之辞显于三处之向量数据库,然竟无所得。询"OpenAI模型之费",则得正果。复询"GPT-4o定价",反得十八月前GPT-3之议。
此乃纯向量式 RAG 系统之常弊。团队方欲更易嵌入模型。其实之解,仅三行配置而已。
向量检索者,实能善何事
密集向量检索于语义相似尤善。"如何取消我的订阅"与题为"账户终止程序"之文相合,盖因嵌入模型已习得二者语义相近。同义语、释义、跨语言匹配,皆可生效,盖因模型已睹文辞甚夥,知其意同也。
密集之矢,不善精符匹配,谓词于嵌入模型未尝多见,或异境所遇。 "GPT-4o" 乃近出之名,或未及于模型训练之时。模型视之为子词序列,未尝有强识为单元之念。若 "GPT-4o pricing" 与 "GPT-3 cost" 之余弦距,或反小于 "GPT-4o pricing" 自身之距,若后者现于迥异之境,则尤然。
此诚然也:
- 产品之名,尤以近出者(Claude 4, Llama 3.2, GPT-4o)为甚。
- 内文缩略语及代号(X100,PRJ-2024-Q3)
- 代码文档中函数与标识符之名
- 错误码与堆栈踪迹片段
- 幽微之技语,限域独用者
此等查询,BM25(Lucene与Elasticsearch二秩所恃之关键词评分算法)远胜向量化搜索之效.
所谓混合搜索者,何也?
混合检索之法,兼行二者,合其果。向量化检索者,依余弦相似度,得前k;BM25检索者,据词频重叠之绩,亦得前k。复有合并之术(多见互惠秩融),将并集重排,为序列一。
互易秩融合之选,实有其故。此法无参,无重数可调,无归一化之扰。每篇之得,乃诸检索器中其现之1 / (k + rank)之和,k为小常(常为六十)。文篇若于二器皆居上秩,则浮于前;若仅居一器之上秩,犹现于合列,然位稍降。
欲以权重调整向量与BM25者(如言"0.7向量加0.3关键词"),常费一周调权,终悟RRF之召回率已近2%,实无需调权耳。
吾等默认所运
每新启RAG之项目,Sapota所设默认检索配置,乃混合RRF,非独向量,非独BM25,二者融而用之。
施为直捷,于堪用之向量数据库也。
- Qdrant(Qdrant)自1.10版本起,已原生支持混合检索。汝当于稠密向量场旁定义一稀疏向量场,于索引时填充二者,于检索时查询二者。
- Weaviate(韦维亚特)已内置混成之索,一而即成
hybrid查询参数。 - Elasticsearch若不介意运行Elasticsearch,则其密集向量字段可实现此功能。
若团队已使用不支持混合搜索的向量数据库(如旧版Pinecone、Chroma、FAISS),则可借助轻量级库(Python之rank_bm25适用于百万文档以下)另建BM25索引,并在应用代码中合并。延迟开销约30%,值得。
纯粹之矢足矣
吾辈非恒荐混合。矢唯一足为当者:
- 其文纯为自然语言之散文,无罕见之标识(常识内容、客户服务FAQ不提产品名、内部政策文书)。
- 此查询分布实为释义繁重(用户以五十种不同方式询问同一事,而期系统知其意同)。
- 此语料库甚小(不足一万份文书),故BM25之扰胜于其精准之益。
此皆实事。亦较诸队所想为稀。众制文语多含商号,兼有术语,更有罕而要之识名。混成之法,兼治此三者,未损密矢之语义强。
何者易其始创者乎
观其病,既见评估之失,十五分钟而得诊断。其治,三变而已。
- 于既有之Qdrant集合中增稀疏向量之域。
- 以既有嵌入模型暨BM25稀疏编码器(Qdrant支持
Bm25为内置稀疏模型)复索引之。 - 更应用之搜索呼由单密查询转为RRF融合之混查询。
航行之时半日耳。不逮之问类,其召回率自三十以下跃至九十以上。已效之问,其召回率则平。迟滞自八十毫秒增至一百一十毫秒于p50处。
始创者问何以非为常制。答曰:凡向量数据库之教程及入门指南,多首倡纯密集向量检索,盖因其新而可喜也。BM25乃二十载旧术,非所欣羡。二者合之,不值供应商自署之博文,故多队未尝知此合实为生产所求。
谨记稀疏编码之注
超越傳統之BM25,有新式「學習稀疏」之編碼器(SPLADE、BGE-M3稀疏模式),藉變換器之模態產生稀疏向量。此等於多數基準測試中勝過BM25,堪為v2系統所考量。
v1之用,BM25已足。學習稀疏編碼之微進,不若增任何稀疏檢索之進步為大。
若汝之索求,失其当显
若汝之AI助者,不能寻得汝所证其在索引之内容,则其失,几乎恒在检索之层,非模型也。萨波塔提供一周之检索审计,成评估之集,辨其败之问类,并寄混合配置为可用之PR。
通过之人工智能工程之页 并寄三例生产中失灵之问。诊断通常一通电话足矣。












