Бенчмарк · agentic

Multi-SWE-bench

0 результатов 0 моделей

Multi-SWE-bench проверяет, способен ли ИИ-агент по написанию кода решать реальные задачи (issues) с GitHub во множестве репозиториев и языков программирования, а не только на Python. Главная метрика — resolution rate: доля тестовых экземпляров, чьё исправление проходит скрытый набор тестов.

Подробнее
Пример
Типичная задача: по реальному баг-репорту или запросу функции из open-source проекта на языке вроде Java, Go, Rust, TypeScript, JavaScript, C или C++, вместе с репозиторием, выгруженным на коммите до исправления, агент должен сгенерировать патч, решающий описанную проблему.
Метрика
Каждый экземпляр оценивается по принципу pass/fail через выполнение. Патч агента применяется к репозиторию, и запускаются тесты проекта; экземпляр считается решённым, только если указанные тесты FAIL_TO_PASS теперь проходят, а все тесты PASS_TO_PASS по-прежнему проходят. Итоговый показатель — resolution rate (решённые экземпляры ÷ общее число), обычно при pass@1; его можно разбивать по языкам и по размеченной экспертами сложности (easy/medium/hard).
Приёмка
Приём результата полностью основан на выполнении внутри отдельного Docker-образа для каждого экземпляра, воспроизводящего точный инструментарий языка и зависимости. Сгенерированный патч должен чисто применяться, после чего запускаются тесты fail-to-pass и pass-to-pass; не используется ни оценка с помощью LLM, ни текстовое сравнение с эталонным патчем разработчика.
Почему важно
SWE-bench оказался влиятельным, но охватывает только Python, тогда как реальная разработка ПО ведётся на множестве языков. Multi-SWE-bench проверяет, обобщают ли кодовые агенты навыки между языками на подлинных задачах, с экспертной разметкой сложности, давая более трудный, реалистичный и менее «насыщенный» сигнал практических инженерных способностей.
Разбор примера
Задача
Иллюстративный экземпляр в формате 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 проверку на пустоту, которая возвращает признак ErrEmpty (вместе с нулевым значением типа) ровно так, как ожидает TestPopEmptyReturnsError, оставляя обычный путь извлечения без изменений, чтобы TestPushThenPop и TestLen продолжали проходить. Оценка чисто исполнительная: харнесс применяет патч в Docker-образе экземпляра и помечает экземпляр решённым, только если тест FAIL_TO_PASS начинает проходить и ни один тест PASS_TO_PASS не регрессирует.

По этому бенчмарку пока нет проверенных результатов.