告别向量嵌入税:BM25加Seb如何击败8B模型RAG

0 阅读

为什么你的RAG管道太贵且太慢

很多团队在构建文档检索或产品搜索系统时,习惯性地堆砌技术栈。典型的配置包括一个8B参数的嵌入模型(如Qwen3-Embedding-8B或OpenAI embeddings),用于在摄入数据时向量化每个片段,并在搜索时处理用户查询;接着是一个托管的向量数据库,内存中常驻数百兆甚至数吉字节的FP32/HNSW索引;最后还要加上一个8B参数的交叉编码器重排序模型(如Cohere Rerank)来清洗候选结果。

这种架构意味着每次查询都要经历三次网络跳转,文档变更时需要持续维护向量索引,还要支付多家供应商叠加推理费用。这被称为“嵌入税”。

其实有一种更简单的架构,能在延迟和成本大幅降低的同时,达到甚至超越密集检索的质量:使用简单的BM25(基于SQLite FTS5或Postgres FTS)进行亚毫秒级的候选检索,再配合Seb进行校准后的单次语义判断。

Seb不需要自回归的思维链生成,也不依赖沉重的交叉编码器服务器。它能在一次前向传播中评估多达10个类型的规则问题,返回校准后的概率分布,每百万输入令牌的成本仅为0.021美元,且输出令牌免费。

圣经 verses RAG 基准测试:简单方案 vs 重型方案

为了验证这一假设,我们在一个对措辞精确性、古语词汇和细微实体区分要求极高的语料库上进行了测试:31,102节钦定版(KJV)圣经经文。

测试分为两个工作负载:一是160个圣经知识问答查询,测试能否从结构化记录中找到确切支持并准确回答;二是直接对31,102节原始经文进行索引和搜索,没有任何预总结。

零成本即时索引 vs 8B嵌入税

在回答任何查询之前,先看看索引这31,102节经文(约105万令牌)需要什么。

使用简单的SQLite FTS5建立BM25索引,墙钟时间仅需77.0毫秒,CPU时间72.3毫秒,嵌入API令牌消耗为0,成本为0美元。索引占用只是轻量级的磁盘SQLite表,每月基础设施成本为0美元,因为可以使用嵌入式SQLite或现有的Postgres。第一阶段查找延迟中位数为0.64毫秒。

相比之下,使用Qwen3-Embedding-8B生成4096维向量并存入向量数据库,需要数分钟的批量GPU或API嵌入调用,消耗约105万输入令牌。原始FP32向量加上HNSW图约占510MB内存。每月托管向量数据库Pod的费用在25到70美元以上。第一阶段查找延迟通常在80到120毫秒之间,包括8B查询嵌入API调用和向量近似最近邻搜索。

160个圣经问答查询的对决

在160个问题基准测试中,原始SQLite BM25仅靠关键词匹配,只有58.8%的概率将正确记录排在第一位。这意味着 naive 的顶部1关键词查找在超过40%的问题上会失败。但是,BM25在100%的查询中都能将真实记录放在前5名,耗时仅0.012毫秒。

这说明你不需要8B嵌入模型来找候选者,你只需要一个快速、校准过的法官来阅读这5个检索到的候选者并选出正确的那个。

单独使用Simple SQLite BM25,顶部1准确率为58.8%,查询延迟中位数0.012毫秒,成本为0。而使用Qwen3-Embedding-8B加向量数据库再加Qwen3-Reranker-8B的API估算方案,虽然能达到100%的顶部1准确率,但查询延迟中位数估计在280到390毫秒之间,每1000次查询的成本在0.060到0.200美元之间,还需额外支付向量数据库费用。

引入Seb后,Simple SQLite BM25加Seb方案同样达到了100%的顶部1准确率。查询延迟中位数为46.9毫秒(基于Seb服务器报告的时间),每1000次查询的成本仅为0.00396美元。不需要向量数据库。

重排序原始KJV圣经经文

当直接搜索31,102节原始钦定版经文时,17世纪的古语表达如“shew”、“begat”与现代问题碰撞,情况变得复杂。

