首页 / 文章

企业RAG的混合搜索:仅靠密集向量模型不够

精确的ID和稀有代码会破坏嵌入模型。企业级RAG需要采用混合搜索方式,让BM25与密集检索并行运行后再进行融合,以此应对真实的查询多样性。

发布者:REACTAPP.TOP阅读约 11 分钟2486 词

来源: Hybrid Search vs. Dense Retrieval: Why Enterprise RAG Needs Both

企业级检索:一个搜索框背后的诸多问题

若询问RAG是如何进行检索的,常会听到嵌入查询、最近邻算法、top-k等方法。这些都属于密集型检索方式。它在处理同义表述的问题时表现优异,但对于那些需要精确标识符、稀有代码或结构化查询的日常企业级请求,则会以高昂成本且可预测的方式失败。

业务场景的复杂性

涉及流程升级的问题需要语义匹配。“第14.3(b)条”要求精确检索,“XC-4421-B连接器规格”需要精准的记录信息,“错误0x8A4F”则需检测关键词是否存在。密集型检索能很好地处理第一类需求,但对其他类型处理效果较差。在企业级业务的高频请求下,仅依赖密集型检索已不再是边缘情况——而是常见的查询失败问题。

密集型检索的局限性

嵌入模型用于映射含义。那些罕见的内部代码、法规引用及股票代码往往位于训练不足的模型区域中。精确匹配查询会返回“语义相近”的噪声结果。即便在训练数据中相关领域对较少,词汇不匹配(如“加薪”与“薪酬调整”)依然会带来问题。高精度的事实查询也可能会找到错误的邻近子部分。

BM25的优势与局限

BM25注重有信息量的术语重叠,无论嵌入质量如何,它都能准确识别精确的词条和罕见字符串。但当查询与文档虽含义相近却没有共同词汇时——比如同义词、对话中的不同表达方式或较为模糊的指导类问题——它就会失效。

为何混合模型是默认选择

混合检索方式会同时使用密集检索和稀疏检索——理想情况下是并行进行——然后再对结果排名进行融合(RRF或加权合并)。密集检索用于处理同义表述,稀疏检索用于处理标识符,而融合机制则能弥补这两种检索方式的缺陷。先密集后稀疏的顺序处理方式会浪费延迟,应采用并行处理:

# Parallel retrieval - the right pattern
dense_results, sparse_results = await asyncio.gather(
    dense_retriever.search(query_embedding, top_k=50),
    sparse_retriever.search(query_text, top_k=50)
)
# NOT sequential - this wastes latency
dense_results = await dense_retriever.search(query_embedding, top_k=50)
sparse_results = await sparse_retriever.search(query_text, top_k=50)

全栈架构概要

AI层:查询理解(识别类似标识符的标记)、并行检索器、结果融合、可选的重排模块以及引用封装功能。

后端:基于FastAPI(或类似框架)的检索服务,具备超时控制、租户过滤功能,以及可在故障发生时独立关闭稀疏/密集检索的功能开关。

基础设施:采用双重索引——向量索引(HNSW/IVF)和倒排索引——在数据导入时保持同步;所有存储中的文档标识符均一致。

API:提供稳定的响应结构,包含用于调试的分数通道(dense_score、sparse_score、fused_score)。

前端:显示引用信息,对于辅助工具而言,还会高亮显示完全匹配的词元,以便智能体理解为何会出现相关结果。

评估

构建包含四种查询类型的测试套件:语义查询、精确ID查询、稀有词项查询以及事实查找查询。需分别为每种类型报告召回率@k和准确性。仅使用密集型评分的方法在语义查询场景下表现尚可,但在精确ID查询场景下会出现问题——切勿用平均值掩盖这些问题。

权衡取舍

混合型方法会消耗更多CPU/IO资源,且同步复杂度更高。不恰当的融合权重可能会使两种信号都变得模糊不清。操作人员必须监控倒排索引与向量存储之间的延迟情况。不过,对于拥有多种查询类型的企业而言,混合型方法的成本仍低于始终给出错误答案的情况。

架构设计要点

不要仅使用密集搜索方式,尽管教程中是这么做的。需识别那些包含大量标识符的查询。对检索器进行并行化处理。根据查询类型进行评估。在两个索引上都保留租户过滤条件。将融合权重视为乘积参数,并通过在线实验进行测试。

更严重的失败案例

有一个合规团队查询条款编号,却得到了来自相邻章节的冗长段落。信任的崩塌速度甚至超过了任何延迟服务级别协议违约的情况。另一个团队在日志中记录了错误代码,而密集搜索却返回“类似错误”的结果,导致工程师们参考错误的操作手册。此前仅使用稀疏搜索时,也曾让高管们因策略上的模糊问题而陷入困境。混合搜索方案则成为折中办法,使两个团队都能取得成功,同时无需开发两个独立的产品。

