先这样答
排查的第一步不是改代码,是把链路拆开定位:这个 badcase 到底是「没检到」还是「检到了没答好」。做法是把每个查询的检索结果和最终答案都落下来,人工看一批。检回了正确段落但答案错了,问题在生成侧(提示词、模型、拼装方式);根本没检回正确段落,问题在检索侧。
检索侧再分四段查,按出问题的概率从高到低。
第一查切分。翻出来看看命中的块和没命中的正确段落:正确答案是不是被切断在两个块里?块里是不是混了无关主题?切分质量差是检索问题最常见的根因。第二查查询和文档的词汇错位。用户问「退款到不了账」,文档写的是「订单退款失败处理」,语义相近但用词不同,向量模型可能带不过去——处理办法是查询改写、加同义词表,或者干脆上关键词混合检索。第三查召回参数。top-k 是不是太小、相似度阈值是不是卡太死、过滤条件是不是把正确段落筛掉了。第四看重排。候选阶段其实有正确段落但被排到了后面,那就是重排模型的问题或者没上重排。
改任何一段之前,先把评测集建起来:几十条真实问题加标准答案,每改一处跑一遍召回指标,不然就是盲改。
面试官会怎么追问
- 检索和生成分开评,具体指标是什么? 检索看 Recall@k、MRR,人工标「哪一段是标准答案」;生成看忠实度和答案相关性,评审可以用强模型做裁判,抽检校准。
- 数据本身是旧的怎么办? 这不是检索的锅但表现一样:答案引用了过期文档。元数据里带更新时间,召回后做时效过滤,内容侧建版本管理。
- 线上怎么持续发现检索变差? 把用户追问率、点赞点踩、检索空结果率做成监控指标,突变就是报警信号。
回答的坑
- 上来就说「换更强的 Embedding 模型」。多数检索问题死在切分和词汇错位,先定位再开药。
- 没提评测集。任何「不准」都需要可复现的量化口径,这是工程和调参的分界线。
同系列的题
—— 本题完 ——