Benchmark · agentic
Multi-SWE-bench
Multi-SWE-bench 衡量 AI 编码智能体能否在多个代码仓库和多种编程语言(而不仅是 Python)中解决真实的 GitHub issue。核心指标是解决率(resolution rate):修复能使隐藏测试集通过的任务实例所占的百分比。
了解更多
- 示例
- 一个代表性任务:给定来自开源项目的真实缺陷报告或功能请求(项目使用 Java、Go、Rust、TypeScript、JavaScript、C 或 C++ 等语言),并附上检出到修复前提交的仓库,智能体必须生成一个修复所述问题的代码补丁。
- 评分方式
- 每个实例通过执行以通过/失败方式评分。将智能体的补丁应用到仓库并运行项目测试;仅当指定的 FAIL_TO_PASS 测试现在通过、且所有 PASS_TO_PASS 测试仍然通过时,该实例才算解决。上报分数为解决率(已解决实例 ÷ 总数),通常按 pass@1 计算,并可按语言和专家标注的难度(easy/medium/hard)细分。
- 验证方式
- 验收完全基于在每个实例专属的 Docker 镜像中执行,该镜像精确复现语言工具链和依赖。生成的补丁必须能干净地应用,然后运行 fail-to-pass 与 pass-to-pass 测试;不使用 LLM 评判,也不与开发者的黄金补丁做文本比较。
- 为何重要
- SWE-bench 影响深远,但仅限 Python,而真实的软件工程涉及多种语言。Multi-SWE-bench 检验编码智能体能否在真实 issue 上跨语言泛化,并带有专家难度标注,从而为实用软件工程能力提供一个更难、更贴近现实且更不易饱和的信号。
示例解析
任务
Multi-SWE-bench 格式的示例实例——语言:Go,一个小型泛型集合库。problem_statement:「Stack.Pop() 在空栈上返回零值和 nil 错误,会悄悄掩盖调用方的错误;它应改为返回哨兵值 ErrEmpty。」给你处于含缺陷基础提交的仓库以及失败的测试。FAIL_TO_PASS:TestPopEmptyReturnsError。PASS_TO_PASS:TestPushThenPop、TestLen。请提交一个补丁,使失败的测试通过,同时不破坏已通过的测试。
解答
--- a/stack.go
+++ b/stack.go
@@ func (s *Stack[T]) Pop() (T, error) {
+ if len(s.items) == 0 {
+ var zero T
+ return zero, ErrEmpty
+ }
n := len(s.items)
v := s.items[n-1]
s.items = s.items[:n-1]
return v, nil
}
解析
该修复在 Pop 中加入了空检查,按照 TestPopEmptyReturnsError 的预期返回哨兵值 ErrEmpty(连同该类型的零值),同时保持正常出栈路径不变,使 TestPushThenPop 与 TestLen 继续通过。评分纯粹基于执行:测试框架在该实例的 Docker 镜像中应用补丁,仅当 FAIL_TO_PASS 测试转为通过且没有任何 PASS_TO_PASS 测试回退时,才将该实例标记为已解决。
该 benchmark 暂无已验证的得分。