数据导入规范

分块处理时必须保留标识符——切勿将“0x8A4F”拆分到不同块中。需存储子句编号和部分ID的元数据,以便使用混合过滤与结构化过滤。在模型升级时重新嵌入数据,并从相同的规范文本中重建BM25,从而确保融合输入保持一致。

操作流程

在部署后若融合得分分布发生变化则发出警报。提供“调试检索”管理员视图。当用户抱怨“搜索功能很差”时,应在重写嵌入向量之前对查询进行分类——通常只需使用稀疏向量而非全新模型即可。

总结

企业级RAG系统既需要语义信息也需要标记信息。纯密集检索虽必不可少,但仅此不够。在各项服务与索引之间进行合理设计的混合搜索才是实用的默认方案,除非查询监控数据表明另有必要——而大多数情况下,在系统投入使用的第二周监控数据就已显示出问题。

不加花哨的密集检索机制

查询与文本块会被转化为向量;神经网络索引则会返回相似的向量。改写后的结果具有较高的稳定性,而嵌入空间未能有效学习的某些标记则存在系统性的缺陷。企业会不断创建这类标记——如产品编号、条款标识、内部服务名称等。

无过时感的稀疏检索机制

BM25并非“过时的搜索技术”,而是一种基于术语出现频率的精准策略。当用户的需求恰好以字符串形式存在时,这种策略就能发挥作用;但若需求属于概念层面,则会失效。混合使用多种算法则是更好的选择。

融合策略的选择

互反排名融合是一种较为理想的默认方案,因为它无需在不同引擎之间进行分数校准。而加权求和法则需要标准化的分数,并且在任一索引发生变化时都需要重新调整参数。建议先从互反排名融合开始,按类别进行测试,然后再针对那些需要精确匹配的场景尝试调整权重。

并行处理与延迟问题

同时运行密集型与稀疏型检索;为两者设定截止时间;若其中一种超时,应通过标志位返回另一种结果,而非让整个查询失败。调试工具中的产品说明可使用“部分检索”这一表述,但用户仍应能获得相关引用信息。

索引同步与删除

删除操作必须同时作用于两个存储系统。若存在延迟,就会出现矛盾结果——向量检索认为存在,稀疏检索则认为不存在,融合处理则会陷入混乱。应使用单一的导入流程,在同一个文档版本号下将数据写入两个存储系统。

安全与租户隔离

应在融合处理之前应用ACL过滤器,而非之后。若过滤方式不当,不仅会降低检索覆盖率,还可能因时间差异导致信息泄露。两种检索引擎都必须遵循相同的租户约束规则。

前端信任提示

对于稀疏型文本中的精确匹配项与密集型文本中的语义片段,应采用不同的处理方式。分析师需要掌握何时该信任哪种提示信息。这样的培训能够减少那些实际上源于用户体验问题的“RAG毫无用处”类反馈。

推广计划

仅针对纯对话型语料库,在开启特定标志后才提供密集型文本处理功能;对于混合型企业语料库,则默认采用混合处理方式。在一个季度内,按查询类型每周进行评估;当精确ID召回率下降时,应调整融合策略,而非更换整个向量供应商。

更多要点

混合搜索属于基础设施,而非查询DSL中的简单OR运算。需为两个索引、数据导入流程、融合测试以及调试工具预留预算。业务问题从来不是“向量与关键词之争”,而是“员工实际输入的各种查询类型”。应刻意满足这些多样化的需求。

能说服决策层的相关场景

场景一:由于密集型RAG会返回概念性文章,支持团队在每处理一个工单时需花费三分钟寻找错误代码;而混合型系统则会突出显示带有代码的操作手册段落,只需将此时间乘以工单数量即可计算投资回报率。

场景二:在实时谈判中,法务人员要求按编号查找特定条款;仅使用密集型系统的系统会因多次接近正确结果却仍无法准确找到而犹豫不决,而使用稀疏型系统的系统则能快速定位,从而保持谈判的推进势头。

场景三:人力资源聊天机器人虽能用密集型系统很好地回答政策相关的问题,但在查询徽章编号时却无法正常工作;而混合型系统则能同时处理这两类任务,无需将功能拆分为两个员工难以使用的独立应用。

降低风险的实施步骤

