configs/swe-bench-smoke.plan.yaml —— 3 个真实的
SWE-bench Verified 实例,oracle 模式(gold patch 回放,零 LLM 花费)——
完成一次完整的真实云流程:AgentRun 托管的 agent 产出 predictions,上游 swebench
harness 在 ECS 驱动机上用 Docker 评测,结果经 OSS 回到你的笔记本。
计划文件的形状已经离线验证过:tests/test_swe_submit_e2e.py 用真实的
csbench submit 代码路径提交这个文件本身,并以 mock 模式端到端执行其中的任务条目。
只有真实运行才能验证的是接线本身 —— Docker、数据集下载、AgentRun 调用、计费 ——
这正是本 Runbook 的目的。
前置条件
- 阿里云余额 ≥ ¥100。 低于该余额时后付费 ECS 创建会被拒绝 —— submit 会在
terraform apply阶段以一个看似配额问题的报错失败。 - RAM 凭证。 主账号 AK 供 terraform 使用(
ALICLOUD_ACCESS_KEY/ALICLOUD_SECRET_KEY/ALICLOUD_REGION);controller 自身的 SDK 调用走controller.tf创建的子账号实例角色。 configs/agent-runtime-aliyun.local.yaml(已 gitignore,绝不提交),需包含target.region、target.blob_bucket、target.auth_env下的凭证环境变量名, 以及用于遥测的target.arms_license_key。- 该本地配置中必须写
target.mode: real。 缺失时 suite 桥接默认走 mock —— 你会为一个全价 ECS campaign 付费,而它只是在回放内置 fixture (提交带suite:任务且非 real 时,csbench submit会打印醒目警告)。 - ARMS license key 写在该本地配置中(trace/metric 上报)。
- 仅
llm模式 —— key 投递在 prod submit 路径上尚未接线。DASHSCOPE_API_KEY必须在 provision 时刻存在于驱动机的环境里:SUT client 会把它转发进 CreateAgentRuntime 的 provision env,但今天的 prod cloud-init 不会把它送到驱动机上。两个可行方案:(i) 以controller_debug=true提交, SSH 登录 controller,在 campaign 认领 suite 任务之前 在 orchestrator 的环境里export DASHSCOPE_API_KEY=...;或 (ii) 用本地驱动(非 submit)的执行方式跑 llm 模式,让你自己的 shell 环境携带该 key。oracle 模式完全不需要 LLM key。
计划文件
configs/swe-bench-smoke.plan.yaml(已提交;只含占位符 —— 真实值全部放在
gitignore 的本地配置里):
driver_image.py):通就直连(境外/未被墙的区),不通就走账号自己的
ACR 端点,都不通就大声中止 —— 决策写进 campaign 日志。只有想强制指定某个镜像时才
设 driver.docker_registry_mirror。未知的 driver: 键会在 submit 时被直接拒绝。
命令序列
真实运行验证清单(8 项)
首次真实运行请逐项核对 —— 每一项都覆盖一个 mock 模式测试无法触达的接缝:- Harness 报告文件名与键。 安装
swebench>=3.0时,报告写在<report_dir>/<model_name>.<run_id>.json(模型名中的斜杠会变成__),顶层键为resolved_instances/total_instances/resolved_ids。schema 漂移会让 suite 大声失败 —— 这一项通过即证明版本兼容。 - 数据集经 HF 镜像自动下载。
princeton-nlp/SWE-bench_Verified必须经由hf_endpoint(hf-mirror.com)下载,而不是卡死在 huggingface.co。在 controller 日志里确认下载记录。 - oracle → resolved == N。 gold patch 回放必须解决全部 3 个实例
(
swe-bench.resolved == 1.0)。任何缺口都是环境或 harness 问题,绝不是 “agent 质量”。 - Docker 镜像占用。 harness 会为每个实例构建数 GiB 的镜像。在驱动机上用
docker system df确认 120 GiB 磁盘余量充足。 sys.executable解析。 harness 以sys.executable -m swebench.harness.run_evaluation方式拉起 —— controller 上 它就是 cloud-init 安装的系统 python3.11(没有 venv)。确认swebench在其中 可导入:它由计划驱动的 extras 安装(计划里任何suite:任务都会把[swebench]extra 加进 controller 依赖)。- placement 保持 local。 驱动机上
driver.placement == "local"—— harness 容器必须跑在 Docker 所在之处;其他取值会被 suite 硬性拒绝。 - 容器命名与 teardown 匹配。 harness 容器名为
sweb.eval.<instance_id>.<run_id>;suite teardown 通过docker ps --filter name=<run_id>清理。确认 run_id 出现在活跃容器名里, 这样清理只命中本次运行的容器,不会误伤。 - Harness stderr 透出。 制造(或检查任意一次)失败:报错必须携带 harness stderr 的最后 2000 个字符 —— 是真实原因,而不是一个裸的退出码。
国内 region 的坑
- Docker Hub 通断自动处理。 驱动机启动时自己探测并据此路由(直连 / ACR / 大声中止),
没有任何按账号的镜像地址要填。阿里云的镜像加速器(
<id>.mirror.aliyuncs.com) 刻意不用 —— 它没有 OpenAPI,工具取不到;需要时改用账号自己的 ACR 端点 (get_instance_endpoint)。注意国内区还会挡住 GitHub(克隆仓库):若驱动机报告 blocked 策略,请换一个出口直连的区,或预先把镜像灌进 ACR。 - huggingface.co 不稳定。 保持
driver.hf_endpoint: https://hf-mirror.com供数据集自动下载。 - NAT 网关 + EIP 按小时计费。 拉取结果后立即 teardown —— 不要让跑完的 campaign 基础设施空转过夜。
- FC 冷启动约 86 秒。 把多个任务合并进同一个 campaign 摊薄冷启动, 不要一个任务一个 campaign。
预期结果
解读结果
csbench fetch 会把每个任务写成一个 JSON 记录(产生时间序列的任务另有 parquet
边车)放进 --dest。然后:
swe-bench.resolved 和(llm 模式下的)
swe-bench.cost_per_resolved;provenance.suite_id == "swe-bench";
provenance.scaffold 与上表一致。原始记录(suite:swe-bench.json)还带有
artifact 清单 —— predictions、results、trajectory、usage 文件及其 sha256 哈希。