这道题不要先报模型名,先说明语料和查询特征,再做检索选型。稠密检索擅长语义改写,但对编号、专有名词和精确数字可能不稳定;BM25 等稀疏检索正好相反,字面匹配强,却不擅长理解同义表达。两类查询都存在时,可以并行召回,再做融合。
融合方式常见的是 RRF 和线性加权。RRF 只使用结果名次,不要求两路分数同尺度,通常更容易建立基线;线性加权能表达业务偏好,但前提是先校准分数,并通过评测集确定权重。不能脱离数据直接断言某一种一定更好。
优化时应按链路定位问题。先检查文档解析和切块是否破坏语义,再看召回是否遗漏,之后才是融合和重排。Query Expansion、HyDE 或意图路由都有额外延迟和生成误差,不应该默认对所有请求开启。Cross-Encoder 只能改善已有候选的排序,不能救回根本没有召回的文档。
切块与元数据也是检索方案的一部分。标题、章节、表格位置、文档版本和权限标签如果在解析时丢失,后面换更强的 Embedding 也补不回来。多租户系统尤其要说明权限过滤发生在召回前还是召回后:召回后再过滤可能造成候选不足,也可能让不应访问的文档进入缓存或日志。增量更新还要验证旧向量删除、索引切换和查询缓存是否使用同一文档版本。
评测也要分层。召回阶段可以看 Recall@K,排序阶段根据单答案或多证据场景选择 MRR、NDCG,同时按专有名词、长问题、模糊问题等查询类型切片。线上还要记录引用正确性、无答案识别、P95 延迟、索引新鲜度和单次查询成本。只有指标定义、标注集和样本量都能解释,结果才可信。
消融实验要一次改变一个环节。例如先固定切块和召回候选,只比较有无重排;再固定重排,比较稠密、稀疏和混合召回。若同时修改 Embedding、chunk 大小和 Prompt,即使最终指标上升,也无法证明贡献来自哪里。还应保留效果变差的 query,说明方案的适用边界,而不是只展示平均分。
如果面试官要求结合项目,不要照搬一个现成故事。回答者需要补齐自己的文档类型、查询分布、原始基线、主要 bad case、方案取舍、评测方法和工程代价。没有做过消融或没有线上指标时直接说明,再给出下一步验证方案。这样既能讲清机制,也不会把教学示例包装成本人经历。