AI-native代码评审评估:用Pull Request替代算法题,重新定义工程招聘
第一次听到“Merge”这个词多数工程师脑袋里蹦出来的不是某个招聘产品而是 Git 里那个让人又爱又恨的 merge 操作。你可能刚刚搜过“idea 中如何回退 merge 操作”也可能和同事争论过git merge --continue时能不能顺手忽略 lint 报错甚至处理过merge with strategy ort failed这种让人摸不着头脑的分支合并异常。这些搜索记录拼在一起就是普通工程师的一天。但这次要聊的 Merge不是代码合并工具而是一个 AI-native 的代码评审评估产品目标场景是工程招聘。Merge 要做的事情简单说是让候选人不再做算法题而是去评审一段真实 Pull RequestAI 再根据候选人写出的评审意见评估其工程能力。这个切入点看似简单背后其实是招聘评估思路的一次重要转变从检验“候选人会不会写代码”转向检验“候选人怎么看懂别人的代码”。后者比前者更接近日常工程协作的本质。这个方向值得认真聊一聊。因为它不只是多了一个招聘工具而是把“代码评审”这种过去完全依赖面试官主观判断的能力第一次变成了结构化的评估信号。1. 先把概念理清Merge 不是代码合并而是“用代码评审来评估工程师”1.1 “AI-native”不是噱头它改变了评估对象的粒度先拆解“AI-native code review assessments”这个短语。很多人一看到“AI-native”第一反应是“产品里加了 AI”。但 AI-native 和“传统流程 AI 辅助”完全不是一回事。传统流程加 AI 的典型做法是候选人做完一套传统测试题AI 在后台给表达能力、题目完成度打一个辅助分。AI 只是评估链路末端的一个附加工具它评估的仍然是“候选人的最终输出是否接近标准答案”。而 Merge 这类产品从任务设计开始就是 AI 原生的任务是代码评审输出是开放式的自然语言评审意见评估对象不是“候选人和标准答案的匹配度”而是候选人在一个模糊工程上下文里做出的判断AI 要理解 diff、理解 PR 目标、理解候选人的评论是否切中要害、是否能区分关键问题和非关键问题。为什么这个场景只有 AI-native 才能做因为代码评审意见没有标准答案。候选人可能指出性能问题、安全问题、边界条件、接口兼容性、可读性问题这些答案都可能是对的也可能同时出现。传统自动化评分根本无法给开放式评审意见打分但大语言模型擅长理解语义、引用代码上下文、权衡多个风险点。所以 AI-native 改变的不是“打分自动化”而是让“评估开放式工程判断力”这件事第一次变得可行。1.2 从“看候选人写了什么”到“看候选人怎么看待别人的代码”传统编程面试的信号非常单一一段隔离的代码、一个明确的问题目标评估的是“候选人能否在无上下文依赖的环境下用程序解决一个定义良好的问题”。但真实工程恰恰相反。工程师的大量工作不是从零写代码而是在已有代码库里读代码、理解改动意图、判断风险、提出反馈。一个工程师代码写得好不好很多时候要看他在别人代码面前能不能做出正确判断。Merge 这类工具把后一种信号变成了面试任务给候选人一个包含代码库上下文的 PR让候选人输出评审意见。然后 AI 从多个维度评估这些意见的质量。这个变化真正影响的是评估视角以前候选人是一个“答案生产器”面试官看产出现在候选人是一个“工程判断器”面试官和 AI 一起看判断过程。哪种信号更贴近真实工作答案已经很明显了。2. 为什么代码评审比手写算法题更接近真实的工程能力2.1 日常工作流里的高频动作恰恰是面试里最容易被忽略的一个后端工程师日常工作的一天大概率是下面这个样子拉取最新代码看同事的 MR/PR diff理解一次接口变更会影响哪些调用方在 review 里指出一个隐藏的边界问题回复别人的 review 评论处理一次 merge 冲突在git merge --continue之前重新跑一遍测试可能还要检查两个分支合并后会不会出现回归。可以发现这里真正高频出现的不是“设计一个算法”而是“理解已有代码上下文”和“判断改动风险”。但传统面试几乎不考这两项。算法题面试的是在封闭环境里进行问题抽象代码评审面试考的是在开放环境里做工程判断。代码评审是这些环节里信息密度最高的一个。它同时要求读代码能力能在 diff 中快速定位真正的风险点领域知识知道这个技术栈里什么模式是合理的什么是坏的沟通能力能把自己发现的问题清晰有效地表达出来权衡能力知道哪些问题必须阻止合并哪些可以留到后续技术债处理。这也是为什么很多团队里“写代码最快”的人并不一定是“做评审最有价值”的人。代码评审考查的是复合能力而复合能力恰恰是最难在传统笔试里被看见的。2.2 代码评审评估的三个层次如果要把代码评审能力拆细我会分成三个层次第一层线索发现。候选人能否从 diff 里看出问题。比如一个循环里忘了处理空列表一个异步任务没有设置超时一个接口改了签名但没有更新上游调用。这一层考的是经验和代码敏感度。第二层严重性判断。候选人发现多个问题之后能不能区分“必须改”和“可以不改”。这个判断很依赖上下文。如果没有业务背景很容易把所有问题都当成 P0或者把所有问题都当成“小瑕疵”。第三层修复建议与沟通。候选人能说出“这里有问题”还不够能不能给出一个具体可执行的修复方向能不能用代码引用和逻辑推理来说服作者能不能避免用指责性语气这三个层次是递进关系。能发现线索的人可能很多但能判断优先级、并推动修复落地的人明显更少。这也是为什么代码评审任务比算法题更能区分工程师的真实水平。2.3 这类评估与传统编程面试并不是替代关系而是补充这里要补充一个判断不是每个岗位都适合用代码评审任务取代算法题。算法题依然有存在价值。它的价值在于用较低成本快速筛选数据结构和算法基础扎实的候选人。尤其是刚毕业、项目经验较少的候选人算法题几乎是唯一能拉开区分度的信号。但问题是当一个组织把算法题作为唯一核心评估手段时评估会严重偏向“在隔离条件下快速解决定义明确问题”的能力。而一个团队真正需要的是“在混乱的工程环境里持续做正确判断”的人。Merge 这类工具的价值在于把“工程判断力”补充进评估体系让评估从单维变成多维。用算法题看基础用代码评审看实战协作用系统设计看架构视野几种信号叠加才是一个更完整的候选人画像。3. 如果把这个思路落地好的评审评估应该怎么设计3.1 先定义“一次好的代码评审”长什么样一个组织在使用任何代码评审评估工具之前必须先有自己内部对“好评审”的定义。这件事很容易被忽略。很多团队拿到工具的第一反应是“快给我一个分数分布看这批候选人谁高谁低。”但如果没有内部标准工具给你一个 85 分你根本不知道这个 85 分意味着什么。它到底代表“发现了很多关键缺陷”还是“评论写得很有条理”我建议组织在使用 Merge 这类工具之前先做一件事让团队里 3 到 5 名高级工程师针对同一个 PR 分别写出自己认为的“高质量评审意见”。然后对比这些评审意见整理出团队共同认可的好评审标准。通常可以归纳成几个方向是否理解 PR 的目的和背景是否区分了关键问题与吹毛求疵是否考虑了边界条件、性能、安全性、可维护性是否给出了具体可执行的修复建议评论语气是否专业、能否推动协作。没有这个标准任何工具的评分都只是空中楼阁。3.2 候选人侧的任务设计给一个可评审的 PR 上下文代码评审任务不能只甩一段 diff。候选人没有产品历史背景没有团队内部约定没有和作者讨论的机会。如果上下文给得太少候选人评出来的更多是“信息差”而不是“能力差”。一个具备很强判断力的工程师面对一个完全不知道业务目标的 PR也只能靠猜。一个好的代码评审任务我建议至少包含三块PR 描述说明这次改动要解决什么问题代码 diff改动本身控制在一个中等规模比如 200 到 400 行最小上下文说明技术栈、关键约束、已有的模块约定。时间上45 到 90 分钟比较合理。太短候选人来不及深入思考太长又会带来明显的疲劳效应。最关键的是这个任务必须在有限的上下文里让候选人充分展示“推断能力”——也就是即使有些信息不全好的工程师会主动说明自己的假设而不是简单说“这个我看不懂”。3.3 评估侧的五维度量框架如果让我设计一个代码评审评估框架我会用五个维度而不是一个总分。评估维度考察内容高分段表现问题发现能否定位 diff 中的关键缺陷明确指出 2-3 个核心风险而不是只提代码风格严重性分级能否区分 P0 / P1 / P2能说明每个问题的触发条件和影响范围修复建议建议是否具体、可落地给出修改方向能指出会影响哪些调用方沟通质量表达是否清晰、有依据评论有代码引用解释推理过程语气专业边界权衡能否意识到“什么值得改”能区分业务 bug 和技术债务不会为了改而改这五个维度覆盖了代码评审能力的核心。工具可以在每个维度上给分但组织的人力判断仍应在关键环节介入。五维框架不是评分公式而是共同语言——让面试官和 AI 都能用同一套标准理解候选人的表现。3.4 从单次评分到多轮信号如何避免一次评审定生死一次代码评审意见很容易受候选人当天状态、任务熟悉度、语言表达习惯影响。一个技术很强的候选人可能因为不熟悉某种代码风格在 30 分钟里只写出了 3 条评论而且没有覆盖到核心缺陷。另一个候选人可能非常熟悉代码评审话术写得洋洋洒洒但真正切中要害的没有几条。所以更稳妥的用法是把代码评审作为多个评估信号之一而不是唯一定论。具体建议是在面试流程中安排一次代码评审任务同时与一轮结构化技术面做交叉验证。如果代码评审得分很高但技术面表现很弱要警惕候选人可能只是“评审话术熟练”。反过来如果技术面很强但评审得分低要看候选人是缺乏评审经验还是确实没有读懂代码上下文。招聘本质上是一个信号累积过程。单一工具给出的只是“一个维度的信号”真正可靠的是多个维度交叉之后的判断。4. 组织使用 Merge 这类工具时最容易忽略的几个坑4.1 没有先校准“好评审”的标准就上自动评分这是最大的坑。资深的工程师都懂同一段代码不同团队对“要不要改”的看法完全不同。工具给出的评分背后其实是一套隐含的“好评审”假设。如果这套假设和你的团队文化不一致评分就可能离谱。比如有的团队极度看重 bug 发现率认为不指出空指针问题的评审就是不合格。有的团队更看重可维护性和命名规范认为“能发现深层逻辑漏洞”不如“能阻止一个设计别扭的功能上线”重要。正确顺序应该是先让内部高级工程师分别评审同一个 PR形成内部参考答案或评分共识再用这个 PR 去测试工具的输出观察工具评分和内部判断的偏差偏差大的地方反过来校准团队自己的标准。不做这一步工具给出的高分和低分你都无法解读。4.2 把 AI 评分当作最终结论而不是评估信号AI-native 工具的评分本质上是模型概率输出不是事实。候选人如果熟悉代码评审话术可能会“说得漂亮但没抓住重点”反过来英语不是母语的候选人技术判断很准但表达比较吃力AI 评分天然会比较吃亏。这不是说 AI 评估就一定不准确而是说用 AI 评分做排序、做初筛是合理的把它当成最终录用决策的直接依据就危险了。更合理的用法是AI 评分用于第一轮初筛快速过滤明显不匹配的候选人进入下一轮的候选人依然需要人工抽查其评审意见原文AI 评分和人工判断出现较大冲突时以人工复核为准同时记录冲突原因。这个坑的本质是AI 能减少决策偏差但如果组织不做机制设计它也可能引入新的、隐藏的偏差。4.3 忽略候选人是否熟悉代码评审的格式与术语代码评审本身也有学习成本。在开源社区长期活跃的工程师天然熟悉 PR review 的话术、评论规范、严重性标记。而一直在内部代码库工作、很少参与跨团队评审的工程师可能技术能力很强写出来的 review 却像一封私信——没有引用代码行号没有明确说“需要修改”还是“建议讨论”。这个差异反映的不是工程能力而是“评审经验”。如果团队决定把“评审经验”作为筛选标准那就必须在 JD 里明确说明并且在任务里给一个评审示例。把候选人对评审格式的不熟悉误判为“工程判断力弱”是这个方向最容易犯的错误。4.4 没有建立与真实绩效之间的校准回路工具评分到底有没有效最终要看它能不能预测候选人的入职后表现。这个闭环很多团队不做。候选人在面试阶段评分很高入职后表现一般团队通常只会感慨“面试很难看准人”而不是回去复盘评分数据。我建议每季度做一次这种复盘上一季度录取候选人的代码评审评分分布这些候选人入职后的绩效评估和主管反馈评分与绩效之间的相关性不相关时先检查是工具问题、评分维度问题还是岗位实际需求已经变了。如果工具分数和真实绩效长期不相关不要把问题全部推给工具先重新审视团队内部的“好评审”标准是否与岗位实际需求错位。5. 完整排查链路候选人评审得分低应该按什么顺序找原因面试评估里最怕一种情况候选人得分低团队立刻得出结论“候选人能力不行”。但真实原因可能有很多层。我建议按下面这个顺序排查每次只查一层。5.1 先看任务上下文是否清晰候选人得分低先不要默认候选人能力不行。先回到任务本身PR 描述是否完整diff 是否包含足够背景一个不了解代码库的工程师能否只凭给定的上下文做出合理判断如果团队内部高级工程师做这个任务也觉得信息不够需要靠猜那问题大概率出在任务设计上。不要在任务本身有缺陷的情况下拿评分去衡量候选人。5.2 再看候选人是否识别了关键缺陷确认任务没问题之后再打开候选人的评审原文。重点看候选人有没有覆盖任务预设的核心缺陷如果完全没有覆盖再看候选人是真的没发现还是发现了但只说了一两句。有一种情况容易被工具误判候选人已经发现了核心问题但把它埋在长段落里语气也比较温和AI 可能把这句话当成次要意见。这类情况需要人工复核不能只依赖总分。5.3 然后看严重性判断和沟通质量如果候选人只提了拼写、命名、代码风格层面的问题说明候选人可能缺乏领域判断力——他看懂了代码但没有建立起“什么风险更重要”的优先级意识。如果候选人列出了问题但把 P2 说成 P0或者把真正的 P0 当作“建议优化”这说明“严重性分级”这个维度需要重点考察。这一步往往能区分是能力问题还是只是第一次接触这个代码栈。5.4 最后排查工具本身的问题经过前三层排查之后如果发现候选人评审质量并不差但工具评分偏低这时才需要考虑工具因素。要检查的点包括同一个候选人换一个 PR 任务评分会不会完全不同任务模板是否稳定是否方便横向比较工具评估维度是否与岗位匹配比如它是否过度看重“评论数量”而不是“评论质量”评分与人工判断出现大量偏差时是工具阈值问题还是评估维度问题这个排查顺序我一直建议团队记成一句话先查任务再查候选人的评审原文再查沟通表达最后才查工具。顺序反了很容易把工具的问题归因到候选人头上。6. 适用边界这类工具适合谁不适合谁6.1 适合中高阶工程师和协作密集岗位代码评审评估最接近中高阶工程师日常工作的核心任务判断代码演进方向、评估变更影响、推动代码质量。如果团队属于下面几类这类工具会非常有用中大型互联网团队代码评审文化已经成熟长期维护型产品团队新人需要频繁理解历史代码开源项目团队异步协作能力强是关键竞争力需要跨团队协作的平台型团队接口变更频繁、影响范围广。在这些场景下代码评审评估的信号强度和真实工作高度重合。6.2 不适合算法研究岗、纯业务新手和“标准答案型”岗位代码评审任务不是万能药。算法研究岗位更看重论文理解、模型设计、实验设计能力代码评审对这类岗位是弱信号。应届生和初级候选人可能还没有形成系统的代码评审经验用这个方向评估容易低估潜力。如果一个岗位本质上需要的是“在明确规则下快速产出标准答案”比如某些数据标注质检、规则引擎配置岗代码评审评估的意义也不大。所以在采用 Merge 之前团队要先回答一个问题这个岗位的日常工作里“评审别人代码并做出判断”到底占多少比重比重越高工具越有价值比重越低工具越可能成为噪音。6.3 长期看AI-native 招聘评估会改变什么招聘评估正在从“知识抽样”走向“工作样本测试”。知识抽样是问候选人“你知道什么”比如八股文、算法题、名词解释。工作样本测试是让候选人做一段真实的工作比如代码评审、写一份设计方案、排查一个线上问题。代码评审是工作样本测试的一种高信息密度形式。Merge 这类 AI-native 工具的意义是把“工作样本”的成本降下来了让组织可以用很小的批量成本获得一个过去需要资深面试官花很长时间才能得到的评估信号。未来这个方向会更完整。候选人的开发过程、评审意见、修改反馈、沟通记录都可能变成结构化评估数据。AI 会越来越擅长理解“一个工程师如何解决问题”而不仅仅是“他解决得对不对”。但这也意味着组织的评估标准、公平性和数据治理会成为新的瓶颈。工具评估能力越强组织对“什么才是好的工程判断”的定义越不能模糊。代码评审评估这个方向最有价值的不是“AI 能自动打分”而是它让一件过去只能凭面试官主观感受判断的事情变成了结构化的评估信号。Merge 这个名字起得挺有意思。它没有让人直接联想到“人才合并流程”倒是先让人联想到代码合并那堆破事——回退 merge、处理冲突、忽略 lint 报错、面对 unrelated histories 时的无奈。但从这个产品的定位来看它真正想合并的是“工程招聘”和“日常工程实践”这两条线。对组织来说问题从来不是要不要用 AI 工具而是你的团队到底认为什么才是好的代码评审。先把这件事想清楚再用工具事情才会对。