AI 工程师面试系统性失灵:停止考实现,开始考评测设计
我上个季度合作的一个团队连续拒绝了三名进入 AI 工程师流程的候选人。三个人都挂在了编程筛选环节 —— 就是那种让你在 35 分钟限时内实现一个滑动窗口去重器的题目。团队随后录用了通过该环节的候选人。四个月后,正是这位工程师交付了一项功能,其 eval(评估集)在 CI(持续集成)中得分高达 92%,但上线后的第二天,支持队列就爆满了。那个 eval 衡量的是与精选测试集的精确匹配。而生产环境的用户提问方式完全不同。招聘小组里没有人问过候选人他们会如何捕捉到这一差距。
这就是 Bug 的轮廓。面试流程筛选的是工作中价值最低的技能,却对最重要的技能视而不见。团队没有“判断力”面试轮次。他们只有编程轮、系统设计轮和行为面试轮,运行的还是 2021 年的那套循环 —— 那套为编写针对稳定库的确定性代码的工程师量身定制的流程。
2026 年 AI 工程师的日常工作与此几乎毫无共同点。工作由每周面对的十几次判断决定,而面试从未考察过这些:什么时候微调(fine-tuning)是错误答案?如 何编写一个不会被刷分的 eval?什么时候你对模型的输出足够信任,可以跳过人机协作(human-in-the-loop)?什么时候你该告诉利益相关者“我们不应该发布这个功能”?实现是成本最低的部分。在指标显示正确时,意识到系统其实是错误的 —— 这才是瓶颈。
面试针对的是错误的 Bug 分布
传统的软件面试考察两种技能:你是否能在严格限制下生成正确的代码,以及你是否能对大规模系统进行推理。两者依然有价值,但都不充分。AI 工程师产生的 Bug 聚集方式,与面试筛选的 Bug 完全不同。
确定性工程师的 Bug 源于心理模型的不完整 —— 差一错误(off-by-one errors)、遗漏的边缘情况、竞态条件。LeetCode 风格的筛选是这种技能的一个虽然伴随噪声但真实的代理指标,而系统设计轮则捕捉了架构层面的版本。AI 工程师产生的 Bug 则源于随机系统的不匹配 —— 一个在 eval 集上表现良好但在分布偏移(distribution shift)时失败的提示词(prompt),一个模型自信且错误地调用的工具,一个没人注意到的成本回归(因为请求数看起来正常,但 Token 数却翻了三倍)。
你无法通过测试第一类技能来筛选第二类技能。这些技能的重叠程度远低于面试流程所假设的水平。能在 35 分钟内解决滑动窗口去重问题的候选人,与能看着绿色的 CI eval 并问道“这是否衡量了用户实际遇到的失败模式?”的候选人之间并没有相关性。