第1周:在样本语料库的现有向量旁添加BM25模型;按类别进行离线评估。第2周:实现与RRF的并行API,并处理影子流量。第3周:对比标记为“错误文档”的故障工单。第4周:为精确匹配率最高的生产租户提供默认混合模型;对于已被证明仅包含改写内容的语料库,保留纯密集向量作为备用方案。

分块与标识符完整性

在分块中保留代码标记、从句编号及SKU信息。添加复制这些标识符的元数据字段,以便进行结构化过滤。除非已运行OCR处理,否则对于关键标识符仅出现在图像中的文档,拒绝其导入。混合模型无法找回被导入过程破坏的信息。

重排器与融合

融合之后可选用交叉编码器,它对散文类查询的辅助效果优于精确匹配查询;切勿让重排器掩盖在标识符搜索中表现较好的稀疏结果。应根据查询类型来控制重排操作。

多语言及同义词说明

当模型支持时,密集型架构有助于实现跨语言意译;而稀疏型架构则需要为每种语言配备分析工具和同义词列表。混合架构通常会同时使用针对不同语言的分析工具以及多语言嵌入模型——需详细记录这种复杂性,以便故障排查人员能确定是哪个环节出了问题。

管理机制

检索方式的变更会影响合规性答案的生成。版本融合配置、索引构建以及嵌入模型都是相互关联的。在升级之前必须进行评估签名验证。查询相关指标应与答案准确性指标一同存储在同一控制面板中。

扩展架构检查清单

  • 双索引结构,单一数据导入版本
  • 带时间限制的并行检索
  • 基于类别的融合处理
  • 融合前的租户隔离
  • 带有通道评分的调试界面
  • 无法通过平均处理消除差异的评估片段
  • 删除/更新同步服务的服务水平目标
  • 针对“稀疏检索模式”和“向量检索模式”这两种降级状态的运行手册
  • 降级模式至关重要:如果向量存储出现故障,则仅提供稀疏检索结果并显示提示信息;如果BM25算法失效,则仅提供密集检索结果并显示提示信息。完全故障的情况应当极为罕见。无声的错误答案比提示信息更糟糕。

    总结陈词

    密集检索推动了RAG技术的发展。但在企业实际应用中,它的地位已从核心组件降为普通组成部分。稀疏检索则作为与之对等的方案出现,而非过时的遗留技术。混合搜索——即并行处理、数据融合并按类别进行评估——才是当企业在同一天下午既询问“这项政策的整体风格如何”,又询问“14.3(b)条具体内容是什么”时,仍能获得准确结果的解决方案。

    给从业者的附录式详细说明

    应将融合权重视为搜索平台工程师拥有的配置,而非笔记本中的神秘数字。当业务部门提出投诉时,先要求提供20个失败的查询,标注其类别,调整类别路由器后再考虑购买新的嵌入模型。许多所谓的“嵌入升级”其实只是对稀疏缺口的误判。

    需分别为密集型、稀疏型和融合合并模式单独统计p95延迟,错误率也应分开预算。一个健康的系统应具备互补的优势:稀疏型在处理标识符时表现最佳,密集型在处理同义表述时更优,而融合型则能在整体上占据优势。如果融合型在面对单一类型时都表现不佳,说明其合并逻辑存在问题。

    需对内容创作者进行培训:标识符应放在文本中,而不仅仅是文件名中。文件名很少会被纳入处理块中。那些将产品编号隐藏在图片中的创作者,会生成无法检索的事实,即便使用混合模型也无法挽救。

    最后,必须承认混合架构会增加运营负担。要么为此增加人手,要么将仅出现密集故障的情况视为产品决策的结果而非意外事故。向管理层如实汇报总比让只有高级用户才能察觉的质量问题持续存在要好。

    无需虚荣指标即可衡量成功

    如果评估集中语义查询占主导地位,整体@10召回率可能会掩盖针对精确ID查询所出现的严重问题。应根据实际业务流量比例来调整评分标准,或者始终公布四个具体数值。产品经理比那些只懂“平均倒数排名”的人更了解“子句查询成功率”。

    供应商与技术选型

    OpenSearch/Elasticsearch、Typesense或专门的稀疏向量引擎可提供BM25算法;Qdrant/Pinecone/pgvector则能实现密集向量处理。有些平台会在同一产品中同时提供这两种功能——在选定单一供应商之前,务必验证租户过滤机制与可解释性。如果采购策略发生变化,系统的可移植性就显得尤为重要。

    训练数据反馈

    当用户确认答案时,记录该内容来自哪个渠道。通过长期观察,可以了解不同租户的融合优先级。切勿盲目依赖点击噪声数据,而应要求用户明确对相关内容进行引用或点击。

    故障注入测试

    在测试环境中,清空稀疏向量索引并确认系统是否进入降级模式。损坏部分向量数据后,检查稀疏向量格式是否仍能支持标识符查询。这类测试应与代理系统中的检查点恢复测试一同进行——对于RAG产品而言,检索功能同样承担着重要任务。

    人员与流程

    应指定一名检索负责人,其有权拒绝“直接使用k值”的请求。未经融合审查就直接使用k值会增加上下文噪声并提升成本,应让其与负责从源头优化标识符规范的内容运营人员配合工作。

    一页总结

    当企业级RAG试图用单一检索理论解决所有类型的问题时,就会失败。密集型数据和稀疏型数据的问题表现各异;只有结合类别感知的融合技术及严谨的评估方法,才能匹配现实中的数据混合情况。应将索引构建、服务系统、API接口、用户界面提示以及降级模式整合为一个整体系统。如此,搜索框才不再只是演示工具,而会成为团队值得投入资源的核心基础设施。

    关于融合技术边缘案例的更多实践见解

    当两个引擎都返回强但互不相关的结果集时,可信任RRF的民主式合并机制后再进行核查。若两者都返回弱结果集,则应使用澄清界面而非向大语言模型输入无用信息。当稀疏算法仅返回一个完美匹配的标识时,可考虑跳过密集算法以降低延迟——仅为标识型查询开启该路径的特性标志。

    同义词列表有助于稀疏算法处理“car/automobile”这类词汇,但若没有对应所有者信息则毫无用处。对于受监管的词汇表,建议使用精心筛选的列表;而对于开放式的意译任务,则更适合使用密集算法。混合模式能让您将每种技术分配到其真正能解决的问题上,而非像企业日常工作中那样,在审计监督下、面对跨区域永不休止的工单队列中的真实用户,仍强制使用同一工具处理所有任务。

    用实际指标衡量成功,而非虚荣的平均值

    如果在评估集中语义查询占主导地位,整体@10召回率可能会掩盖精确ID查询时的严重问题。可根据实际业务流量比例对评分体系进行加权,或者始终显示四个数值。产品经理比那些不懂“平均倒数排名”概念的人更明白“子句查找成功率”的含义。

    供应商与技术选型

    OpenSearch/Elasticsearch、Typesense或专门的稀疏向量引擎可提供BM25算法;Qdrant/Pinecone/pgvector则能实现密集向量处理。有些平台会在同一产品中提供混合方案——在选定单一供应商之前,务必验证租户过滤功能及可解释性。如果采购策略发生变化,系统的可移植性就显得非常重要。

    训练数据反馈

    当用户接受答案时,需记录该答案对应的片段来自哪个渠道。随着时间推移,便可了解不同租户的融合优先级。不要盲目使用点击噪声数据,而应要求用户明确对相关片段进行引用点击或操作。

    故障注入

    在测试阶段,清空稀疏索引并确认系统已进入降级模式。损坏部分向量后,验证稀疏索引仍能处理标识符查询。这些测试与代理系统中的检查点恢复测试相辅相成——对于RAG产品而言,检索功能同样至关重要。

    人员与流程

    指定一名检索负责人,其有权拒绝“仅提高k值”这样的要求。未经融合审查就提升k值会增加上下文噪声并提高成本。应让该负责人与负责从源头保障标识符质量的内容运营人员配合工作。

    一页总结

    当企业级RAG试图用一种检索理论解决所有类型的问题时,就会失败。密集型与稀疏型的表现各异;采用混合模式,并结合类别感知的融合技术与审慎的评估方法,才能匹配现实中的数据组合情况。应将索引构建、服务功能、API接口、用户界面提示以及降级模式整合为一个整体系统。如此一来,搜索框就不再只是演示工具,而会成为人们值得投入资源的基础设施。

    关于融合场景中特殊情况的更多实践见解

    当两种检索引擎返回的结果虽都较强但彼此无关时,可依赖RRF的民主式合并机制后再进行核查。若两者返回的结果都很弱,则应通过界面引导用户进一步明确需求,而非向大语言模型输入无用信息。当稀疏型检索能找到一个完美的匹配项时,可以考虑跳过密集型检索以降低延迟——仅为标识符类型的查询开启该路径的开关功能。

    同义词列表在“汽车”相关词汇上较为匮乏,且缺乏维护者就会逐渐失效。对于有明确规范的词汇集,建议使用精心整理的列表;而对于开放式的意译场景,则更适合使用内容丰富的列表。混合式方法能让每种技术针对其实际要解决的问题来应用,而非像每天在审计环境下、面对从不休息的跨区域工单队列中等待的实际用户时,还非要用一把锤子去拧企业里的每一个螺丝。