exp_rpt_bugsinpy-v2
收藏资源简介:
exp_rpt_bugsinpy-v2是一个修复版的Python bug修复任务数据集,包含500个源自BugsInPy的单文件编程任务。该数据集专门解决了原始版本中测试文件损坏导致的奖励信号失效问题,确保每个任务都能产生合理的奖励反馈。数据集采用parquet格式存储,每个任务包含bug描述文档、元数据文件、任务配置文件、Docker环境定义以及测试套件。测试系统采用默认失败验证机制,通过多层检查确保奖励信号的有效性:首先检查代码是否被修改,然后验证代码能否编译和导入,最后运行单元测试并统计通过率。数据集对13个损坏的测试文件进行了机械修复,包括移除格式错误、修正导入语句和修复字节字面量等问题;对于6个无法自动修复的任务,采用通用回退验证机制。奖励信号分布显示:92%的任务采用测试驱动验证,6%需要先修复导入错误,1%使用通用回退,少于1%可能超时。该数据集适用于代码生成、bug修复和智能体训练等任务,特别适合需要可靠奖励信号的研究场景。
exp_rpt_bugsinpy-v2 is a fixed version of the Python bug repair task dataset, containing 500 single-file programming tasks derived from BugsInPy. This dataset specifically addresses the issue of reward signal failure caused by corrupted test files in the original version, ensuring that each task can generate reasonable reward feedback. The dataset is stored in parquet format, with each task including a bug description document, metadata file, task configuration file, Docker environment definition, and test suite. The testing system adopts a default failure verification mechanism, ensuring the validity of reward signals through multiple layers of checks: first, check whether the code has been modified, then verify whether the code can be compiled and imported, and finally run unit tests and calculate the pass rate. The dataset has mechanically repaired 13 corrupted test files, including removing formatting errors, fixing import statements, and repairing byte literals, etc.; for 6 tasks that cannot be automatically repaired, a universal fallback verification mechanism is used. The reward signal distribution shows that 92% of tasks adopt test-driven verification, 6% require fixing import errors first, 1% use universal fallback, and less than 1% may time out. This dataset is suitable for tasks such as code generation, bug repair, and agent training, especially for research scenarios requiring reliable reward signals.
数据集概述:exp_rpt_bugsinpy-v2
该数据集是 DCAgent/exp_rpt_bugsinpy 的修复版本,专注于 Python 单文件 bug 修复任务。
基本信息
- 语言:英语(en)
- 任务类型:文本生成(text-generation)
- 标签:代码、漏洞修复、智能体、BugsInPy
- 数据规模:1,000 < n < 10,000 条
- 任务数量:500 个单文件 Python 漏洞修复任务(源自 BugsInPy)
版本 v2 的改进原因
原始数据集存在以下问题:
- 测试文件损坏:由 LLM 生成的
tests/test_solution.py文件常包含未定义的inspect/os导入、Markdown 围栏、错误装饰器、无效字节字面量以及引用不存在 API 的问题。 - 奖励信号失效:由于
tests/目录不可由智能体编辑,任何测试文件错误都导致奖励永久为0;同时部分有缺陷代码能通过所有测试,导致“不做任何修改”也获得奖励。
v2 版本修复了这些问题,使每个任务都能产生合理的奖励信号。
数据格式
数据存储为单个 tasks.parquet 文件,每行一个任务,包含字段:
path(格式:bugsinpy-NNNN)task_binary(任务目录的 gzipped tar 包)
每个任务目录结构如下:
instruction.md # 面向智能体的漏洞描述 metadata.json # 来源/项目/有缺陷和修复版本提交记录 task.toml environment/ Dockerfile # python:3.10-slim + pytest,内置有缺陷解决方案和基线副本 solution.py # 有缺陷的起始代码(智能体编辑 /app/solution.py) tests/ test.sh # 稳健的默认失败验证器 test_solution.py # 每个任务的单元测试(已机械修复) test_state.py # Harbor 断言:reward.txt == "1",报告 pass_ratio config.json # 测试权重
奖励逻辑(tests/test.sh)
验证器为默认失败机制,仅在智能体产生真正可导入的修复时奖励 1:
- 初始化:
echo 0 > reward.txt(默认失败),设置PYTHONPATH=/app。 - 无操作检查:
/app/solution.py必须与内置的/app/.buggy_solution.py不同。 - 编译检查:
python3 -m py_compile /app/solution.py必须成功。 - 导入检查:
python3 -c "import solution"必须成功。 - 运行测试:执行
pytest /tests/test_solution.py:- 方案 A:测试收集并运行 → 奖励
1当且仅当passed > 0 and failed == 0;否则0。 - 方案 B(回退):测试文件不可收集 → 奖励
1当且仅当“已修改 + 编译通过 + 导入成功”。
- 方案 A:测试收集并运行 → 奖励
pass_ratio = passed/(passed+failed) 写入 /logs/verifier/pass_ratio.txt。
修复内容
- 机械自动修复 13 个测试文件(方案 A):移除嵌入的 Markdown 围栏/散文、删除
@pytest.main()装饰器、将非 ASCII 字节字面量转为字符串、修正from typing import Enum为from enum import Enum、from collections import MutableMapping为from collections.abc,并为未定义名称注入缺失的 stdlib 导入(如os,sys,re,inspect,dataclasses.dataclass,abc.abstractmethod,typing.Optional等)。 - 通用回退方案(方案 B):适用于 6 个任务(~1%),其测试文件引用解决方案未暴露的 API(如
await用于非异步函数、tensorflow、缺失解决方案属性),无法无需正确修复进行自动修复。
奖励信号分布(基于 500 个任务的缺陷起始代码)
| 信号类型 | 任务数 | 占比 |
|---|---|---|
| 测试驱动(测试套件可收集,修复→通过) | 461 | 92% |
| 缺陷解决方案无法导入(智能体需先修复导入) | 31 | 6% |
| 通用回退(测试文件损坏→基本检查) | 6 | 1% |
| 超时 | 2 | <1% |
验证结果
Docker 烟雾测试(为每个任务构建镜像,运行 tests/test.sh):
| 情景 | 预期结果 | 实际结果 |
|---|---|---|
| 未修改的缺陷解决方案 | 0 | 0 |
空 /app(无 solution.py) |
0 | 0 |
| 已修改但 solution.py 无法导入 | 0 | 0 |
| 已修改但测试仍失败 | 0 | 0 |
| 已修改且所有测试通过 | 1 | 1 |
注意事项与限制
- 未提供正确的
solution/solve.sh(与原始数据集一致)。奖励信号通过结构验证,而非与已知正确修复对比。 - 6 个通用回退任务的奖励信号较弱(任何可导入的修改都获得
1),其余任务使用真实单元测试套件。 - 快照安全:所有 500 个任务共享同一个
environment/Dockerfile。




