ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

mini-swe-agent 在 SWE-bench 上批量运行与评估:从命令参数到源码原理的完整指南

mini-swe-agent 在 SWE-bench 上批量运行与评估:从命令参数到源码原理的完整指南 人工智能大模型AI Agent代码智能体【免费下载链接】mini-swe-agentThe 100 line AI agent that solves GitHub issues or helps you in your command line. Radically simple, no huge configs, no giant monorepo—but scores 74% on SWE-bench verified!项目地址https://gitcode.com/gh_mirrors/mi/mini-swe-agent点击查看免费下载mini-swe-agent 内置了一套面向 SWE-bench 基准测试的批量运行管线swebench.py负责以多线程方式在成百上千个任务实例instance上并行运行 agent 并产出预测补丁swebench_single.py负责在单个实例上进行可交互的单实例调试。本文以 SWE-bench 参考文档 为核心结合其背后的 swebench.py 实现、默认 swebench.yaml 配置 与配套 使用文档、测试用例完整讲解两个脚本的 CLI 参数、数据集选择、配置项、输出产物、评估方法与底层执行原理帮助你直接复现论文级评测流程或借鉴其批量管线搭建自己的 benchmark。两个入口脚本batch 与 single 的分工仓库针对 SWE-bench 提供两个互补的脚本都位于src/minisweagent/run/benchmarks/目录下脚本命令用途swebench.pymini-extra swebench批量模式并行处理全部或筛选出的任务实例产出preds.json预测文件用于正式评测swebench_single.pymini-extra swebench-single单实例模式运行单个任务并保持交互用于调试 prompt、模型与环境不产出preds.json两个脚本共享同一套数据集映射DATASET_MAPPING与镜像解析逻辑get_swebench_docker_image_name、get_sb_environmentswebench_single.py直接from minisweagent.run.benchmarks.swebench import DATASET_MAPPING, get_sb_environment复用批量脚本的能力这一点在源码 swebench_single.py 中清晰可见。因此读懂批量脚本单实例模式也基本掌握了大半。注意SWE-bench 官方 Docker 容器假定 x86 Linux 架构在其他架构如 ARM上可能无法运行。批量模式快速开始批量模式在全部任务实例上并行运行 agent。查看帮助与一个完整示例mini-extra swebench --help # 或直接以 Python 模块方式运行 python src/minisweagent/run/benchmarks/swebench.py --help # 示例在 SWE-bench Verified 的 test 分片上用 4 个 worker 并行运行 mini-extra swebench \ --model anthropic/claude-sonnet-4-5-20250929 \ --subset verified \ --split test \ --workers 4其中anthropic/claude-sonnet-4-5-20250929正是默认配置文件 swebench.yaml 中预设的模型名通过 Litellm 统一接入任何 Litellm 支持的模型名均可传入。基础参数-o,--output输出目录所有结果文件preds.json、轨迹文件、日志写入这里-m,--model要使用的模型覆盖配置中的model.model_name-c,--config配置文件路径默认是config目录下的swebench.yaml即 src/minisweagent/config/benchmarks/swebench.yaml可多次指定多个配置递归合并-w,--workers并行 worker 线程数默认1数据选择参数--subsetSWE-bench 子集或一个数据集路径默认lite--split数据集分片默认dev--slice切片表达式如0:5只取前 5 个实例--filter按正则过滤实例 ID--shuffle是否打乱实例顺序默认False打乱使用固定随机种子 42可复现--redo-existing是否重跑已有结果的实例默认False高级参数--environment-class环境类型推荐docker或singularity--model-class模型类例如anthropic或完整类路径一个关键陷阱使用-c时默认配置失效-c/--config的帮助文本见 swebench.py 源码明确警告一旦显式指定-c默认配置文件就不再加载。因此每次传入-c都必须显式带上基础配置# 错误忘带默认配置temperature 覆盖会丢失其余全部默认设置 mini-extra swebench -c model.model_kwargs.temperature0 # 正确先显式加载默认配置再叠加覆盖项多个 -c 递归合并 mini-extra swebench -c swebench.yaml -c model.model_kwargs.temperature0.5 mini-extra swebench -c swebench.yaml -c agent.max_iterations50配置合并由recursive_merge完成这也是swebench_single.py与swebench.py共同使用的配置构建方式。单实例调试模式单实例模式运行单个任务并保持与用户的交互agent 每步都可能征求确认适合排查 prompt 模板、模型行为与环境问题。查看帮助与示例mini-extra swebench-single --help # 或 python src/minisweagent/run/benchmarks/swebench_single.py --help # 按实例 ID 运行 mini-extra swebench-single \ --subset verified \ --split test \ --model anthropic/claude-sonnet-4-5-20250929 \ -i sympy__sympy-15599 # 按实例索引运行数据集内第 0 个实例 mini-extra swebench-single \ --subset verified \ --split test \ -m anthropic/claude-sonnet-4-5-20250929 \ -i 0参数说明-m,--model使用的模型-c,--config配置文件默认同为swebench.yaml-o,--output输出轨迹文件默认保存到全局配置目录下的last_swebench_single_run.traj.json见 swebench_single.py--subset/--split/-i, --instance数据选择--instance接受实例 ID 或整数索引默认0--environment-class环境类型--exit-immediatelyagent 想结束时直接退出而非弹出确认默认False-y, --yolo全程不确认直接运行-l, --cost-limit成本上限设为0禁用单实例模式默认使用interactiveagentdefault_typeinteractive见 swebench_single.py因此它不产出preds.json与批量模式形成明确分工。数据集与镜像解析DATASET_MAPPING 的秘密批量与单实例脚本共用 DATASET_MAPPING这是数据集选择的源头--subset值实际加载的数据集Hugging Face 路径fullprinceton-nlp/SWE-Benchverifiedprinceton-nlp/SWE-Bench_Verifiedliteprinceton-nlp/SWE-Bench_Litemultimodalprinceton-nlp/SWE-Bench_Multimodalmultilingualswe-bench/SWE-Bench_MultilingualsmithSWE-bench/SWE-smith_testklieret/swe-bench-dummy-test-dataset仓库自带的端到端测试小数据集rebenchnebius/SWE-rebench凡是不在映射表中的--subset值会被直接当作自定义数据集路径DATASET_MAPPING.get(subset, subset)后交给datasets.load_dataset(dataset_path, splitsplit)加载见 swebench.py。因此只要数据集遵循 SWE-bench 格式、能用datasets.load_dataset(path, splitsplit)加载就能用--subset /path/to/your/dataset跑自己的数据集。每个实例的环境镜像由 get_swebench_docker_image_name 决定优先取实例自带的image_name或docker_image字段若二者皆无则按instance_id拼接 SWE-bench 官方镜像名docker.io/swebench/sweb.eval.x86_64.id:latest。由于 Docker 不允许镜像名中出现双下划线源码用魔术令牌_1776_替换__。这一逻辑有专门的测试覆盖test_swebench.py例如instance_id swe-agent__test-repo__1 → docker.io/swebench/sweb.eval.x86_64.swe-agent_1776_test-repo_1776_1:latest环境类不同镜像前缀也会不同docker与swerex_modal直接使用镜像名singularity与contree则加上docker://前缀见 get_sb_environment。默认配置逐项拆解批量与单实例脚本的默认配置都是 swebench.yaml它分三层agent、environment、model。agent 层任务指令模板与限制agent: system_template: | You are a helpful assistant that can interact with a computer shell to solve programming tasks. instance_template: | pr_description Consider the following PR description: {{task}} /pr_description instructions # Task Instructions ...完整 SWE-bench 任务指令只改非测试文件、提交 git patch、使用 EXACT 提交命令等 /instructions step_limit: 250 cost_limit: 3.要点instance_template以pr_description包裹{{task}}task即实例的problem_statement字段指令模板要求模型持续与计算机交互思考 → 至少一条命令 → 观察结果 → 下一步并把最终修复以git diff生成的patch.txt通过echo COMPLETE_TASK_AND_SUBMIT_FINAL_OUTPUT cat patch.txt提交明确边界只能修改/testbed下的常规源码文件禁止修改测试文件与pyproject.toml、setup.cfg等配置文件step_limit: 250限制最大交互步数cost_limit: 3.限制单实例成本美元级超出即终止。仓库还提供两个指令模板变体均在src/minisweagent/config/benchmarks/下swebench_backticks.yaml要求模型在单个mswea_bash_command代码块中给出恰好一条命令适用于严格约束单命令输出的场景swebench_xml.yaml以mswea_bash_commandXML 标签承载命令并配置action_regex: mswea_bash_command(.*?)/mswea_bash_command预设minimax/minimax-m2openrouter模型类。environment 层Docker 沙箱environment: cwd: /testbed timeout: 60 interpreter: [bash, -c] env: PAGER: cat MANPAGER: cat LESS: -R PIP_PROGRESS_BAR: off TQDM_DISABLE: 1 BASH_ENV: /root/.bashrc environment_class: docker工作目录固定为/testbed即 SWE-bench 镜像中源码检出位置BASH_ENV: /root/.bashrc有明确注释bash -c是非登录 shell、不会加载~/.bashrc而镜像依赖conda activate testbed进入正确环境因此必须显式指向 bashrcswebench.yaml环境类默认docker可通过--environment-class或配置覆盖为singularity等。model 层观察结果模板与模型配置model: observation_template: | {% if output.exception_info -%} exception{{output.exception_info}}/exception {% endif -%} returncode{{output.returncode}}/returncode {% if output.output | length 10000 -%} output{{ output.output -}}/output {%- else -%} warning...输出过长提示.../warning {%- set elided_chars output.output | length - 10000 -%} output_head{{ output.output[:5000] }}/output_head elided_chars{{ elided_chars }} characters elided/elided_chars output_tail{{ output.output[-5000:] }}/output_tail {%- endif -%} format_error_template: | ...输出 token 超限 / 工具调用格式错误的兜底提示 model_name: anthropic/claude-sonnet-4-5-20250929 model_kwargs: drop_params: true parallel_tool_calls: true关键设计当命令输出超过 10000 字符时模板不会把完整输出塞给模型而是截断为output_head前 5000 字符 省略计数 output_tail后 5000 字符并提示模型改用head/tail/sed等更收敛的命令——这正是控制长输出上下文成本的实现细节。Modal 云端环境变体benchmarks/swebench_modal.yaml 提供了基于 SWE-ReX 的 Modal 云端环境配置与基础配置叠加使用mini-extra swebench -c swebench -c swebench_modal [other options]它会将environment_class覆盖为swerex_modal并设置startup_timeout: 600.0首次构建镜像预留 10 分钟、runtime_timeout: 1800.0、deployment_timeout: 1800.0、install_pipx: true同时预设gpt-5-miniportkey模型类openaiprovider。使用前需modal setup认证并安装pip install mini-swe-agent[modal]。输出产物preds.json、轨迹与日志批量运行会向-o/--output目录写入以下内容文件内容preds.json预测文件键为instance_id值为{model_name_or_path, instance_id, model_patch}instance_id/instance_id.traj.json每个实例的完整轨迹消息、模型统计、退出状态、submissionminisweagent.log运行日志add_file_handler写入exit_statuses_timestamp.yaml实例退出状态汇总由RunBatchProgressManager实时落盘preds.json的写入由 update_preds_file 完成每次写入一个实例格式与 SWE-bench 官方评测工具要求的预测格式一致。多线程环境下用threading.Lock_OUTPUT_FILE_LOCK保证并发安全该函数在 test_swebench.py 中有新建、追加、覆盖三种场景的测试。断点续跑语义默认--redo-existing False时脚本启动会读取已有的preds.json将其中的实例 ID 全部跳过swebench.py。因此已完成实例的判定依据是preds.json而非轨迹文件——如果某些任务卡住即使删掉轨迹也没用必须把对应条目从preds.json中移除若中途CtrlC中止轨迹只在实例完成时保存绝大多数未完成实例重跑即可补上但preds.json里可能出现退出状态为KeyboardInterrupt的条目需要检查清理。并行执行与进度可视化源码级原理批量脚本的核心执行链路swebench.py 与 L243-L271可以概括为load_dataset加载数据集 →filter_instances过滤/切片/打乱 → 读preds.json跳过已完成实例多个-c配置经get_config_from_spec解析后recursive_merge合并命令行--model/--model-class/--environment-class作为最后一层覆盖ThreadPoolExecutor(max_workersworkers)为每个实例提交process_instanceprocess_instance内清理上次残留 → 构建模型 →get_sb_environment拉起环境可执行启动命令→ 包装成ProgressTrackingAgent→agent.run(task)拿到exit_status与submission→ 保存轨迹、写preds.json、通知进度管理器rich.live.Live渲染进度组异常含KeyboardInterrupt统一收集取消未启动的任务。两个值得注意的细节filter_instances的固定种子--shuffle时先按instance_id排序再以seed42打乱swebench.py保证可复现切片使用 Python 原生 slice 语法0:5、3:、:2均可测试覆盖完整test_swebench.pyProgressTrackingAgentcommon.py继承DefaultAgent每个step都会向RunBatchProgressManager上报Step N ($cost)RunBatchProgressManagerbatch_progress.py用 rich 渲染总进度条、每实例状态条与按退出状态聚合的统计表并将实例状态实时写入 YAML 报告。异常兜底process_instance捕获一切异常将exit_status记为异常类名如RuntimeError、model_patch置空并把 traceback 写入轨迹的info字段——评测时这些实例会被判为失败但不会拖垮整个批次。仓库测试 test_swebench.py 专门验证了异常记录与进度管理器通知路径。如何评估结果运行完成后preds.json就是预测产物。官方使用文档docs/usage/swebench.md给出两种评估方式方式一云端评估sb-cli使用 SWE-bench 官方的 sb-cli 免费云评测安装并获取 token 后sb-cli submit swe-bench_verified test --predictions_path preds.json --run_id some-id-for-your-run通常 20 分钟内出结果耗时取决于 SWE-bench 中评测最慢的实例与实例总数无关。方式二本地评估SWE-bench harnesspython -m swebench.harness.run_evaluation \ --dataset_name princeton-nlp/SWE-bench_Verified \ --predictions_path preds.jsonl \ --max_workers num_workers \ --run_id run_id注意本地 harness 期望的预测文件是preds.jsonl而 mini-swe-agent 产出的是preds.json需要先做格式转换将 JSON 对象逐行展开为 JSONL。实用 FAQ 与踩坑指南全局成本上限怎么设置通过环境变量或全局配置设置MSWEA_GLOBAL_CALL_LIMIT全局调用次数上限与MSWEA_GLOBAL_COST_LIMIT全局成本上限详见 全局配置文档。它与配置里的agent.step_limit/agent.cost_limit叠加前者是单实例上限后者是全局熔断。某些实例长时间卡在 Pulling/starting environment / 超时它们很可能正在docker pull镜像——首次拉取大镜像较慢下次运行会立即启动。若因docker pull超时可调大environment.pull_timeoutDocker 环境的默认值是120秒见 docker.py 源码。Docker 出问题了怎么排查运行脚本时控制台会打印 docker 命令可手动执行该命令观察输出再用docker ps确认容器在跑用docker exec -it container-id ls验证容器可交互。HPC 集群没有 Docker 怎么办使用 singularity/apptainer 后端在 agent 配置文件 中设置environment.environment_class: singularity或直接加命令行参数--environment-class singularity。更多环境选型参考 环境指南。能否在环境里执行启动命令可以。使用run.env_startup_command配置项命令以实例字段为模板变量、经 Jinja2 渲染后执行实现见 get_sb_environment测试见 test_swebench.pyrun: env_startup_command: apt-get update apt-get install -y python3-pip也可以引用实例变量例如配合bubblewrap见 bubblewrap 参考这类非预装镜像的环境run: env_startup_command: git clone {{ repo_url }} . --force如何跑自定义数据集只要数据集遵循 SWE-bench 格式且能用datasets.load_dataset(path, splitsplit)加载直接传路径即可mini-extra swebench --subset /path/to/your/dataset --split test小结mini-swe-agent 的 SWE-bench 批量管线把加载数据集 → 按需过滤切片 → 并行拉起 SWE-bench 镜像环境 → 驱动 agent 交互修复 → 产出 SWE-bench 标准预测文件 → 可视化进度与成本串成了一条开箱即用的流水线。掌握swebench批量评测与swebench-single单例调试两个命令及其默认配置的每个字段你既可以复现仓库宣称的 SWE-bench Verified 高分基线也可以把它当作模板用--subset指向自定义数据集、用多个-c叠加自己的模型与模板搭建属于你的批量 agent 评测体系。进一步参考SWE-bench 使用文档、swebench.py API 参考、默认配置 与 批量管线测试。赞分享人工智能大模型AI Agent代码智能体【免费下载链接】mini-swe-agentThe 100 line AI agent that solves GitHub issues or helps you in your command line. Radically simple, no huge configs, no giant monorepo—but scores 74% on SWE-bench verified!项目地址https://gitcode.com/gh_mirrors/mi/mini-swe-agent点击查看免费下载相关推荐mini-swe-agent 实战指南在 SWE-bench 基准上批量运行与单实例调试mini swe agent 实战指南在 SWE bench 基准上批量运行与单实例调试 导读 本指南以 mini swe agent 仓库提供的两个官方脚本人工智能大模型AI Agent代码智能体SWE-agent 如何批量运行 SWE-bench Multimodal 数据集SWE agent 如何批量运行 SWE bench Multimodal 数据集 SWE agent 支持 SWE bench Multimodal 数据集AI AgentAgent 框架代码智能体后端开发工具try工具配置指南打造属于你的Python包试用环境try工具配置指南打造属于你的Python包试用环境 想要快速测试Python包但又不想污染系统环境 try工具是你的终极解决方案这款简单易用的CLI人工智能大模型AI Agent代码智能体上一篇PyCaret与Neo4j图数据库中的ML集成完整指南下一篇Intellij Jvm Options Explained解决内存溢出问题的10个关键参数创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表