标准回答
需求与指标
让用户用自然语言找到语义相关的内容,而非仅字面匹配。核心指标:Recall@K、NDCG/MRR(排序质量)、查询延迟、索引更新时延。
整体架构
离线侧把文档过 Embedding 模型,写入向量库并建 ANN 索引(HNSW 或 IVF-PQ);在线侧把查询同样编码,做向量召回拿到候选集,可选并行跑 BM25 关键词召回,用 RRF 等方式融合,再用 cross-encoder rerank 精排出最终 Top-K。
关键模块
Embedding 选型决定召回上限,需与领域匹配;向量库(Qdrant/Milvus)负责 ANN、过滤与水平扩展;混合检索弥补纯向量在专有名词、ID、精确短语上的弱项;rerank 用更重的交互模型提升头部精度。
评估
构建带相关性标注的查询集,离线算 Recall@K、NDCG、MRR;线上看点击率、首条命中率,A/B 对比不同 Embedding 与 rerank 方案。
上线与监控
支持增量摄取与按 ID 更新/删除,保证索引与源数据一致;冷启动阶段无用户行为时靠内容相关性,后续接入点击行为优化排序;监控召回延迟、索引滞后与无结果率。
常见误区
⚠️ 常见踩坑
认为纯向量检索能包打天下——它对专有名词、编号、精确短语召回差,必须叠加 BM25 混合;以及忽略 rerank,仅靠 ANN 粗排会让头部相关性不足。
追问
追问 1:为什么要混合检索(向量 + BM25)?
向量擅长语义相似但对字面精确匹配(专有名词、型号、ID、稀有词)容易漏召回,BM25 关键词检索恰好相反。两路并行召回后用 RRF(倒数排名融合)或加权合并,既保语义泛化又保字面精确,召回覆盖面明显优于单路,是生产语义搜索的常见配置。
追问 2:向量库怎么选型?Qdrant 和 Milvus 区别?
按数据规模、过滤需求与运维成本选。Milvus 面向超大规模、分布式能力强、生态完整,适合亿级向量与高吞吐;Qdrant 轻量、带元数据过滤(payload filtering)友好、部署简单,适合中小规模与需要丰富过滤的场景。中小项目可先用 Qdrant 快速落地,规模上量再评估 Milvus。
追问 3:文档频繁更新如何保证索引一致性?
走增量管道:文档变更触发重新 Embedding,按文档 ID 在向量库做 upsert/delete,避免全量重建;HNSW 删除用 tombstone 标记并定期 compaction 回收;为向量带版本与时间戳,检索后校验是否过期;定期跑对账任务确保向量库与源库一致,防止索引漂移。
延伸学习
与本题相关的知识库文章、术语、工具与行业资讯。
🛠️ AI 工具