题目重点:把向量检索的质量和性能拆成切块、索引、混合召回、重排与离线线上评估,避免跨权限泄露。
题意与假设
这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。
- 训练版用于企业文档辅助检索,查询返回带来源的文档片段供 Copilot 回答;若实际是代码或网页搜索,切块与相关性需重新定义。
- 文档有 tenant/用户 ACL,检索结果在进入模型上下文前必须经过有效授权;权限变更有可测延迟上界。
- 质量目标同时包含相关性、答案可用性和引用准确性,性能看 p95 延迟与索引新鲜度。
解题路线
- 先建失败分类:零召回、语义误召、词面精确项丢失、过长/过短切块、权限过滤后空集、旧版本文档被引用;分别设 query-document 相关性与答案级评估集。
- 摄取时保留文档 ID、版本、ACL、段落层级和更新时间,按语义边界切块并按标题/邻接上下文补元数据;删除和权限变更能同步触发索引失效。
- 候选层并行词法 BM25 与向量 ANN,按校准后的分数或 rank 融合;专有名词/错误码往往需要精确匹配,不能一味提高 embedding 相似度。
- 在候选上先做可靠 ACL 过滤,必要时用授权感知索引减少过滤后空集;再做轻量/交叉编码器重排,控制 top-k 与 token 预算,保持来源引用和版本。
- 离线用 recall@k、MRR/nDCG、授权违规率及文档新鲜度评估;线上随机实验看用户采纳、任务成功、无答案率、p95 和成本,标注查询类型与权限复杂度。
- 性能优化可调分片、量化、索引参数、缓存与分层重排,但每次必须量召回损失;热门查询缓存 key 要含租户和权限上下文,不能共用私人结果。
手动走一遍
用户搜一段精确错误码,纯向量搜索可能返回概念相近但错误码不同的文档;词法分支可召回精确记录。另一文档向量非常相近却已撤销访问,必须在给模型上下文前排除。若 ACL 过滤后只有零条,系统应允许说明无授权结果,而非回退展示未授权片段。
规模与取舍
N 个向量、维度 d:精确扫描 O(Nd);ANN 的查询/构建成本依具体索引与参数,不能从题目断言固定复杂度。两阶段查询成本为召回+K 个候选重排,后者常主导模型延迟;索引存储约 O(Nd) 未计量化压缩。
易错点与追问
容易失分的边界
- 只看 embedding 相似度,忽略精确字符串和专有名词。
- 先取跨租户内容给重排/生成模型,再在最终答案表面过滤。
- 提高 ANN 速度却不量 recall@k 损失。
- 文档更新/撤权后缓存仍引用旧版本。
- 只有检索指标,没有答案引用正确性。
继续深挖
- ACL 变化频繁时如何避免索引重建造成授权滞后?
- 如何检测切块导致的跨段证据丢失?
- 长尾语言或新产品术语需要怎样更新 embedding?
- 当相关文档不存在时如何评估拒答质量?
