面试开始
你好,我看了你写的这个最小 RAG 循环 demo,代码结构清晰,我想深挖几个地方。
Q1:背景确认 你写这段代码的目的是什么?它能解决什么真实问题,局限性又在哪里?
📌 考察点:候选人是否理解自己写的是”教学 demo”还是”生产代码”,有没有工程意识。
Q2:核心能力 — Embedding 你用 embed() 把文本转成向量,能解释一下这个向量”代表”什么吗?为什么两段语义相近的文字,它们的向量方向会接近?
📌 考察点:对 Embedding 原理的理解深度,不是死记”高维向量表示语义”。
Q3:核心能力 — 检索 你用余弦相似度做检索。如果我问”RAG 最关键的是什么”,但知识库里某条文档用了完全不同的措辞表达同一意思,你的 retrieve() 能召回它吗?会失败的场景是什么?
📌 考察点:语义检索的局限性,Embedding 模型的 domain gap 问题。
Q4:项目深挖 — 分块注释 代码注释里写了”这 5 条文本已经是分好块的 chunk,真实场景里来自 PDF/Word/Wiki”。如果我给你一份 50 页的 PDF,你会怎么分块?chunk_size 和 overlap 你会怎么设?
📌 考察点:从 demo 到真实场景的工程能力,能否讲出 fixed-size / semantic / recursive 等策略的取舍。
Q5:项目深挖 — Prompt 设计 你的 build_prompt() 在 system 指令里说”仅根据参考资料回答,没有就说未提及”。如果检索召回了 2 条相关度一般的文档,模型会怎么表现?你怎么知道 RAG 的回答质量是好的?
📌 考察点:对 RAG 质量评估的理解——有没有接触过 RAGAS / 忠实度 / 相关性评分。
Q6:压力 / 反向题 你代码里 top_k=2 是写死的,没有任何评分阈值过滤。也就是说,就算召回的文档相似度只有 0.3,也会被塞进 prompt。这个设计有什么问题?你会怎么改?
📌 考察点:候选人能否识别自己代码里的缺陷,并给出合理的改进方案(threshold 过滤 / rerank)。
Q7:行为题 如果你要把这个 demo 改成支持公司内部知识库的真实 RAG 系统,你会从哪里开始,第一个要解决的工程问题是什么?
📌 考察点:从 demo 到生产的工程思维——持久化向量存储、增量更新、安全、延迟……考察候选人的优先级判断。