SWE-Duel:面向编码智能体的自扩展对抗竞技场 SWE-Duel: Towards a Self-Scaling Arena for Coding Agents
两个编码智能体互埋Bug互相修复,任务评测时生成、难度随出题能力自扩展
前置知识
SWE-bench 与仓库级编码基准
SWE-bench 把 LLM 评测从孤立函数补全推进到真实 GitHub 仓库的 issue 修复:智能体拿到仓库与 issue 描述,提交补丁,由仓库既有测试和金补丁对应的新测试判分。后续变体加入自动环境配置、多语言支持与特征添加等能力,但共同点是任务与参考补丁都在评测前公开且固定。
本文的全部动机都建立在"仓库级基准会泄漏与饱和"这一事实上;理解 SWE-bench 的测试驱动判分方式,也直接对应 SWE-Duel 的三方测试门控设计。
基准数据污染(contamination)
指评测集内容进入模型训练语料,使模型"背过答案",评测分数虚高而不再反映真实能力。公开任务迟早被爬取进语料;已有对策包括只收集模型训练截止日期之后的新任务(SWE-bench-Live、SWE-rebench)、对既有任务做动态扰动,或像本文一样让任务在评测时才诞生,从机制上保证不存在可泄漏的文本。
SWE-Duel 的核心卖点是"设计上不可泄漏",理解污染机制才能明白为何任务与 oracle 必须在评测时创建、为何已发布的任务库要被标记退役。
红蓝对抗评估
源自安全领域的评估范式:红方(攻击方)构造挑战,蓝方(防守方)应对,以攻防成败计分。本文将其镜像化:红方在给仓库新增功能时埋入细微 bug 并附上密封的触发测试,蓝方在不被告知有 bug 的前提下评审 PR 并提交修订,双方每轮交换角色,各自积累红蓝两类的胜负记录。
整个竞技场的计分、验证门控与排名全部由红蓝轮次胜负驱动,理解角色定义与互换机制是读懂方法部分的前提。
Bradley-Terry 模型
配对比较统计模型:给每个参与者 $p$ 一个对数强度 $\beta_p$,胜率为 $\Pr(p\ \text{胜}\ q)=\sigma(\beta_p-\beta_q)$($\sigma$ 为 logistic 函数),平局各计半胜,用极大似然从全部比赛结果拟合。配合 bootstrap 重采样可得到名次的概率分布与置信区间,是 Chatbot Arena 等排行榜的标准做法。
论文的主结果表、排名轨迹与消融分析全部以 BT 评分及其 95% 置信区间呈现,不懂 BT 就无法判断"相邻名次不可区分"这类关键结论。
Agent Harness(智能体脚手架)
包住 LLM 的代理循环框架,决定工具调用、上下文管理、命令执行与错误恢复等策略。同一模型配不同 harness 表现可能差别很大,因此本文把(模型, harness)二元组视为一个参赛者:例如 GPT-5.5+Codex CLI 与 GPT-5.5+mini-swe-agent 是两个独立参与者,各有自己的任务库与战绩。
实验中的 11 个参与者都是模型×harness 组合,附录 Q 还专门做了 harness 消融实验,不懂这个概念就无法理解实验设计。
测试预言机与回归测试
预言机指判定程序行为正确与否的可执行判据,本文即三套测试:仓库既有测试 $T_e$(防回归)、红方编写的功能测试 $T_f$(证明功能存在)与密封的 bug 测试 $T_b$(证明 bug 已被移除)。蓝方提交的修订 diff 必须让三者全部通过才算赢。
SWE-Duel 的全部评分都是确定性的测试执行结果,没有 LLM 评委;三套测试各堵一条作弊路径(回滚删功能、留着 bug、改坏旧功能)。
研究动机
几乎所有主流编码基准在发布时就固定了任务集与参考答案:SWE-bench 系列的 issue 与金补丁全部来自公开的 GitHub 历史。这带来两个相互叠加的恶果。其一是泄漏:内容迟早进入后续模型的训练语料,论文引用了标志性事件——OpenAI 在发现前沿模型能够复现 SWE-bench Verified 的金补丁后,已停止在该基准上报告结果。其二是饱和:固定任务集会被更强的智能体逐步解掉,业界只能不断造更难的替代品(如 SWE-Bench Pro),但每个替代品同样从发布那一刻起就开始过时。持续更新类基准 SWE-bench-Live 与 SWE-rebench 通过只收集模型训练截止日期之后的 GitHub issue 缓解泄漏,但任务难度受制于人类开发者的日常问题——任务变新了却没有变难。最新的模型出题方向也有缺陷:BugPilot 收集智能体实现功能时无意引入的回归,但作为固定集合提前生成;SwingArena 让 LLM 互为补丁提交者与测试评审,任务仍取自固定的人类 issue 池、只在评测时生成 oracle。一句话:从基准发布起,它就开始漏题并落后于它本要测量的对象。
本文的目标是论文要回答的中心问题是:能否为编码智能体构造一个自扩展(self-scaling)的基准?作者给出可操作的定义:任务与 oracle 都在评测时才创建,因此不存在预先存在的内容可供泄漏;任务难度由参赛智能体自己的出题能力决定,而非发布时由人类写死,因而原则上能随被测对象一起变强。在此之上,一场红蓝对决应同时覆盖软件工程生命周期的关键能力——需求规格化、功能实现、测试生成、代码评审、缺陷定位与程序修复;评测协议还应像 Chatbot Arena 一样支持新模型以对数级的新增比赛数加入现有排行榜,而不是每次推倒重来。最终论文不仅提出协议,还用 11 个参与者、15 个仓库、50 场比赛、1,500 轮的锦标赛验证该协议可落地、可排名、可扩展,并用 GLM 三版本阶梯实验检验"任务难度随出题能力增长"这一自扩展性核心假设。
与已有工作不同的是,本文的独特切入是把出题权完全交给被测的智能体本身,用镜像红蓝对抗实现"以赛代测"。与最接近的 BugPilot 相比,本质区别在求解者的可见性:BugPilot 的 bug 只有在打破既有测试时才被保留,因此跑一遍测试套件就能暴露它;SWE-Duel 的 bug 恰恰要求所有可见测试通过才被接纳,求解者必须靠阅读代码发现缺陷,修复只能由密封测试确认。与 SwingArena 相比,本文同时拆除了两处人类锚点:任务不是来自固定 issue 池,而是参赛者现场编写;任务有效性不靠人工金补丁校验,而是靠三道可执行验证门加盲自修复。此外论文把"能否产出合格任务"本身计为能力——出题失败的 slot 判对手自动得分,避免幸存者偏差,使出题与解题两个维度都进入同一个 Bradley-Terry 排名。这一设计让"基准难度"第一次成为被测能力的函数,而非基准设计者的选择。
核心方法
直觉上,SWE-Duel 让两个编码智能体在真实仓库上互相"下套":一方在新增功能里藏一个细微 bug,并私下写好触发它的密封测试;另一方在不被告知有 bug 的前提下像评审同事 PR 一样审查并提交修订;修订版只有三套测试全部通过才算赢。技术上,任务形式化为 $C=(\mathcal{R}, s, d, T_f, T_b)$:$\mathcal{R}$ 是固定 commit 的仓库,$s$ 是功能规格,$d$ 是含功能与 bug 的 PR diff,$T_f$ 是功能测试,$T_b$ 是只在含 bug 时失败的密封测试;蓝方只拿公开部分 $\mathrm{pub}(C)=(\mathcal{R}, s, d, T_f)$。设 $S_e,S_f,S_b\in\{0,1\}$ 表示三套测试在蓝方修订 $d'$ 上是否通过,则 $S_{\text{Blue}}=S_eS_fS_b$、$S_{\text{Red}}=1-S_{\text{Blue}}$。所有会话都在同镜像的独立 Docker 容器中运行,红蓝每轮互换,结果用 Bradley-Terry 模型汇总。
核心创新有三层。第一,bug 藏在新功能内部:蓝方无法靠把仓库回滚到原始版本来"修复"bug,因为那样会删掉功能、功能测试 $T_f$ 随即失败;功能保留由 $T_f$ 确定性验证、bug 移除由密封的 $T_b$ 验证、回归由既有测试 $T_e$ 验证,三套测试共同堵死所有作弊路径。第二,上下文隔离的三会话出题流水线加三道可执行验证门:会话 A 只实现功能,A 门保证功能在无 bug 时正确;会话 B 在全新上下文中只凭功能规格与干净 diff 埋 bug,B 门要求 bug 真实存在($T_b$ 在 $d$ 上失败)且对所有可见测试隐身($T_e, T_f$ 在 $d$ 上仍通过);会话 C 要求出题者自己的全新实例仅凭公开包 $\mathrm{pub}(C)$ 盲修成功——这排除了不可解题,但也意味着任务难度上限被锚定在作者自身的解题能力上,作者称之为可解性与难度之间的刻意权衡。第三,自扩展性由机制保证:任务与 oracle 都在评测时诞生、无先验内容可泄漏;难度由参赛者的出题能力决定;出题失败的 slot 记对手自动得分,既防幸存者偏差又把任务创作纳入被测能力。
方法步骤详情
第一步,任务库构建:每参与者每仓库 1 个 slot、最多 5 次尝试,首个通过全部门控的任务入库供锦标赛复用,耗尽则永久置空。Session A(功能实现):红方自选模块实现新功能,写规格 $s$ 与功能测试 $T_f$,输出干净 diff $d_f$;A 门要求 $T_e$、$T_f$ 在 $d_f$ 上全过。Session B(bug 嵌入):全新会话只拿 $s$ 与 $d_f$,在功能代码里埋 bug 得最终 diff $d$ 并写密封测试 $T_b$;B 门要求 $d$ 可编译、$T_e$/$T_f$ 仍全过、$T_b$ 在 $d_f$ 上过而在 $d$ 上挂。Session C(盲自修复):同款参与者的全新实例只拿 $\mathrm{pub}(C)$ 盲修,仅当三套测试全过才接纳。第二步,对决:蓝方在相同镜像评审 PR(不告知有 bug);三套测试按硬连击判分,蓝方败因有三——bug 带病上线、改崩功能、破坏旧行为。第三步,循环赛:一场 30 轮,全轮换红蓝,缺席任务判蓝方自动赢。第四步,BT 拟合加 1,000 次 bootstrap 给出评分与名次区间。
技术新颖性
技术新颖性可从四个对照看清。(1) 对照静态与动态更新基准:SWE-bench-Live 等只是换新任务,难度仍由人类历史决定;扰动类方法保留原任务与原解;SWE-Duel 的任务与 oracle 在评测时生成,泄漏在机制上不可能发生。(2) 对照 BugPilot:其 bug 是智能体无心之失、以打破既有测试为保留条件,随智能体更可靠产量会下降;本文 bug 是故意的、产量不依赖犯错,且对所有可见测试隐身,逼评审读代码而非跑测试。(3) 对照 SwingArena 与 CDBench:前者任务来自固定人类 issue 池、评审测试要用人类金补丁校验;后者给防守方看变异 diff 且变异只是局部编辑;本文任务全由智能体现场创作,密封测试加盲自修复门控在无金补丁前提下同时保证任务可解与判分公平,这是对抗式基准设计长期缺失的一环。(4) 对照把自博弈用于训练的 Self-play SWE-RL:本文将对抗用于评测,并首次把"出题难度随作者能力增长"作为可检验命题,GLM 阶梯实验给出 42.9% 对 4.0% 的直接证据。
实验结果
锦标赛:11 参与者、15 仓库、50 场、1,500 轮。GPT-5.5+Codex CLI 以 BT +2.82 夺冠,蓝胜 98.7%,是最强解题者;Opus 4.8+mini-swe-agent 以 +2.46 居次,红胜 27.3% 约为 GPT-5.5 两参与者的两倍多,是最强出题者;中游 Kimi/DeepSeek/GLM-5.2 相邻名次的 95% 区间全部重叠。蓝方总成功 87.9%;1,219 争议轮 85.1%:1,037 干净修复、158 bug 带病上线、24 改崩。GLM-5.2 作固定参考盲解 134 任务失败 15 个(11.2%),与赛事红胜率 Spearman ρ=0.66;Opus 4.8 以 26.7% 保持最强,Kimi 从 17.9% 跌至 0/13。自适应难度阶梯:GLM-5.1/5.2/5.3 出题被固定解题者 DeepSeek V4 Pro 盲解的失败率为 8.3%/0.0%/42.9%(趋势 p=.015,Fisher p=.005)。晚入场 Gemini 仅 5 场即垫底且不扰动原排序 τ=1.0;接纳池化修复率 91.7%。
查看结构化数据
| 任务 | 指标 | 本文 | 基线 | 提升 |
|---|---|---|---|---|
| 循环赛综合排名(11 参与者,50 场 1,500 轮) | Bradley-Terry 对数强度 | GPT-5.5 + Codex CLI:+2.82(第 1 名) | 次名 Claude Opus 4.8 + mini-swe-agent:+2.46;末位 Gemini 3.1 Pro:-4.55 | 领先次名 +0.36(CI 重叠,名次不显著);领先末位 +7.37 |
| 蓝方盲修复任务(争议轮) | Blue 胜率 | GPT-5.5 + Codex CLI:98.7%(争议轮 98.3%) | 全场争议轮均值 85.1%;垫底 Gemini 3.1 Pro 61.8% | 高于全场均值约 13.6 个百分点 |
| 红方出题(让对手修不好) | Red 胜率 | Claude Opus 4.8 + mini-swe-agent:27.3% | 两个 GPT-5.5 参与者 11.3% / 10.4% | 约为最强解题者的 2.4 倍 |
| 任务难度随出题能力扩展(GLM-5.1→5.2→5.3 阶梯) | 固定解题者(DeepSeek V4 Pro)盲解失败率 | GLM-5.3 出题:42.9%(6/14) | GLM-5.1 与 GLM-5.2 合并:4.0%(1/25) | 约 10 倍(Fisher p=.005;Cochran-Armitage 趋势 p=.015) |
| 出题能力中性化测量(134 个锦标赛任务) | 固定参考解题者(GLM-5.2)失败率 | 全场 11.2%(15/134);Opus 4.8 出题 26.7% 最高 | 赛事内红胜率(Kimi 17.9% 对参考跌至 0%) | 两标尺 Spearman ρ=0.66,验证红胜率主要是任务属性而非对阵运气 |
| 晚入场新参与者(Gemini 3.1 Pro) | 新增比赛数与既有排名一致性 | 仅 5 场($243)即获一致排名 | 全循环需 10 场(估计 $379) | 评估成本省约三分之一,且不扰动既有排序(Kendall τ=1.0) |
局限与改进
作者承认的局限:其一,统计分辨率不足——相邻名次 95% 区间全部重叠,Kimi 与 DeepSeek 排序仅因一场之差;每参与者仅 5–15 个任务,固定参考实验区间很宽。其二,可解性与难度的权衡:Session C 盲自修复门意味着任务不可能比作者自己的解题能力更难,封死了"超出作者水平"的难题。其三,GLM 阶梯仅一个家族三档,同族共享训练谱系与盲区,难度并非严格逐版本单调。其四,密封 oracle 有 6.0% 假阴性,全部来自两个 Go JWT 任务对修复实现过度具体的要求。其五,红胜集中:Nemotron 十个争议红胜中九个来自单个 gorilla/csrf 任务,出题能力估计方差极大。我的补充观察:87.9% 的总蓝胜率说明现有任务对前沿模型整体偏易,15 个中小型仓库表达力有限,不扩展则竞技场可能提前饱和;缺陷类型由出题模型自报且偏向逻辑/安全类"文档-代码不一致"式 bug;"任务库退役"政策使历史结果不可直接复核;全赛程与争议轮两种估计量给出不同排名(Nemotron 第 9 与第 3),结论对计分约定敏感;出题分类元数据缺少独立校验。
独立分析的弱点
独立弱点与改进方向:(1) 难度天花板受制于作者解题能力——当前沿模型解题趋同时,出题难度被 Session C 门控封顶,饱和风险真实存在。改进:短期扩大仓库规模,长期改用带特权信息的可解性检查(告知 bug 存在或类型),或引入外部强解题者做接纳验证。(2) 出题能力估计方差过大:每参与者仅 5–15 个任务,Nemotron 红胜集中在单个任务,bootstrap 区间跨度可达 45 个百分点。改进:增加 slot 数与仓库多样性,或用任务级贝叶斯分层模型收缩估计。(3) 缺陷类型覆盖偏窄且自报分类未经独立校验。改进:按类型配额出题,并由独立审计模型复核分类与密封测试质量。(4) 出题成本高产出低:MiniMax 覆盖率仅 33.3%,出题占锦标赛成本 31.8%,弱模型几乎无法参赛。改进:便宜模型起草加强模型验证的两级出题。(5) 测试执行是吞吐瓶颈:SQLAlchemy 套件单跑 161.8 秒,更大仓库会让验证门不可行。改进:失败优先的测试子集选择。(6) 防泄漏依赖"发布即退役"的社会约定,无法阻止他人用旧任务训练。改进:参数化扰动、随机化 commit 并水印化任务。
未来方向
作者明确提出的方向:一是改造可解性检查使其不再依赖出题者的盲自修复——例如允许自修复会话知道 bug 存在或其类型,使任务可以比作者的盲检能力更难,从根上解除难度上限;二是把仓库域扩展到更大、更复杂的代码库,以拉开前沿模型差距并延缓饱和;三是红蓝迁移研究,为每个出题者冻结共同任务子集后再比较解题者,区分"任务难度"与"解题者适配";四是更细粒度的排序研究,支撑名次级别的显著性声明。基于本文成果可自然延伸:把 GLM 阶梯变成常设机制,每当新版本模型发布就重跑一次固定解题者测量,把"难度随能力扩展"变成持续追踪的公开曲线;将出题能力作为强化学习目标(对抗式自博弈出题训练);系统研究模型与 harness 的匹配(当前消融因样本不足无显著差异);让出题由多智能体团队协作完成,检验协作能否产出更隐蔽的缺陷;以及把 SWE-Duel 信号用于安全研究——27.3% 的"测试全绿但仍带毒"红胜率本身就是对自动化代码评审可靠性的警示。
复现评估
复现条件相当友好。开源情况:作者公开了 SWE-Duel 工具包、实验数据集与在线排行榜(sweduel.github.io/SWE-Duel),既可从零启动自己的锦标赛,也可把新智能体加入现有榜单。环境:所有智能体、验证门与判分器运行在基于同一仓库镜像的独立 Docker 容器,仓库 pinned commit;模型经 OpenRouter API 访问(2026-06-18 至 08-30),温度固定 0.2,每会话 50 步预算、30 分钟墙钟上限、3 轮恢复。算力:无需本地 GPU,瓶颈是 API 费用——完整 50 场锦标赛共 $2,109,晚入场 $243,GLM 阶梯两个新档位总共仅 $15.27;个人研究者用 2 参与者×3 仓库的小型对决几百美元即可跑通。难度评估:工程复刻中等偏上,需实现三道验证门、任务库管理、BT 拟合与主动采样(好在代码已开源);但按防泄漏政策,任何复现研究都应重新生成任务库,且 134 个任务的具体内容不完整公开,故结果无法逐字复现,只能复现协议与统计结论;模型 API 的版本漂移也会引入偏差。总体属于"协议可复现、数字需重测"的类型。
论文图表
各语言已接纳任务的缺陷类型分布堆叠图,逻辑与安全类占主导;作者强调该分布反映生成库而非人类软件的真实缺陷率。
说明出题模型倾向生成哪类缺陷,是解读难度数据与类型覆盖局限的背景。
BT 评分对总 API 成本与输出 token 数的散点图:GPT-5.5+Codex 花费 $641.89 最贵(约为次名的 2.6 倍);作者强调这是观察性关联而非受控效率比较。
诚实展示成绩与花费的相关性,提示排名未做算力归一。