考察点
面渣逆袭(javabetter)AI 面试系列里,RAG 项目的连环追问是最密集的部分:「你在项目里担任什么角色」「技术难点是什么」「包装是你做的还是协助的」。这类问题的潜台词是验货——判断项目是你真做的还是简历上抄的。面试官看的不是答案本身,是细节的自洽性和你的边界感。
参考答案
面试官在验什么
RAG 项目烂大街之后,面试官默认简历有水分,拷打的本质是找不一致:说用了混合召回,问 BM25 分词器用的哪个、词典怎么维护,答不上来就是假的;说提升了召回率,问怎么测的、基线多少、提升几个点,没有数字就是假的。真做过的人细节是连贯的——每个决策都有当时的情境、试过的备选、踩过的坑。编的人只有结论没有过程。
所以准备的核心不是背答案,是把项目重新过一遍,把每个技术选型的「为什么」和「当时还试过什么」还原出来。
四件套准备法
1. 角色边界说清楚
「安装包是你整理的还是协助的」「镜像打包是谁负责」这类问题是陷阱题——夸大贡献被当场戳穿的风险远大于吹出来的收益。正确姿势:核心模块认领到底(「检索链路是我设计和实现的」),边缘工作如实说(「镜像打包是运维同事主导,我负责提供依赖清单和排查构建失败」)。面试官见过太多「全是我做的」的候选人,边界清晰反而可信。
2. 难点讲出层次
「技术难点是什么」别答「检索不准」这种废话。好的难点叙述有三层:现象(Bad Case 集中在型号类 query)、根因(向量检索对精确 token 不敏感)、解法与验证(加 BM25 混合召回,评测集 Recall@10 从 68% 提到 83%)。有数字、有取舍、有验证闭环,这段叙述天然抗追问——每个环节都是你亲身经历过的。
3. 关键数字背熟
文档量级、chunk 大小和 overlap、Top-K、评测集规模、优化前后指标、延迟 P99。这些数字面试官随口一问,你卡壳就是减分。数字不需要大,需要自洽——百万文档说「单机 Qdrant」合理,说「FAISS 内存索引」就要准备好解释内存怎么扛。
4. 每个选型准备一个「备胎」
用 Qdrant 就要能答「为什么不用 Milvus/pgvector」;用 bge 就要能答「为什么不用 OpenAI embedding」;chunk 设 500 就要能答「试过 256 和 1024 吗」。选型题的正确结构永远是:当时约束是什么 → 备选是什么 → 为什么选这个。说不出来备选,说明选型是抄的教程默认配置。
被问倒时怎么办
一定会遇到不会的,处理方式分三档:
- 知道方向没细节:「这块我了解原理但没实操过——HNSW 的 ef 参数我知道调大提升召回率,但当时量级没到需要调的程度,默认值就够用。」坦诚但展示认知框架。
- 完全不会:「这个没接触过,不过我猜它的动机是解决 XX,对吗?」把不知道变成一次技术讨论,比硬编强十倍。面试官对硬编的容忍度是零。
- 被质疑方案:别防御性嘴硬。先承认方案的适用边界(「这个方案确实在千万级会有问题」),再给当时的约束(「但我们量级是几十万,这个权衡当时是合理的」)。知道方案边界的人比坚持方案完美的人可信得多。
反向利用拷打
高水平候选人会把拷打变成展示机会:回答任何问题时主动留钩子。「我们用 RRF 做融合——这里当时还纠结过要不要上 Learning-to-Rank」——面试官大概率顺着问,而这个问题你恰好准备过。整场面试的节奏就这样从「被审问」变成「你导览」。前提是钩子后面真有货,否则就是给自己挖坑。
可能的追问
Q:项目里你最大的失误是什么? 准备一个真实的小失误+修复:「初版 chunk 一刀切 500 字,表格全切碎了,上线第一周政策类问题错误率很高,后来改成按结构切分+表格整存。」有失误的人比完美的人可信。
Q:如果重做这个项目,你会改什么? 展现认知升级:「会早上评测集——我们是做了三轮优化后才补的评测,前两轮的『提升』其实没有数据支撑,纯属运气没翻车。」
Q:你们为什么不用 LangChain/LlamaIndex? 能答「框架太重,我们只需要检索链路,自己写两百行可控性更好」或「用了,但索引和检索层是自己实现的」都行,可怕的是答「没了解过」——用不用是选型,知不知道视野。