第一次听到“Merge”这个词,多数工程师脑袋里蹦出来的不是某个招聘产品,而是 Git 里那个让人又爱又恨的 merge 操作。你可能刚刚搜过“idea 中如何回退 merge 操作”,也可能和同事争论过git merge --continue时能不能顺手忽略 lint 报错,甚至处理过merge with strategy ort failed这种让人摸不着头脑的分支合并异常。这些搜索记录拼在一起,就是普通工程师的一天。
但这次要聊的 Merge,不是代码合并工具,而是一个 AI-native 的代码评审评估产品,目标场景是工程招聘。
Merge 要做的事情,简单说,是让候选人不再做算法题,而是去评审一段真实 Pull Request,AI 再根据候选人写出的评审意见评估其工程能力。这个切入点看似简单,背后其实是招聘评估思路的一次重要转变:从检验“候选人会不会写代码”,转向检验“候选人怎么看懂别人的代码”。后者比前者更接近日常工程协作的本质。
这个方向值得认真聊一聊。因为它不只是多了一个招聘工具,而是把“代码评审”这种过去完全依赖面试官主观判断的能力,第一次变成了结构化的评估信号。
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 工具,而是你的团队到底认为什么才是好的代码评审。先把这件事想清楚,再用工具,事情才会对。