论文地址: https://arxiv.org/abs/2509.14856。

依旧,中文翻译拯救稀烂英语水平:

现有 Code Review 的三个主要缺陷

  • Task Fragmentation(任务碎片化):把 CR 拆成了单纯的代码生成或评论生成,忽略了“理解问题 -> 定位 -> 评论”的逻辑。
  • Context Poverty(上下文匮乏):只给代码片段,不给 PR 描述、Issue 和仓库层级的依赖信息。
  • Evaluation Narrowness(评估狭隘):还在用 BLEU 这种 NLP 指标,无法衡量建议是否提到了点子上,或者位置对不对。

补充:

Comprehensiveness-aware:全面性感知,强调 CR 必须包含 Repository-level仓库级的上下文信息。

BLUE: Bilingual Evaluation Understudy(双语评估替补),NLP最经典的一个评价指标。AI解释:“简单来说,它的作用是给机器生成的文本打分,衡量它和人类写的参考文本(Ground Truth)有多像。核心思想非常简单粗暴:机器写的句子中,有多少word在人类写的标准答案里出现过”

Heuristic Rules (启发式规则)

为了从海量 GitHub 数据中筛选出高质量的 Review 数据,作者设计了一套基于权重的打分规则:

High-impact Rules (高权重规则)

  • has_resolved_review_comments:如果一个 Commit 确实解决了 Reviewer 提出的问题,说明这是一次有效的交互。
  • exclude_merge_commit:排除掉 Merge 操作产生的 Commit,因为它们通常不包含实质性代码逻辑变更。

Medium-impact Rules (中权重规则)

  • conventional_commit:优先选择遵循常规提交规范(如 type(scope): description)的 Commit,这类项目通常更加规范。
  • reasonable_commit_size:Commit 大小要适中(理想范围:修改 10-200 行),太小(如只改个空格)或太大都容易产生噪声。

通过这套加权打分机制,作者从 4 万多个实例中筛选出了最终的 601 个高质量实例。

btw,这也是我觉得这篇论文最有参考价值的地方,数据清洗。

混合评估体系

为了解决 BLEU 指标的局限性,文章设计了一个混合评估框架:

  1. Model-based Evaluation – 黑盒
    • Reward Model:专门训练了一个 Qwen 模型来给“Review 质量”打分(训练使用了对比学习 Loss)。
    • LLM-as-a-judge:使用 OpenAI o3 模型,从功能性、质量、风格、文档四个维度进行打分。
  2. Rule-based Evaluation – 白盒
    • Location Similarity:预测的评论位置(文件路径、行号)是否准确。
    • Diff Hunk Similarity:为了容错,如果行号有偏差,但在同一个 Diff 块内,也算部分正确。
    • Defects Match:计算预测出的缺陷与真实缺陷的匹配度。

BM25 Top-1策略

  • 利用经典的 BM25 算法,即“基于关键词匹配的稀疏检索”,根据 Issue 描述在代码库中检索,且只选取排名第一的文件作为上下文输入给 LLM。
  • 实验发现,Gemini 2.5 Pro 在使用 BM25 Top-1 时的综合得分(52.24%)与使用 Oracle(上帝视角,直接提供真实被修改的文件)的得分(52.37%)几乎持平,差距仅 0.13%。说实话,感觉非常的 amazing 啊!
  • 启示:
    1. 代码审查任务对“精准度”的要求高于“广度”。找到最关键的那个文件比提供一堆相关文件更重要。
    2. 增加上下文(Top-3/Top-5)并不总是带来提升,反而可能因为引入不相关的代码逻辑干扰 LLM。
    3. 在构建实际工具时,简单的关键词检索(BM25)可能比复杂的向量检索(Dense Retrieval)更适合代码场景,且 Token 消耗极低。低成本落地有前景啊……

结尾碎碎念:

实验结果挺有意思的。Gemini 2.5 Pro 在综合能力上最强(尤其是跨文件理解),而 GPT-5 Model-based 分数高,但在遵守规则(作者举例行号要对齐)上居然不如 Gemini 和 Claude。确实我个人也更喜欢用gemini,现在已经有 3 pro了感觉确实好用啊。

然后就是,这篇论文里的 Table 3真的非常实用,以后处理数据可以直接拿来抄作业,吗……(?)


Melon_Musk

猛男嘤嘤!

0 条评论

发表评论

邮箱地址不会被公开。 必填项已用*标注