在52个未词干化的BM25前五命中包含指定KJV经文的查询中,仅靠BM25将确切经文排在第一位的概率只有48.1%。加入Seb后,通过单次调用评估5个候选经文,将排名第一的准确率提升到了80.8%,相对提升了68%。这一过程的中位服务器时间为44.5毫秒,每1000次查询的成本为0.0155美元。

案例研究:WhatsDo 如何从传统检索迁移到 Seb

基准测试是一回事,生产环境搜索必须应对混乱的真实世界查询。WhatsDo 是一个提供餐厅、咖啡馆、酒吧、酒店、健身工作室、水疗中心和公园本地发现及预订服务的平台。

迁移前:关键词/标签检索加启发式评分的瓶颈

WhatsDo 原来的搜索管道分三个阶段:首先解析查询,提取关键词、类别标签、地理半径和硬过滤条件;然后通过PostgreSQL文本/标签加地理检索拉取候选场所;最后使用加权启发式评分器,根据标签重叠、文本匹配、星级评分、评论数量和距离的手动调整混合值对候选者进行排名。

对于简单的单意图查询,如“布鲁克林的披萨”,启发式方法效果尚可。但对于多约束查询,偶然的标签重叠会破坏排名质量。

例如,搜索“适合工作的安静户外座位咖啡馆”时,一家拥有次要“咖啡馆”标签且评论数千条的喧闹深夜鸡尾酒酒吧可能排在真正的社区咖啡店前面。搜索“带健身房的商务酒店”时,独立的健身工作室和CrossFit健身房可能因为主要类别标签匹配“健身房”而排在酒店前面。搜索“参观公园”时,描述中提到附近公园的活动策划者和派对场地可能排在真正的公共公园前面。

在219个保留的生产评估查询中,传统管道的平均nDCG@5为0.852,端到端搜索延迟中位数为921毫秒。

迁移后:保留快速 lexical 检索,用批量 Seb 判断替换启发式

WhatsDo 没有围绕密集向量嵌入重新架构数据库,而是保留了快速的PostgreSQL文本/标签加地理候选检索,并在顶部候选列表上插入了一个批量的Seb选择重排序器。

他们将最多10个候选场所打包到一个seb_decide调用中。Seb返回所有10个候选者在“strong”、“partial”、“wrong”三个选项上的校准概率分布。WhatsDo 直接根据这些概率计算平滑的预期相关性得分:得分等于P(strong)加上0.5乘以P(partial)。

这些得分被缓存在Redis中,_ttl_为7天。如果发生超时,服务会故障开放,回退到底层的 lexical 顺序,不会丢弃用户的请求。

前后对比结果

迁移后,在相同的219个查询上,平均nDCG@5从0.852提升到了0.973。在具体查询胜负上,新方案赢得了142次,平局66次,仅输掉11次,赢率是输率的12.9倍。

延迟方面,Seb每10个场所批次的服务器时间中位数为153毫秒,相当于每个候选者15.3毫秒。相比之前921毫秒的全流程延迟,性能显著提升。

成本方面,每1000次搜索的Seb API成本为0.048美元,即每次搜索不到0.005美分,且无需支付向量数据库费用。

立即迁移你的 RAG 栈

你不需要手动重写搜索栈。如果你使用 Claude Code、Codex、Cursor 或 Antigravity 等编码代理,可以让它们审计当前的 RAG 管道,构建冻结的评估集,估算令牌成本,连接批量 Seb 调用,并生成前后对比基准报告。

迁移的核心步骤包括:审计当前管道,区分哪些阶段应保留在确定性代码或SQL/BM25中(如硬结构过滤和第一阶段 lexical 候选生成),哪些阶段应迁移到 Seb(如密集嵌入加交叉编码器重排序、LLM作为法官的路由器、易受偶然关键词陷阱影响的启发式评分器);构建冻结的评估 harness 以建立基线;估算 Seb 令牌体积、延迟和成本;实现带缓存和故障开放机制的批量 Seb 重排序;最后运行“之后”基准测试并渲染对比图表。

通过这种架构,你可以摆脱昂贵的向量数据库和复杂的嵌入管道,用更简单、更便宜、更快速的方式实现高质量的语义检索。