跳到正文
GitHub Blog· Michelle Zhou·· 2 小时前精选AI 评分66

GitHub 发布开源基准 ReviewBench 用于评测 AI 代码审查

ReviewBench: An open benchmark for AI code review

AI 导读

GitHub 发布开源离线基准 ReviewBench,用于评测 AI 代码审查智能体,基准基于 1.039 亿 GitHub pull request 的分布建模,包含 19 种语言的 219 个公开 pull request。

推荐理由

原文给出基准的构建方法、指标设计和离线信号与线上实验的对照数据,读者可据此评估 AI 代码审查系统。

正文 · AI 翻译

Agentic 代码审查正在成为开发流程中不可或缺的一环。它帮助你检查 pull request、发现问题,并在代码发布之前判断哪些内容值得关注。

但现有 AI 审查者的质量可能难以衡量,你需要先了解一个审查者的优势,才能知道它是否能帮到你。有些审查者能发现更多问题,有些产生的噪音更少,有些更擅长捕捉关键问题,而另一些也会提出较小的改进建议。在你的工作流程中,你可能需要代码审查发挥不同的作用。

因此,理解审查者之间究竟如何比较就变得很重要:不同系统能发现什么、会遗漏什么,以及它们做出了哪些权衡。一个好的代码审查基准应该反映真实 pull request 的多样性,涵盖广泛的审查发现,并支持按严重程度、类别以及精确率-召回率偏好进行有意义的细分。对于构建代码审查 agent 的团队来说,该基准还应提供一个离线信号,可靠地追踪变更是否可能改善生产环境中的体验。现有基准往往在标签质量、覆盖范围以及它们对真实世界代码审查的代表性之间做出权衡,留下了一个空白,缺少一种严谨且可复现的评估方法将这些要素整合在一起。

我们构建了 ReviewBench,一个全新的代码审查离线基准,以填补这一空白,它今天就可以供你使用。它遵循 GitHub pull request 的语言、仓库大小和规模分布,以 GitHub 上超过 1 亿个真实 pull request 为模型。它使用多来源的黄金集和一致的评估标准,并已由资深工程师独立验证。同样重要的是,借助 ReviewBench,我们对 Copilot 代码审查(CCR)的离线评估能够更有效地预判生产实验的方向,让我们更有信心认为所测得的改进反映了对用户有意义的提升。

在这篇文章中,我们将介绍 ReviewBench 是如何构建的、它如何建立可靠的基准真相与评分,以及如何接入你自己的代码审查系统并提交结果。

本文中使用的术语定义

  • 基准:一种标准化评估,使用相同的评分方法,在一组共同的 pull request 上测试代码审查者。
  • 发现:代码审查过程中浮现的一个具体问题。
  • 黄金集:针对每个 pull request 经过验证的已知发现集合,用作评估审查者发现或遗漏了哪些内容的参考。
  • 精确率:审查者发现的问题中,有效问题所占的比例。精确率越高通常意味着噪音越少。
  • 召回率:在已知的有效问题中,审查者发现的比例。召回率越高意味着覆盖范围越广。
  • F1 分数:一个同等平衡精确率和召回率的单一分数。
  • Fβ 分数:F1 的一种变体,允许你根据自己的审查偏好,对精确率或召回率赋予更多权重。

ReviewBench 一览

1

我们构建了什么

一个面向 AI 代码审查 agent 的真实、全面的基准

103.9M

GitHub pull request

按语言、仓库大小和变更形态分析分布。

具有代表性的基准语料库

覆盖 19 种语言的 219 个公共 pull request,与 GitHub 整体分布保持一致,同时保留实质性审查案例。

多源黄金集

  • 人工评审员
  • 前沿大语言模型
  • 静态分析

结构化发现

每条发现都标注了严重程度和类别,从而实现用户定制化的切片。

严重程度

  • 严重
  • 中等
  • 低

类别

  • 正确性
  • 安全性
  • 可靠性
  • 可维护性
  • 测试
  • ......

评估指标

四项指标同时衡量已知问题和新发现的问题。

  • 有据精确率
  • 有据召回率
  • 增强精确率
  • 增强召回率

客观评估

客观地衡量改进并跨智能体进行比较。帮助用户选择最适合其需求的评审器。

2

我们如何保持其可信度

从评分标准到专家验证和生产检查的可审计链条

公开的评分标准

所有发现都遵循同一明确标准。

人工标注的开发集

