Benchmark · coding
RepoBench
RepoBench 是一个面向 Python 和 Java 的仓库级代码自动补全基准,衡量系统能否同时利用文件内上下文和来自同一仓库其他文件的跨文件上下文来预测下一行代码。它包含三个任务——检索(RepoBench-R)、下一行补全(RepoBench-C)和端到端流水线(RepoBench-P)——主要用 Exact Match 和 Edit Similarity 评分,检索任务则用检索准确率。
了解更多
- 示例
- 给定源文件的前若干行,加上从同一仓库其他文件中抽取的代码片段(例如定义了某个辅助函数或类的模块),预测唯一的下一行代码——通常是一行调用或引用了在别的文件中定义的内容的代码。
- 评分方式
- 补全(RepoBench-C 与 -P):将预测的下一行与标准答案行按 Exact Match(完全相同行的百分比)和 Edit Similarity(0–100 分 = 1 − 归一化 Levenshtein 编辑距离)比较;同时报告 CodeBLEU。检索(RepoBench-R):accuracy@k——标准跨文件片段位于检索到的前 k 个候选之中的样本比例。
- 验证方式
- 评分是自动且基于参考答案的(不执行代码):将模型输出行归一化后,与从原始仓库中留出的真实下一行做字符串匹配。在 Exact Match 下,只有补全与标准行逐字符相同才算正确;Edit Similarity 给予部分分;当标准片段出现在前 k 个结果中时,检索即被接受。
- 为何重要
- 真正的编码助手必须对整个仓库进行推理,而不仅是打开的文件。RepoBench 专门考察跨文件上下文建模——检索到正确的上下文并预测依赖它的下一行——因此它成为面向仓库、面向长上下文的代码模型的标准试验场。
示例解析
任务
跨文件上下文(helpers/formatting.py):
def to_title(text):
return text.strip().title()
文件内上下文(report.py):
from helpers.formatting import to_title
def make_heading(raw):
预测下一行。
解答
return to_title(raw)
解析
留出的下一行对函数参数调用 to_title——即在跨文件片段中定义、并在开头导入的辅助函数——这正是原始仓库代码在此处的写法;忽略另一个文件的模型无法知道 to_title 才是正确的调用。评分:与标准行做 Exact Match,Edit Similarity 为接近的匹配给予部分分。
该 benchmark 暂无已验证的得分。