patchbench
收藏资源简介:
PatchBench是一个多语言基准测试数据集,专为评估大语言模型(LLM)修复代码缺陷的能力而设计,要求模型生成的补丁既能修复原有bug,又不引入新的错误。数据集包含约1500至2000个样本,每个样本均由一个真实的issue报告和约500至1500行的大型代码上下文组成。样本覆盖Python、JavaScript、TypeScript、Go、Java和Rust六种编程语言,来源包括真实世界中的bug修复合并请求(PR)以及通过自动化工具注入的合成bug。每个样本的字段包括唯一标识、语言、来源(real或synthetic)、原始数据集、GitHub仓库、buggy状态的基准提交、issue文本、上下文文件列表(包含路径和内容)、预期需要修改的文件路径、测试文件列表、测试命令、环境设置命令、预修复时必须失败且修复后必须通过的测试列表、修复后必须保持通过的测试列表(即回归检查),以及作为参考的标准补丁。数据集采用严格的验证合同:确保预修复时所有fail_to_pass测试失败且所有pass_to_pass测试通过;应用标准补丁后所有测试通过;每个检查运行两次以排除不稳定测试;并验证issue文本不直接泄露需要修改的函数或行。模型的修复结果评分标准为:若所有fail_to_pass测试通过且所有pass_to_pass测试仍然通过,则视为解决。数据集还记录每个测试的详细结果,便于分析部分修复行为(例如修复成功但破坏了其他功能)。PatchBench的上下文扩展是独创贡献,通过生成仓库在基准提交下的状态,计算失败测试的依赖闭包,并切片模块以确保行数在500-1500行范围内。测试框架采用语言原生运行器,无需Docker,支持缓存加速。数据集适用于代码修复、自动化调试、LLM代码生成等任务的评估。
PatchBench 数据集概述
简介
PatchBench 是一个多语言基准测试,用于评估 LLM 能否正确地修复 bug 且不引入新 bug。每一行数据包含一份真实 issue 报告以及大段代码上下文(约 500–1500 行);被测模型生成一个补丁,随后逐行测试套件检查:(a) 之前失败的测试现在通过,(b) 其余测试套件保持绿色。
状态:v0 规范。数据行正在构建中。
数据行结构(Row schema)
| 字段 | 类型 | 是否在 tasks 配置中 |
描述 |
|---|---|---|---|
id |
string | ✅ | patchbench-{lang}-{source}-{nnnn} |
language |
string | ✅ | python |
source |
string | ✅ | real(挖掘的 bug 修复 PR) |
origin |
string | ✅ | 来源数据集,例如 swe-bench-live-multilang、swesmith-go |
repo |
string | ✅ | 代码来源的 GitHub 仓库 |
base_commit |
string | ✅ | buggy 状态所取自的 commit |
issue_text |
string | ✅ | 模型必须据此诊断的 issue/PR 报告 |
context_files |
{path, content} 列表 |
✅ | 总计约 500–1500 行,含 buggy 文件、调用方及相关模块 |
buggy_files |
string 列表 | ✅ | 预期修复会触及的路径 |
test_files |
{path, content} 列表 |
✅ | 以文件形式物化的测试补丁 |
test_cmds |
string 列表 | ✅ | 运行该行测试的命令(语言原生) |
env_setup_cmds |
string 列表 | ❌(仅 harness) | test_cmds 之前所需的安装/构建命令 |
fail_to_pass |
string 列表 | ❌ | 修复前必须失败、修复后必须通过的测试 |
pass_to_pass |
string 列表 | ❌ | 修复后必须保持通过的测试(回归检查) |
gold_patch |
string | ❌ | 参考修复,仅用于 harness/自评估 |
配置划分(防泄漏)
两个配置用于防止泄漏:
tasks(公开评估面):agent 可见的一切——issue、上下文、测试。gold(仅 harness):fail_to_pass、pass_to_pass、gold_patch、env_setup_cmds。
验证契约(每个发布的数据行)
- 修复前: 在
base_commit将test_files应用到仓库 → 每个fail_to_pass测试失败;每个pass_to_pass测试通过。 - 修复后: 应用
gold_patch→ 每个fail_to_pass和pass_to_pass测试通过。 - 确定性: 每项检查运行两次;任何存在不稳定测试的数据行被丢弃。
- 无泄漏检查: issue 文本不得点名要修改的具体函数/行(自动筛查 + 人工抽查)。
评分方式
模型修复被评为 resolved 当且仅当所有 fail_to_pass 通过且所有 pass_to_pass 仍然通过。数据行还记录逐测试结果,因此可看到部分行为(修复有效但破坏了某些东西)——这就是“引入新 bug”的信号。
来源计划(目标约 1,500–2,000 行)
| 语言 | 真实来源 | 合成补充 | 目标 |
|---|---|---|---|
| Python | SWE-Gym + SWE-bench Verified/train | SWE-smith-py | ~550 |
| Rust | SWE-bench-Live rust + rustbench | SWE-smith-rs | ~300 |
| Java | SWE-bench-Live java + Multi-SWE-bench java | SWE-smith-java | ~300 |
| Go | SWE-bench-Live go + Multi-SWE-bench go | SWE-smith-go | ~250 |
| JS/TS | SWE-bench-Live js+ts + Multi-SWE-bench | SWE-smith-js/ts | ~400 |
上下文扩展是 PatchBench 自身的贡献:没有任何上游数据集提供切片好的 500–1500 行窗口。方法是在 base_commit 物化仓库,计算失败测试的依赖闭包,并对闭包内的模块进行切片,过滤掉闭包超出窗口的数据行。
Harness
语言原生 runner(无需 Docker,改编自 SWE-bench 评分循环 + microsoft/RepoLaunch 的各语言构建/测试配方):在 base_commit clone → env_setup_cmds → 应用 test_files(+ 候选补丁)→ 运行 test_cmds → 解析逐测试结果 → 依据 F2P/P2P 评分。按仓库的环境缓存使验证可行。
许可证审计
上游数据集许可证:SWE-bench-Live(MIT)、SWE-Gym(MIT)、SWE-smith(MIT)。Multi-SWE-bench / PrimeIntellect 行采用 CC0/“other”(ByteDance 社区条款)——这些行在纳入前会从原始宽松许可的仓库重新验证,否则排除。




