SWE-bench:3 步跑出编码模型"真实修 Bug 能力"评分——GitHub Issue 修复基准完整上手指南
【免费下载链接】SWE-benchSWE-bench: Can Language Models Resolve Real-world Github Issues?项目地址: https://gitcode.com/GitHub_Trending/sw/SWE-bench
如果你对比过几款编码模型,大概率碰过这种尴尬:补全基准分很高,拿到真实项目里却连一个 issue 都修不动。SWE-bench 就是为这个落差而建的评测框架:它取真实的 GitHub issue 和对应时间点的代码库,让语言模型生成修复补丁,再在隔离的 Docker 环境里应用补丁、跑仓库自带的测试,用测试通过与否给出判定。它适合需要客观比较大模型软件工程能力的开发者与研究者。
项目初览:SWE-bench 做什么,给谁用
SWE-bench 是普林斯顿团队论文 "Can Language Models Resolve Real-World Github Issues?"(ICLR 2024 Oral)的官方代码与数据集。任务设定只有一句话:给定一个 issue 和对应代码库,模型需要产出能解决问题的代码补丁(patch)。
它和多数代码补全基准的差别在于验证方式:补全题只看答案对不对,而 SWE-bench 是端到端验证——补丁必须真实应用到仓库、在容器里跑通该仓库自己的测试套件,结果是可复现的"解决/未解决",而不是人工判分的相似度。
关键基础信息:
- 主要语言:Python(要求 3.10+),PyPI 包名
swebench,当前版本 5.0.2 - 协议:MIT
- 安装方式:克隆仓库后
pip install -e . - 运行环境:本地评测依赖 Docker;官方建议 x86_64 机器,120GB 空闲磁盘、16GB 内存、8 核 CPU
- 数据集:完整集 2294 个实例;Lite 534 个;Verified 500 个(工程师确认可解);Multimodal 100 dev + 500 test;Multilingual 300 个(9 种语言、42 个仓库),详见 docs/guides/datasets.md
快速上手:三步跑起来
第一步,安装 Docker 并确认守护进程在运行,本地评测的每一步都依赖它。
第二步,克隆仓库并从源码安装,装完后swebench命令即可用:
git clone https://gitcode.com/GitHub_Trending/sw/SWE-bench cd SWE-bench pip install -e .第三步,用官方参考补丁(gold patch)验证环境正确性,只跑一个实例,耗时短:
swebench eval verified --gold -i sympy__sympy-20590 --run-id validate-gold跑完预期看到:当前目录生成logs/build_images(镜像构建日志)和logs/run_evaluation(评测日志),最终报告写入evaluation_results目录,关键字段是 Instances resolved 和 Resolution rate。gold 验证这条实例应当显示已解决——这说明镜像、补丁应用、测试运行整条链路都正常。
一点说明:v5 CLI 默认从镜像仓库拉取预构建镜像;M 系列 Mac 等 ARM 系统需要额外用--task-repo指定本地任务仓库,通过 Docker Buildx 在本地构建镜像,README 中有对应示例。
核心能力拆解
Docker 化评测引擎:补丁必须真的修好才算数
它做什么:为每个任务实例安装仓库到指定的 base_commit,应用测试补丁与模型补丁,运行测试脚本,从日志解析每个测试的通过状态并评分——全链路成功且所有目标测试通过才记 1 分,任何一步失败记 0 分。解决什么问题:不同机器上的 Python 版本、依赖差异会让评测结果互相不可比,容器化把环境固定住,任何人复现都得到同样的结论。怎么实现:swebench/harness/ 负责镜像构建、容器生命周期管理和并行调度,-j参数控制并行数,官方建议不超过min(0.75 * cpu_count, 24)。
# 提交模型预测(preds.jsonl 为模型生成的补丁),8 个实例并行评测 swebench eval verified -p preds.jsonl --run-id my-run -j 8多变体数据集与双重验证:先保证数据本身干净
它做什么:提供 5 个数据集变体,从快速迭代(Lite)到高质量对比(Verified)再到跨语言(Multilingual),按需选择评测规模。解决什么问题:完整集跑一轮成本高,而且不是每个 issue 都保证可解——如果数据本身带噪声(比如参考补丁都跑不过测试),评测结果就不公平。怎么实现:每个实例入库前走一遍双重验证——先应用 test_patch 确认目标测试确实处于失败状态(FAIL_TO_PASS),再应用 gold patch 确认测试转为通过(PASS_TO_PASS),两步都成功该实例才可用于评测。
from datasets import load_dataset # 加载专家验证集:500 个经工程师确认可解的 issue,带难度分级字段 sbv = load_dataset("SWE-bench/SWE-bench_Verified", split="test")推理生成与报告重算:生成和评分解耦
它做什么:推理阶段把 repo + issue 交给模型生成补丁,swebench infer内置 mini-SWE-agent 可直接调用 API 模型批量生成预测;swebench report则不启动任何容器,只从已保存的日志重新计分。解决什么问题:模型跑一次推理成本很高,但如果你想调整评分口径或修复某个解析 bug,不必把容器评测整轮重跑一遍。
预测文件是 JSONL,每行一个实例,核心就三个字段:
{"instance_id": "sympy__sympy-20590", "model_name_or_path": "gpt-5", "model_patch": "diff --git a/..."}边界说明:它擅长什么,不擅长什么
| 擅长 | 不擅长 / 限制 |
|---|---|
| 端到端、可复现地比较模型的修 bug 能力,判定标准是仓库自己的测试,无人工判分 | 资源消耗大:官方建议 x86_64 机器、120GB 空闲磁盘、16GB 内存、8 核;arm64 支持仍标注为实验性 |
| 数据集变体多,Lite/Verified 适合快速迭代和日常对比 | 结果缓存容易踩坑:缓存键只有run_id+instance_id,换个补丁复用同一 run_id 会直接返回上次的结果 |
| 支持 Modal 云端评测,结果可发布到 Hugging Face bucket,便于学术场景横向对比 | 覆盖范围有偏:主集以 Python 仓库为主,跨语言能力只由 300 实例的 Multilingual 子集衡量;Multimodal 的 test 集需在官方渠道计分,本地拿不到 gold 补丁 |
进阶用法与常见坑
两个最常用的进阶配置:
- 只评测指定实例:
swebench eval verified -p preds.jsonl -i astropy__astropy-14539 -i sympy__sympy-20590,-i可重复,调试时不必整轮跑。 - 不启容器重新计分:
swebench report <run_id> -d verified,只读取已保存的日志重算报告;镜像缓存级别可用--cache_level(none/base/env/instance 四档)调节,env档配合清理可省磁盘但每轮更慢,细节见 docs/faq.md。
三个高频问题:
- ⚠️ 改了补丁却得到旧结果:几乎总是 run_id 复用了,缓存命中上次评测。重新评测请换一个
--run-id。 - 磁盘被 Docker 占满:先
docker system prune清理无用镜像和容器;Docker Desktop 用户记得把虚拟磁盘扩到约 120GB 空闲。 - 镜像拉不下来或 ARM 上构建失败:本地加
--task-repo指向任务仓库用 Buildx 构建;构建失败会被如实报告,只有存在已发布镜像时才会回退使用。
完整参数以swebench eval --help为准,评测细节可查 docs/guides/evaluation.md。
SWE-bench 把"这个编码模型到底行不行"变成一组可复现的数字:同样的容器、同样的测试、同样的判分口径,换台机器也能对上。如果你正在选型编码模型或准备一份模型对比报告,建议从 Verified 或 Lite 开始试。下一步动作:克隆仓库、pip install -e .,然后跑swebench eval verified --gold -i sympy__sympy-20590 --run-id validate-gold,先确认整条评测链路在你的机器上是通的。
【免费下载链接】SWE-benchSWE-bench: Can Language Models Resolve Real-world Github Issues?项目地址: https://gitcode.com/GitHub_Trending/sw/SWE-bench
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考