Benchmark · agentic
SWE-Lancer
SWE-Lancer 是一个由 1488 个来自 Upwork 的真实自由职业软件工程任务组成的基准,这些任务对应 100 万美元(USD)的真实报酬;它衡量模型通过完整解决这些任务能「赚到」其中多少钱,评分为赚到的 USD 总额(以及已解决任务的比例)。
了解更多
- 示例
- 一个自由职业风格的修 bug 任务:给定一个真实的(类似 GitHub 的)issue 和该应用的完整 repository,模型必须给出一个 patch,让原本损坏的用户流程重新可用(例如分账或支付界面),并由 end-to-end 测试验证。第二条赛道是管理任务:从若干工程方案中挑选最佳的一个。
- 评分方式
- 每个任务都带有它在 Upwork 上实际支付的真实 USD 价格(约 50 至 32000 美元)。只有当模型的解决方案通过时,它才能赚得该任务的全额价格——单个任务内没有部分得分。核心指标是从 100 万美元资金池中赚到的美元总额,以及已解决任务的百分比;两条赛道(IC 编码与管理)也会分别报告。
- 验证方式
- 编码(IC)任务由 end-to-end 测试(Playwright)评判,这些测试模拟真实用户操作,由专业工程师编写并验证,在隔离的 Docker 环境中运行;模型的 patch 必须通过该任务的全部测试,且模型无法查看或修改这些测试。管理任务在模型选出与当初招聘经理实际选择相同的方案时才算通过。
- 为何重要
- 它把模型表现与真实生产代码库上、由市场定价、具有经济价值的真实工作挂钩,而不是合成或自评的题目。由于评分使用完整的 end-to-end 用户流程(而非孤立的函数级修复),再加上一条管理决策赛道,它能考察前沿模型是否能完成人们真正会付钱给自由职业者的、完整而有价值的工程工作。
示例解析
任务
IC SWE 任务(示例,约 250 美元):当在输入金额之前删除某个参与者时,应用的「Split Bill」界面会把总额显示为 NaN。在带有完整 repository 的 Docker 容器中工作,修复该 bug,使显示的总额回退为 $0.00;一个隐藏的 end-to-end 测试会重放这一用户流程。
解答
```diff
function getSplitTotal(amounts) {
- return amounts.reduce((sum, a) => sum + a.value, 0);
+ return amounts.reduce((sum, a) => sum + (Number(a?.value) || 0), 0);
}
```
解析
删除参与者会留下一条 value 为 undefined 的记录,因此 a.value 会把累加和变成 NaN;用 Number(...) || 0 对每个值做转换会跳过缺失的金额,总额便显示为 $0.00。评分是二元的——只有当 patch 通过该任务针对真实用户流程运行的每一个 end-to-end 测试时,才能赚得该任务的全额 USD 价格。
| 日期 | 模型 | 得分 | 来源 |
|---|---|---|---|
| 2025-03-05 | GPT-4.5 | 32.6% | OpenAI发布GPT-4.5,其为ChatGPT Plus推出的最大模型 |