SWE-bench_Pro#
简介#
SWE-bench_Pro 是 Scale AI 在 SWE-bench 之上构建的更具挑战性的基准测试,用于评估大语言模型(LLM)/Agent 在长周期、多语言、真实代码库软件工程任务中的能力。给定一个代码库和一个 issue 描述,模型需要在每个实例独立的 Docker 容器中通过多轮 agent 循环自主探索代码、编辑源文件并提交可通过隐藏单元测试的补丁。
小技巧
强烈推荐使用 SWE-bench_Pro 而非原始 SWE-bench。 与 swe_bench_verified / swe_bench_lite 相比:
更难、未被充分污染:样本来自更新、商业化或非主流仓库,而非容易在训练数据中泄漏的 Django/Flask 等热门 Python 项目
多语言:覆盖 Python、JavaScript/TypeScript、Go 等多种语言(
repo_language字段),更全面地反映真实工程能力更长的任务窗:每个实例平均涉及更多文件、更长的修改路径,能更好区分前沿模型
官方维护的 Docker 镜像:每个实例的预构建镜像直接从 DockerHub 拉取(
jefzda/sweap-images:{tag}),无需本地构建,相比原始 SWE-bench 动辄数小时的镜像构建过程节省大量时间
原始 swe_bench_* 系列建议仅用于历史对比或快速冒烟。
任务描述#
任务类型:自动化软件工程 / 缺陷修复(Agentic)
输入:GitHub issue 描述(
problem_statement)输出:经过自主编辑后收集到的代码补丁(unified diff 格式)
编程语言:多语言(
repo_language字段;如 JavaScript/TypeScript、Python、Go 等)
关键特性#
多轮 agent 循环,每个实例使用独立的 DockerHub 镜像(
jefzda/sweap-images:{tag})哨兵字符串提交协议(
COMPLETE_TASK_AND_SUBMIT_FINAL_OUTPUT)容器内评测:
git apply补丁 → 执行实例专属的run_script.sh→ 通过parser.py解析输出 → 校验(fail_to_pass | pass_to_pass) ⊆ PASSED同时支持
toolcall(函数调用)与backticks(基于文本,适配无 function-calling 能力的模型)两种动作协议推理阶段与评测阶段共用同一份 sandbox 配置:
memory_limit/cpu_limit/platform等只需配置一次
安装依赖#
SWE-bench_Pro 依赖 Docker 来保证评测可复现。
安装 Docker:参考 Docker 安装指南
Linux 用户额外配置:建议执行 Linux 安装后步骤 以避免每次都需要
sudo安装 Python 依赖:
pip install 'evalscope[sandbox]'
evalscope[sandbox] 会安装 ms-enclave 与 docker SDK。
备注
首次运行时会自动从 DockerHub 拉取每个实例的镜像(每个镜像约 1–4 GB),并自动克隆 scaleapi/SWE-bench_Pro-os 仓库至 ~/.cache/evalscope/swe_bench_pro/SWE-bench_Pro-os 并固定到 commit ca10a60,用于读取每实例的 run_script.sh、parser.py 与 Dockerfile。
请确保磁盘空间和网络环境充足。
运行示例#
下面示例对齐 tests/benchmark/test_agent.py 中的 test_swe_bench_pro 用例:
import os
from evalscope import TaskConfig, run_task
from evalscope.config import SandboxTaskConfig
task_cfg = TaskConfig(
model='qwen3-max',
api_url='https://dashscope.aliyuncs.com/compatible-mode/v1',
api_key=os.getenv('DASHSCOPE_API_KEY'),
eval_type='openai_api',
datasets=['swe_bench_pro'],
dataset_args={
'swe_bench_pro': {
'extra_params': {
'action_protocol': 'toolcall', # 'toolcall' 或 'backticks'
'max_steps': 250, # agent 循环最大步数
'command_timeout': 60.0, # 单条 bash 命令超时(秒)
'eval_timeout': 1800, # 单实例评测超时(秒)
}
}
},
# 推理与评测阶段共用同一份 sandbox 配置
sandbox=SandboxTaskConfig(
default_config={
'platform': 'linux/amd64', # 默认值,sweap-images 仅有 amd64
'memory_limit': '12g', # 容器内存上限,避免 OOM-Killed(如 NodeBB)
'cpu_limit': 4.0, # 容器 CPU 配额(CPUs 数)
},
),
eval_batch_size=4, # 同时存在的容器数量
limit=5, # 快速试跑;正式评测请去掉
generation_config={
'temperature': 0.7,
'parallel_tool_calls': True,
'stream': True,
}
)
run_task(task_cfg=task_cfg)
中间产物保存在 outputs/<timestamp>/swe_bench_pro_log/<instance_id>/:
workspace/patch.diff:模型提交的补丁workspace/stdout.log/workspace/stderr.log:测试运行的日志workspace/output.json:parser.py解析后的结构化测试结果container.log:容器整体执行日志
参数说明#
extra_params(数据集级)#
参数 |
类型 |
默认值 |
说明 |
|---|---|---|---|
|
str |
|
模型与 bash 的交互协议,可选 |
|
int |
|
每个样本 agent 循环最大步数 |
|
float |
|
单条 bash 命令超时(秒) |
|
int |
|
单实例评测超时(秒) |
|
str |
|
已有 |
|
str |
|
托管 sweap-images 的 DockerHub 用户/组织名 |
sandbox.default_config(任务级,推理与评测共用)#
TaskConfig.sandbox.default_config 会被透传到 ms-enclave 的 DockerSandboxConfig,并在容器创建时映射到 docker 的 mem_limit / cpu_quota 等参数。常用字段:
字段 |
类型 |
默认 |
说明 |
|---|---|---|---|
|
str |
|
容器平台。sweap-images 仅提供 amd64 镜像,Apple Silicon 需保持此默认值(通过 QEMU 模拟) |
|
str |
|
容器内存上限,例如 |
|
float |
|
容器 CPU 数配额。多核机器建议提升至 4 以上以加速测试 |
|
bool |
|
容器内是否启用网络 |
备注
为什么要在 sandbox.default_config 而不是 extra_params 里配置内存/CPU?
SWE-bench_Pro 的推理阶段(agent 循环)与评测阶段(运行 run_script.sh)使用的是同一份 sandbox 配置。在 TaskConfig.sandbox.default_config 中配置一次,两个阶段都会生效,无需重复设置。
常见问题#
1. OOM-Killed / 测试中途容器被杀#
部分实例(如 nodebb__nodebb-*)的测试套件内存占用较高。请提升 memory_limit:
sandbox=SandboxTaskConfig(default_config={'memory_limit': '16g', 'cpu_limit': 8.0})
2. Apple Silicon 上速度极慢#
sweap-images 是 amd64-only 镜像,在 Apple Silicon 上通过 QEMU 模拟运行,单实例评测可能耗时 10–30 分钟。这是预期行为,可考虑:
在 amd64 Linux 机器上运行;或
提升
eval_timeout(默认 3600 秒可能不够);减小
eval_batch_size,避免过多容器并发导致主机过载。
3. git clone https://github.com/scaleapi/SWE-bench_Pro-os.git 失败#
网络受限时自动克隆会失败。可手动克隆并通过参数传入:
git clone https://github.com/scaleapi/SWE-bench_Pro-os.git /path/to/SWE-bench_Pro-os
git -C /path/to/SWE-bench_Pro-os checkout ca10a60
'extra_params': {'swe_bench_pro_repo_path': '/path/to/SWE-bench_Pro-os', ...}
4. DockerHub 拉取速率限制 / 拉取失败#
未登录的匿名用户每 6 小时仅能拉取 100 次镜像。建议:
docker login
或先用 docker pull jefzda/sweap-images:<tag> 预热常用镜像。
5. docker_image missing for instance ...#
通常意味着 _post_process_samples 没有跑到,或样本字段缺失 repo / instance_id。请确认数据集为 ScaleAI/SWE-bench_Pro 且未被自定义改动覆盖。
6. Missing run_script for instance_xxx#
SWE-bench_Pro-os 仓库未停留在 commit ca10a60,或缺少子目录。删除 ~/.cache/evalscope/swe_bench_pro/SWE-bench_Pro-os 重新克隆,或显式指定 swe_bench_pro_repo_path。
7. pip install evalscope[sandbox] 找不到 docker SDK#
确认环境中 docker SDK 与 ms-enclave 已安装:
python -c "import docker, ms_enclave; print(docker.__version__, ms_enclave.__version__)"