1. 从 Corrective RAG 到多模态检索
在第三章,我们学习了 Corrective RAG(CRAG),通过文档评分和托底机制来提升 RAG 系统的可靠性。CRAG 主要解决检索结果的质量验证问题,但在检索环节本身,传统 RAG 系统还存在一个根本性的问题:单一检索方式的盲区。
本章将解决这个问题:如何通过混合检索(Hybrid Search)结合多种检索方式,提升检索的召回率和精确度。
2. 为什么需要混合检索?
2.1 什么是混合检索?
混合检索(Hybrid Search)是一种结合向量检索、稀疏检索、全文检索三种模态,通过加权分数融合来提升检索效果的技术。它通过让不同检索方式互补,克服单一检索方式的盲区,从而提高召回率和精确度。
2.2 单一检索方式的问题
我们先来看看单靠一种检索方式会遇到什么问题。
向量检索的盲区:
向量检索擅长理解语义和概念,但它会遗漏精确的关键词。比如你搜索 “GAAP” 或 “Q3 2023” 这样的专有名词,向量检索可能会返回一些概念相似但实际不相关的结果。还有一个问题是过度泛化——它可能返回概念上相似,但实际上答非所问的文档。
关键词检索的盲区:
关键词检索擅长匹配精确的术语,但它不理解语义。比如你搜索 “machine learning”,它找不到包含 “AI” 的文档;你搜索 “revenue”,它找不到包含 “earnings” 或 “income” 的内容。这就是语义盲区的问题。
问题的本质在于:向量检索会遗漏关键词,关键词检索会遗漏语义——每种方法都有自己的盲区。
2.3 混合检索:融合三种模态
混合检索的思路是:既然单一方法都有盲区,那就把它们组合起来。具体来说,混合检索结合了三种互补的检索方式:
三种检索方式各有侧重:
- Vector Search(向量检索) → 理解语义相似度
- Sparse Search (稀疏检索) → 匹配关键词和同义词
- Full-text Search (全文检索) → 精确短语匹配
2.4 Hybrid RAG vs Corrective RAG
混合检索和纠错机制解决的是不同阶段的问题:
| 对比维度 |
Hybrid RAG (本章) |
Corrective RAG (第三章) |
| 核心目标 |
Better Retrieval (更好的检索) |
Better Validation (更好的验证) |
| 实现方式 |
结合 3 种检索模态 |
文档相关性评分 |
| 关键机制 |
加权分数融合 |
查询重写 + 托底机制 |
| 作用阶段 |
检索阶段 |
检索后验证阶段 |
| Agent 作用 |
选择检索策略 |
评估质量 + 触发托底 |
这两种技术可以完美配合:用混合检索提升检索质量,再用 Corrective RAG 进行质量验证。
3. 三种检索模态详解
理解了混合检索的必要性后,我们来深入了解构成混合检索的三种核心模态。
3.1 向量检索(Vector Search)
向量检索通过将文本转换为稠密向量(Dense Embeddings,通常 768-1536 维),然后使用余弦相似度测量向量之间的角度,返回语义上最相似的文档。
它的优势在于理解概念和语义关系,能够处理释义和同义表达。但它无法精确匹配特定术语,比如 “GAAP” 或 “SKU-12345” 这样的专有名词。
适用场景:概念性查询,比如 “What causes inflation?”
3.2 稀疏检索(Sparse Search)
稀疏检索使用 TF-IDF(词频-逆文档频率)提取关键词,可以在词汇表内扩展同义词,基于关键词权重进行匹配(不是精确字符串匹配)。
TF-IDF 的原理是:Term Frequency × Inverse Document Frequency——在整个文档集中越罕见的词获得越高的权重。
稀疏检索的优势是能够匹配相关术语,比如 revenue、earnings、income 这些同义词,而且不需要嵌入模型。但它受词汇表维度限制,难以处理稀有专有名词。
典型应用场景:工具选择(Tool Selection)
稀疏检索在混合检索中发挥关键词匹配作用,特别在工具选择、术语敏感查询(如专有名词、技术缩写)中表现优异。
3.3 全文检索(Full-text Search)
全文检索通过构建带分词的倒排索引(Inverted Index),应用 BM25 评分算法(改进的 TF-IDF,加入了文档长度归一化),返回精确短语匹配的结果。
BM25 是 TF-IDF 的改进版本,它加入了文档长度归一化,避免长文档获得不公平的高分。
全文检索的优势是能够精确匹配短语(如 “Item 1A Risk Factors”),处理稀有专有名词,支持精确章节定位。但它无法处理拼写错误或变体,也不理解语义关系。
适用场景:精确章节查找,比如 “查找第 10-K 报告的风险因素章节”
3.4 三种模态的选择
没有单一模态是最好的,关键是根据查询模式组合使用:
| 检索模态 |
最适合的查询类型 |
示例查询 |
核心优势 |
| 向量检索 |
概念性查询,需要语义理解 |
“What are Nike’s financial risks?” |
语义理解 |
| 稀疏检索 |
同义词感知的关键词匹配 |
“Nike earnings 2023” |
关键词泛化 |
| 全文检索 |
精确短语查询,章节名称 |
“Item 1A Risk Factors” |
精确匹配 |
4. seekdb:AI 原生的搜索数据库
4.1 seekdb 是什么?
seekdb 是 OceanBase 推出的 AI 原生搜索数据库,它将向量存储、关系数据、全文搜索整合到一个统一的平台中。传统方案需要使用专门的向量数据库,会带来额外的运维成本和系统复杂度,seekdb 通过统一的多模型引擎解决了这个问题。
4.2 seekdb 的核心优势
4.3 为什么选择 seekdb 实现混合检索?
- 单次查询就能调用 3 种模态,无需调用外部服务
- 原生加权融合,内置 RRF 和线性组合算法
- 自动索引同步,向量、稀疏、BM25 索引自动维护
- MySQL 协议,兼容现有工具和驱动
- 可以无缝迁移到 OceanBase 集群
5. 实战:实现混合检索
5.1 准备环境:
[code]import os
from dotenv import load_dotenv
# Load environment variables
load_dotenv("../.env")
# Verify configuration
print("✅ Configuration loaded:")
print(f" 来源:程序园用户自行投稿发布,如果侵权,请联系站长删除 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |