检索
大约 2 分钟
检索
什么时候用 RAG,而不是把文档塞进提示?
材料比窗口大、会更新、或需要指出出处时,用检索。回答前先取出相关片段,再让模型基于这些片段生成。检索是查询,增强是把结果放进上下文,生成才是最后一步。
全部塞进提示只在材料短、且每次都要用到时成立。否则既贵,又会因为上下文变长而更难找回关键句。
一条 RAG 链路怎么讲?
分两段。
准备:抽取原文,切成块,做成向量,写入可检索的库。文档可以先统一成 Markdown,减少格式差异。向量库存语义,图数据库可以另存实体关系,面试里点到「向量解决相似、图解决关系」即可。
查询:问题进来,检索 top-k,把片段和问题一起交给模型。生成时应能指回片段,而不是只给一段更流畅的话。
发展上也有三阶段,用来回答「你们的 RAG 是哪一代」:早期靠 BM25 这类词面匹配;后来用稠密向量做语义检索;现在把改写、混合检索、重排做成可插拔模块。
高级检索面试常问哪几个?
- 多查询扩展:同一个问题写成多种说法再检索,合并结果,避免用词不同就漏文档。
- 假设文档嵌入(HyDE):先让模型写一段假设答案,用这段去搜真文档。问题和文档一个是问句、一个是陈述,直接比向量会偏;假设答案更接近文档的说法。假设答案不必全对,术语和句式已经能把检索带过去。
- 怎么选:要召回就上多查询;专业语料再加 HyDE;延迟敏感就退回基础检索。合并时要去重,候选池要比最终 top-k 大。
检索错了,循环怎么发现?
看观察,不看模型的自信。空结果、片段和问题明显无关、引用对不上句子,都是失败观察,应该触发改写查询或换知识源,而不是把空检索说成「资料里没有」。
连续检索失败要停,把问题和已试过的查询交给人。不要在同一句问法上无限重试。