资深工程师确立真实基准。

校准过的评分器

与人工判断保持一致。

统一标注

所有来源采用同一标准。

公开的一致性

对基准质量进行专家审计。

端到端可审计

96.6% 一致性

资深工程师在发布前独立标注了黄金真阳性。

可预示生产表现的离线信号

基准变化会与线上实验进行核对。

  • 改进往往会在线上体现
  • 回归也往往会在线上体现

ReviewBench 的工作原理

我们的基准围绕五项原则构建:

1. 有代表性的拉取请求,而非演示集

我们分析了 1.039 亿个 GitHub 拉取请求,以刻画代码审查工作负载的真实世界分布。ReviewBench 包含来自 187 个公开开源许可仓库的 219 个拉取请求,涵盖 19 种语言,其语言和仓库规模分布与 GitHub 整体高度吻合。完整的基准数据集已公开可用。

我们对这一分布做了一处刻意的调整:语言和仓库规模直接对应 GitHub,而拉取请求规模则向可审查的中间和尾部加权。这减少了微小、单文件更改的过度代表性,同时保留了更具实质性的多文件拉取请求,而审查质量在这些请求中最为重要。

语料库快照:

2. 广泛的真实基准发现,独立评判

没有任何单一评审者,无论是人类还是模型,能够识别拉取请求中所有值得发现的问题。为了构建更广泛、更可靠的真实基准发现黄金集,我们遵循三阶段流程:

  • 从多样来源收集候选发现。 我们从真实人工评审员、根据作者后续提交推断出的问题、确定性分析工具以及跨模型家族的多个前沿大语言模型中收集发现。
  • 对重叠发现进行语义去重。 我们合并识别同一底层问题的发现,在不允许各生产者之间的一致性人为夸大黄金集、也不使其依赖于任何单一来源盲区的前提下,扩大覆盖范围。
  • 在统一标准下验证发现。一项发现的来源并不决定其是否正确:只有真实、相关且非平凡的发现才算作真阳性。我们使用 Claude Sonnet 5 作为 LLM 评分器,对所有提交应用一致的评估标准。为保证透明度和可复现性,我们公开评估标准以及用于执行该标准的评判器。

3. 同时衡量已知问题和新发现问题的指标

大多数基准测试针对固定的黄金集报告精确率和召回率。ReviewBench 则在两个类别中报告六项指标:

  • 基于基准的精确率、召回率和 F1 分数仅使用现有的黄金集标签。它们提供严格的、同类可比的比较:在已知问题中,agent 找到了多少,其发现中有多大比例匹配已知问题?
  • 增强精确率、召回率和 F1 分数还会评估那些与黄金集中任何内容都不匹配的发现。评判器独立判断这些不匹配的发现是真阳性还是假阳性,从而使评审者因发现黄金集中任何 producer 都未揭示的有效问题而获得认可。

随着评审 agent 能力越来越强,这种区分变得更加重要。当系统发现其创建者未曾预料的问题时,固定的黄金集不可避免地会变得不完整。增强指标让 ReviewBench 能够认可这种行为,而不是自动对其惩罚。由于增强召回率会根据每个 agent 的发现扩大分母,我们以基于基准的召回率作为跨系统比较的主要指标,并将增强指标作为额外的单系统诊断指标。

4. 针对不同评审偏好的可配置评估

不存在单一普遍最优的评审体验。有些开发者可能只想关注关键问题,而另一些人也看重较低严重性、非破坏性的发现。有些人偏好更广的覆盖范围,而另一些人则优先考虑精确率和最小噪声。还有人可能有专门需求,例如以安全或隐私为重点的评审。

ReviewBench 允许按严重性和类别对结果进行细分,而精确率和召回率则反映不同的操作偏好。用户还可以调整 Fβ 分数中的 β,以在更广覆盖时更侧重召回率,或在更低噪声时更侧重精确率。随着这些偏好的变化,排行榜也会相应重新排名,帮助用户识别最符合其评审优先级的系统。

5. 经过内部审计且可复现评估

在发布前,我们邀请未参与构建基准数据集的资深工程师独立地从头重新标注每一条 ground-truth 发现。他们的真阳性/假阳性判断与 ReviewBench 的一致率为 96.6%。我们对每次评估中使用的基准数据集、评判器和匹配器进行版本管理,因此结果可以在相同基准配置下进行比较,并在基准变化时重新验证。我们还公开验证方法、一致性测量以及已知的有效性威胁,以便读者了解基准质量如何评估,以及不确定性仍然存在于何处。

