# SWEbench 使用指南 SWE-bench是一个基准测试,用于评估大语言模型在从GitHub收集的现实世界软件问题上的表现。给定一个代码库和一个问题,语言模型的任务是生成一个补丁来解决所描述的问题。 ## 1. 功能概览 当前在 `ais_bench` 已接入以下 SWEbench 能力: - 数据集:`full`、`verified`、`verified_mini`、`lite`、`multilingual` - 任务: - `infer`:调用 `mini-swe-agent` 生成补丁(`model_patch`) - `eval`:调用 SWE-bench harness 执行评测并统计 resolved - 结果汇总:输出 `accuracy`、`submitted_accuracy`、`resolved_instances` 等关键指标 `ais_bench/configs/swe_bench_examples/`目录已提供以下示例配置: - `mini_swe_agent_swe_bench_lite.py`:SWE-bench Lite(`princeton-nlp/SWE-Bench_Lite`),适合先跑通流程/快速迭代。 - `mini_swe_agent_swe_bench_verified.py`:SWE-bench Verified(`princeton-nlp/SWE-Bench_Verified`,**500** 条),SWE-bench 测试集里经人工验证质量的子集。 - `mini_swe_agent_swe_bench_verified_mini.py`:SWE-bench Verified Mini(`MariusHobbhahn/swe-bench-verified-mini`,**50** 条),社区构造的 Verified 子集,用于显著降低评测成本;子集筛选/构造方式见数据集卡与构造仓库:`https://huggingface.co/datasets/MariusHobbhahn/swe-bench-verified-mini`、`https://github.com/mariushobbhahn/make_swe_bench_verified_mini`。 - `mini_swe_agent_swe_bench_full.py`:SWE-bench Full(`princeton-nlp/SWE-Bench`),完整测试集。 - `mini_swe_agent_swe_bench_multilingual.py`:SWE-bench Multilingual(`SWE-bench/SWE-bench_Multilingual`),包含多语言 issue 描述的数据集。 - `mini_swe_agent_swe_bench_multilingual_mini.py`:SWE-bench Multilingual Mini(**15**/**30**/**60** 条),AISBench官方构造的 Multilingual 子集,用于显著降低评测成本;子集筛选/构造方式见数据集卡与构造仓库:`https://modelers.cn/datasets/AISBench/SWE-Bench_Multilingual_mini`、`https://github.com/AISBench/datasets/tree/main/mini_datasets/swe_bench_multiligual_mini`。 ## 2. 前置依赖 运行前请确保以下依赖可用: 1) 安装 `mini-swe-agent`(infer 依赖) ```bash git clone https://github.com/AISBench/mini-swe-agent.git cd mini-swe-agent pip install -e . cd - ``` 2) 安装 SWE-bench harness(eval 依赖) ```bash git clone https://github.com/SWE-bench/SWE-bench.git cd SWE-bench pip install -e . cd - ``` 3) Docker 可用(infer/eval 都依赖容器环境) ```bash docker --version docker ps ``` 4) ARM 环境下需要开启 docker 的 x86 支持,执行以下命令: ```bash docker run --rm --privileged tonistiigi/binfmt --install all ``` ## 3. 最小配置(先跑通再调优) 建议从 `mini_swe_agent_swe_bench_lite.py` 开始,仅改 `models[0]` 里的三个字段: - `model`:模型名(必填) - `url`:模型服务地址(OpenAI 兼容 API) - `api_key`:服务密钥(本地服务可用 `EMPTY`) 示例(本地 vLLM 场景): ```python models = [ dict( attr="local", abbr="swebench", type="LiteLLMChat", model="qwen3", api_key="EMPTY", url="http://127.0.0.1:8000/v1", batch_size=1, generation_kwargs=dict(), ) ] ``` ### 数据集路径说明 示例配置默认 `path=""`,表示优先从 Hugging Face 在线加载。 - 你可以保持 `path=""` 直接在线拉取 - 若离线使用,把 `path` 改为本地 parquet 文件或目录(支持 `data/-*.parquet`) ### 首跑建议 - 数据集先用 `lite` - `batch_size=1` - `step_limit=200`(示例默认值,先不改) ## 4. 运行命令 在仓库根目录执行(`config` 为配置文件路径): ```bash ais_bench ais_bench/configs/swe_bench_examples/mini_swe_agent_swe_bench_lite.py ``` 上面是完整流程(`all`),也可以分步执行: ```bash # 只做推理,生成 predictions ais_bench ais_bench/configs/swe_bench_examples/mini_swe_agent_swe_bench_lite.py -m infer # 基于现有 predictions 做评测 ais_bench ais_bench/configs/swe_bench_examples/mini_swe_agent_swe_bench_lite.py -m eval ``` ### 断点续跑 使用 `--reuse` 跳过已完成实例,适合中断后续跑: ```bash ais_bench ais_bench/configs/swe_bench_examples/mini_swe_agent_swe_bench_lite.py -m infer --reuse ``` ## 5. 输出结果怎么看 默认输出目录为 `outputs/default//`,重点关注: - 推理结果: - `predictions/swebench/swebench_*.json` - 每个 `instance_id` 下包含 `model_patch` - 评测结果: - `results/swebench/swebench_*.json` - 关键字段: - `accuracy`:`resolved_instances / total_instances` - `submitted_accuracy`:`resolved_instances / submitted_instances` - `resolved_instances` / `unresolved_instances` / `error_instances` - `harness_exit_code`:harness 退出码 ## 6. 常见问题与排障(SWEB 错误码) 以下错误码来自 `SWEB_CODES`,可结合全量 FAQ 查看: - FAQ:`docs/source_zh_cn/faqs/error_codes.md` ### 1) `SWEB-DEPENDENCY-001`:缺少 mini-swe-agent - 现象:infer 启动时报依赖导入失败 - 原因:未安装 `mini-swe-agent` - 处理:执行 `pip install mini-swe-agent` ### 2) `SWEB-DEPENDENCY-002`:缺少 SWE-bench harness - 现象:eval 阶段报 harness import error - 原因:未安装 SWE-bench 项目或未在当前环境可见 - 处理:按“前置依赖”安装 SWE-bench,并确认当前 Python 环境一致 ### 3) `SWEB-PARAM-001`:模型配置为空 - 现象:提示 model 未配置 - 原因:`models[0]['model']` 为空或仅空白字符 - 处理:配置 `model/url/api_key`,至少保证 `model` 非空 ### 4) `SWEB-DATA-002` / `SWEB-FILE-003`:数据集加载失败 - 现象:在线加载失败或本地 parquet 未找到 - 原因: - 在线模式:网络或 Hugging Face 访问异常 - 本地模式:`path` 不存在,或目录结构不匹配 split parquet 规则 - 处理: - 在线失败时可改为本地 parquet - 本地路径需满足:`/data/test-*.parquet` 或 `/test-*.parquet` ### 5) `SWEB-FILE-001`:找不到 predictions 文件 - 现象:`-m eval` 时提示 predictions 不存在 - 原因:未先执行 infer,或 work_dir/reuse 指向不一致 - 处理:先执行 `-m infer`,并确认 eval 与 infer 使用同一份配置/输出目录 ### 6) `SWEB-RUNTIME-001` / `SWEB-RUNTIME-002`:容器或 harness 运行失败 - 现象:Docker 镜像拉取失败、评测执行异常 - 原因:镜像不可用、网络异常、容器运行环境不满足 - 处理: - 先确认 `docker ps` 正常 - 检查镜像是否可拉取,确保可以从dockerhub拉取镜像(示例:docker pull swebench/sweb.eval.x86_64.astropy_1776_astropy-6938:latest) - 失败后可用 `--reuse` 重试,避免重复计算已完成实例 ## 7. 进阶建议(可选) - 初次调试优先 `lite`,确认流程稳定后切 `verified/full` - 需要减少空补丁时,优先优化模型能力与 agent 提示模板 - 评测时关注 `empty_patch_instances`、`error_instances`,它们通常比 `accuracy` 更能定位首轮问题