核心原理与技术架构
多路召回通过并行执行多个检索策略,覆盖不同语义维度(关键词、语义、多模态等),再通过融合算法(如 RRF、加权排名)生成最终结果,解决单一检索的 “漏检” 和 “错配” 问题。其技术架构包含三大模块:
- 多策略并行检索
- 稀疏检索:基于 BM25/TF-IDF 的关键词匹配,适合精准定位含特定术语的文档(如医疗指南中的 “胰岛素类似物”)。
- 稠密检索:通过 Embedding 模型(如 BERT、text-embedding-3-large)生成语义向量,支持跨模态关联(如 “红色运动鞋” 匹配 “crimson sneakers”)。
- 多模态检索:结合 CLIP 等模型处理图像、音频,例如通过 “白色耳机” 检索匹配的产品图片。
- 智能融合算法
- RRF(互惠排名融合):根据各路径排名位置计算综合得分,公式为:
其中,k= 60为默认平滑参数,N为检索路径数,ranki(d)为文档d在第i条路径中的排名。 - 加权排名:对各路径得分归一化后分配权重(如 BM25 占 40%,稠密向量占 60%),适用于需突出特定模态的场景(如电商优先展示销量高的商品)。
- RRF(互惠排名融合):根据各路径排名位置计算综合得分,公式为:
- 动态调优机制
- 粗排 - 精排流程:先通过轻量级模型(如 BM25)过滤低相关文档,再用精排模型(如 Sentence-BERT)重排序,降低计算成本。
- 衰减排名器:结合时间、距离等标量字段调整排名,例如新闻检索中优先展示近 3 天的内容。
Milvus 多模态混合检索实战
Milvus 作为高性能向量数据库,支持稀疏向量、稠密向量、多模态向量的混合检索,以下为典型实现步骤:
- 数据预处理与索引构建
- 文本处理:使用
RecursiveCharacterTextSplitter分块(chunk_size=500,overlap=50),结合 BM25 分词器(中文需配置zh_core_web_sm)生成稀疏向量,同时用 OpenAI Embeddings 生成稠密向量。 - 图像处理:通过 CLIP 模型将图像编码为 512 维向量,与文本向量存储在同一 Collection 的不同字段(如
image_dense和text_dense)。
- 文本处理:使用
- 多策略并行检索
from pymilvus import MilvusClient, Collection, SearchResult from langchain.embeddings import OpenAIEmbeddings from PIL import Image from sentence_transformers import CLIP # 初始化Milvus客户端 client = MilvusClient(uri="http://localhost:19530", token="user:pass") collection = Collection(client, "multimodal_products") # 文本检索(BM25+稠密向量) query_text = "白色耳机,安静舒适" sparse_search = { "vector_field_name": "text_sparse", "query": query_text, "params": {"drop_ratio_search": 0.2}, "top_k": 5 } dense_search = { "vector_field_name": "text_dense", "query_embeddings": OpenAIEmbeddings().embed_query(query_text), "params": {"nprobe": 10}, "top_k": 5 } # 图像检索(CLIP) image = Image.open("query_image.jpg") clip_model = CLIP("clip-ViT-B-32") image_embedding = clip_model.encode(image).tolist() image_search = { "vector_field_name": "image_dense", "query_embeddings": image_embedding, "params": {"nprobe": 10}, "top_k": 5 } # 执行多路召回 results = collection.search( data=[sparse_search, dense_search, image_search], output_fields=["product_id", "price"], rerank_config={ "reranker": "RRF", "params": {"k": 60} # 可根据场景调整 } )- 关键参数调优
- 稀疏检索(BM25):
drop_ratio_search:控制稀疏向量检索时的剪枝比例(0.2 表示保留前 20% 候选)。
- 稠密检索(HNSW):
nprobe:增加检索时访问的聚类中心数(10-20 可平衡速度与精度)。
- 图像检索(CLIP):
- 若图像向量维度与 CLIP 输出不一致,需通过 PCA 降维至 256 维以提升索引效率。
排名器
RRF Ranker(Reciprocal Rank Fusion,互易排名融合)
- 核心依据:各路召回结果的排名位置(rank),而非原始相似度分数。
- 公式:
- 优点:
- 无需调权重,开箱即用;
- 天然兼容异构得分(如 L2、IP、BM25、稀疏/稠密向量);
- 鲁棒性强,避免某一路异常分数主导结果。
- 适用场景:
- 多路召回同等重要;
- 稠密向量 + 稀疏向量混合检索;
- 快速原型验证或不确定权重分配时。
典型用例:文本语义搜索 + 关键词 BM25 检索的融合。
Weighted Ranker(加权排名器)
- 核心依据:各路召回的原始相似度分数,经归一化后加权求和。
- 公式(简化):
- 流程:
- 收集各路得分;
- 归一化到 [0,1](如用 arctan);
- 按预设权重加权(如 w₁=0.7, w₂=0.3);
- 合并排序。
- 优点:
- 可显式控制各模态重要性;
- 适合业务目标明确的场景。
- 缺点:
- 需要调参(权重 + 归一化方式);
- 若各路相似度度量不同(如 L2 vs IP),归一化不当会导致偏差。
- 适用场景:
- 某一模态明显更重要(如电商中图像 > 文本);
- 各路得分分布稳定且可比。
典型用例:图像检索(权重 0.6)+ 商品描述语义(权重 0.4)。
Boost Ranker(提升排名器,Milvus v2.6.2+起正式支持)
- 核心依据:标量元数据字段(如
publish_time,rating,price,click_count)。 - 机制:
- 不依赖向量相似度;
- 直接根据业务字段值提升或调整最终排名;
- 可实现“时间越新越靠前”“评分越高越优先”等逻辑。
- 优点:
- 引入业务上下文信号;
- 支持复杂规则组合(如时间衰减函数 + 热度加成)。
- 适用场景:
- 需要融合非向量特征(时效性、热度、距离、用户偏好等);
- 新闻、电商、推荐等强业务导向场景。
典型用例:
- 新闻搜索:
boost = exp(-0.01 * (now - publish_time)) - 商品推荐:
final_score = vector_score + 0.2 * log(rating + 1)
三者对比
排名器 | 依据 | 是否需要调参 | 处理异构得分 | 引入业务信号 | 典型用途 |
RRF Ranker | 排名位置 | 否(仅 k 可选) | 天然支持 | ❌ | 稠密+稀疏融合 |
Weighted Ranker | 原始分数 | 是(权重+归一化) | 需归一化 | ❌ | 模态重要性可控 |
Boost Ranker | 标量字段 | 是(定义 boost 规则) | 支持(独立于向量) | ✅ | 时效/热度/评分等 |
典型应用场景与策略组合
领域 | 核心需求 | 多路召回策略 | Milvus 关键配置 |
医疗健康 | 权威指南 + 相似病例 + 最新文献,规避过时信息 | 1. BM25 检索药典术语(如 “胰岛素类似物”) 2. 稠密向量匹配相似病例文本 3. 时间衰减检索近 5 年文献 | - 稀疏向量字段启用 BM25 分词器- 稠密向量字段使用 HNSW 索引(nprobe=15) - 添加 字段进行衰减排序 |
电子商务 | 商品属性匹配 + 语义关联 + 视觉特征 + 口碑参考 | 1. BM25 检索规格(如 “1TB 硬盘”) 2. 稠密向量匹配用户需求(如 “轻薄笔记本”) 3. 图像向量检索同款商品4. 销量字段降序排序 | - 稀疏向量字段启用 TF-IDF - 图像向量字段使用 IVF-PQ 索引(m=16) - 加权排名(BM25:30%,稠密:50%,图像:20%) |
法律实务 | 法条原文 + 司法解释 + 相似判例 + 地域时效性 | 1. 结构化检索法条编号(如 “刑法第 232 条”) 2. 稠密向量匹配案情描述 3. 地域过滤本地案例 4. 时间过滤现行法条 | - 稀疏向量字段启用倒排索引 - 添加 和 字段进行标量过滤 - RRF 融合(k=40) |
企业知识库 | 流程规范 + 历史案例 + 岗位适配,减少重复检索 | 1. 关键词检索流程标题(如 “报销流程”) 2. 稠密向量匹配问题描述 3. 用户画像字段(如 “部门 = 销售”)过滤 | - 稀疏向量字段启用中文分词器(jieba) - 添加 字段进行联合过滤 - 衰减排名器(访问频次降序) |
性能优化与工程实践
- 索引选择与压缩
- 大规模数据(>100 万向量):使用 IVF-PQ 索引(m=16,nlist=1024),压缩率达 16 倍,内存占用降低 80%。
- 高维多模态:图像向量采用 HNSW 索引(ef=100,M=32),文本向量采用 HNSW+PQ 混合索引。
- 实时性与扩展性
- 流式数据:使用 Milvus 的 CDC(Change Data Capture)功能,实时同步更新至向量索引,支持毫秒级延迟。
- 分布式部署:通过 Proxy 节点实现负载均衡,支持水平扩展至 100 + 节点,处理亿级向量检索。
- 成本控制
- 冷热分离:将高频访问向量存储在 SSD,低频向量迁移至 HDD,结合 Milvus 的 Tiered Storage 功能降低存储成本。
- 缓存策略:对 TOP 1% 的热门查询结果进行内存缓存,减少重复检索压力。
阶段 | 建议 |
召回路数 | 控制在 2–4 路,避免 I/O 和计算爆炸;优先选择正交性高的路径(如文本+图像+行为) |
粗排 | 对每路结果用简单规则(如 BM25 阈值、向量相似度 > 0.6)快速过滤 |
精排 | 使用 RRF 或 WeightedRanker 融合;若需更高精度,可引入 Cross-Encoder 重排 |
成本控制 | 在 Milvus 中,多路 ANN 是并行执行的,但总 |
选型与调优建议
- 小规模场景(<10 万向量):优先稠密向量 + BM25,无需复杂索引。
- 中大规模场景(10 万 - 1 亿向量):采用 HNSW+PQ 混合索引,结合 RRF 融合。
- 超大规模场景(>1 亿向量):使用 IVF-PQ+DiskANN,部署分布式集群。
总结
多路召回通过 “多路径检索 + 智能融合” 显著提升 RAG 系统的召回率和准确性,其核心优势包括:
- 覆盖多维度语义:关键词、语义、多模态、时空属性等全方位匹配。
- 动态适配场景:不同领域可灵活组合策略(如医疗侧重专业数据库,电商侧重视觉与行为数据)。
- 工程化落地成熟:Milvus 等工具支持开箱即用的多模态检索与混合排序,降低开发门槛。