探索 ReviewBench

ReviewBench 的研究预览版现已通过 ReviewBench 网站 提供,你可以在那里探索完整基准、比较代码评审 agent,并带来你自己的 agent 进行评估和迭代。

使用 ReviewBench,你可以:

  • 探索完整的基准数据集。完整的 ReviewBench 数据集已公开发布,包括 pull request、发现项、标签、严重程度和类别标注。这让你可以准确查看系统在什么数据上被评估,并复现基准测试结果。
  • 在排行榜上比较各系统。使用完整基准数据评估的代码审查智能体结果发布在一个公共排行榜上,可从整体性能、严重程度、类别以及不同精确率-召回率偏好等多个视角查看。
  • 接入你自己的智能体并不断爬坡优化。完整的基准数据集、评估方法、LLM 评判提示词、评判模型配置以及自助运行器均已公开,因此你可以评估自己的代码审查智能体,审视其优势与不足,并在相同的基准配置下迭代改进。

我们如何使用 ReviewBench

我们使用 ReviewBench 对 Copilot code review (CCR) 的连续迭代进行评估,从而获得一种一致的方式来衡量进展、发现回归并确定有前景的改动优先级。随着时间的推移,这帮助我们改进了产品。ReviewBench 最有价值的优势之一是,它能提前在离线阶段给出信号,预示产品改动在生产环境中的可能表现。在 A/B 测试之前用 ReviewBench 评估的实验,其离线变化方向与后来在生产环境中看到的结果始终一致。

最近的一次 lite-tier 实验为这一更普遍的模式提供了一个具体例子。我们引入了多模型集成审查,将多个独立的模型运行结果合并为一次审查,而不是依赖单次运行。ReviewBench 预测其精确率、召回率和评论数量都会更高,同时每次审查的成本更低。

为了对比离线与生产结果,我们使用相应的在线信号。已处理率(addressed rate)是我们在线的精确率对应指标,指 LLM 根据 diff、讨论串、反应、解决状态和审查后代码,判定 CCR 评论促使开发者做出相应代码更改的百分比。对于召回率,我们衡量仍需要多少额外人工审查。

在线 A/B 测试的方向与 ReviewBench 的预测一致:相对于生产对照组,已处理率(精确率)上升 8.0%,召回率上升 13.6%,评论数量上升 61%,而每次审查的成本下降 8.0%。

然而,单看评论数量并不能反映评论质量。更关键的发现与低严重程度的吹毛求疵意义完全不同。ReviewBench 的严重程度分级评估也捕捉到了这一点:它预测关键评论增加 227%,而在线结果为 262%,同时还预测到同样的整体转变,即更多中等程度评论、更少吹毛求疵。

这让我们在运行生产实验之前就能获得快速且可重复的信号。在线实验仍然是衡量用户影响的最终标准,但 ReviewBench 让我们更有信心判断哪些改动值得拿到生产环境中验证。

如何提交你自己的运行结果

  1. 使用 GitHub 登录 ReviewBench 网站。
  2. 注册你的智能体。提供容器镜像、你的配置以及你自己的模型密钥。评判模型由我们提供。
  3. 在测试集上试用。在包含 25 个 PR 的测试集上运行,可获得每个 PR 的详细信息,并在调整配置时反复运行。
  4. 进行最终运行。 准备好后,运行完整的 219 个拉取请求集(三轮),由与其他所有条目相同的评判器评分。
  5. 发布到排行榜。 在维护者审查并批准提交之前,你的分数保持私密。只有当分数超过该智能体当前的排行榜分数,或者这是该智能体首次进入排行榜时,分数才会发布到排行榜上。

我们邀请你探索 ReviewBench,评估你自己的系统,挑战我们的假设,并帮助我们改进这个基准。我们期待与研究人员和从业者合作,让代码审查评估更加开放、可靠和有用——最终帮助推动 AI 代码审查向前发展。

致谢

ReviewBench 是 GitHub 和 Microsoft 跨团队合作的成果。我们感谢参与构建它的研究人员和工程师:他们设计了方法论、筛选了拉取请求、构建了黄金集和评估流水线,并使这个基准成为任何人都可以运行的东西。

文章 ReviewBench:面向 AI 代码审查的开放基准 首次发表于 The GitHub Blog。

来源:GitHub Blog · github.blog