第20章:混合检索——关键词与向量召回协同

发布时间:2026/6/15 2:19:50
第20章:混合检索——关键词与向量召回协同
1. 项目背景某公司运维团队将 500+ 份故障处理手册导入知识库后,满怀期待地把它推到生产环境。第二天运维同学输入"MySQL Error 1062"查询主键冲突的解决方案,结果返回了《MySQL 安装指南》和《数据库备份方案》——完全没有匹配到正确的故障手册。运维同学不甘心,又搜"kubectl pod stuck terminating",返回的是 Kubernetes 架构概述和 Helm 使用教程。问题显而易见:纯向量检索擅长语义匹配,但不擅长精确匹配。三个典型盲区尤为突出:第一,精确匹配失败。错误码(1062、500、404)、命令名(kubectl、git rebase、curl -X POST)、配置项(max_connections、innodb_buffer_pool_size)这类查询的核心在于"一字不差地命中",而非"语义上近似"。向量模型会将"Error 1062"和"MySQL 常见错误"的向量拉到相近区域,但它不理解 1062 这个数字本身是不可模糊的标识符——相似的错误码 1061 和 1062 在向量空间中距离很近,在故障手册中却对应完全不同的解决方案。第二,专业术语歧义。“POD 重启"可能被 Embedding 模型理解为植物学领域的"荚果”(pod),而非 Kubernetes Pod;"kill -9 进程"的 -9 信号在向量中被稀释,检索结果可能召回"如何优雅关闭进程"之类语义接近但完全不相关的内容。在多义词场景下,向量检索的泛化能力反而成了干扰项。第三,稀有词丢失。