Как стать автором
Обновить
58.21

Как мы собираем SWE-bench на других языках

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров652

Современная разработка ПО — это плавильный котел языков: Java, C#, JS/TS, Go, Kotlin… список можно продолжать. Но когда дело доходит до оценки ИИ-агентов, способных помогать в написании и исправлении кода, мы часто упираемся в ограничения. Популярный бенчмарк SWE-bench, например, долгое время поддерживал только Python.

Чтобы преодолеть разрыв между реальностью разработки и возможностями оценки ИИ, наша команда в Doubletapp взялась за адаптацию SWE-bench для множества языков программирования. Меня зовут Кирилл Увенс, и в этой статье я расскажу, как мы подходим к этой задаче и почему считаем ее важной для всей индустрии.

Что такое SWE-Bench

SWE-bench (Software Engineering Benchmark) — это бенчмарк для оценки ИИ-агентов на реальных задачах. Он основан на тщательно отобранных issue и pull request’ах из популярных open source-репозиториев на GitHub.

Каждая задача в SWE-bench состоит из описания проблемы (issue), решения проблемы (pull request) и набора тестов, которые проверяют, решена ли проблема. Задача ИИ-агента — на основе issue и кода проекта сгенерировать такое решение, которое бы проходило все тесты. В отличие от бенчмарков, фокусирующихся на скорости, SWE-bench оценивает инженерные навыки: понимание существующего кода, генерацию нового кода, отладку, исправление багов и рефакторинг.

Задачи отбираются в несколько этапов. Сначала выбираются подходящие репозитории, затем фильтруются pull request’ы. Учитываются только связанные с issue и вносящие изменения в тесты. После этого проверяется, проходят ли все тесты после исправления. В результате получается инструмент, который обеспечивает объективное сравнение ИИ-агентов и способствует их развитию для реального применения в разработке.

Изначально SWE-bench был ориентирован на Python, что ограничивало круг задач, на которых тестировали ИИ-агентов. В основном это касалось областей, связанных с анализом данных, но не охватывало другие важные направления, где используются другие стеки и языки. Одним из первых шагов к расширению стал Java-вариант SWE-bench. Он показал востребованность такого подхода и дал старт работе над многоязычной версией. Это расширение отвечает растущей потребности в универсальных методах оценки ИИ-агентов для работы с разными языками и контекстами.

Расширенный SWE-bench — это не просто академический тест, а мощный практический инструмент с широким спектром применения. Для компаний и команд разработки он становится компасом в мире ИИ-агентов. Нужен новый инструмент для рефакторинга или автоматической отладки? SWE-bench предоставляет единую и прозрачную основу для сравнения разных ИИ-агентов на реальных задачах, помогая выбрать тот, что лучше всего справится с вашими технологиями и требованиями. Это прямой путь к улучшению качества кода и ускорению циклов разработки.

Для исследователей и разработчиков ИИ SWE-bench — это и линейка для измерения прогресса, и микроскоп для анализа полученных результатов. Он позволяет отслеживать, как развиваются технологии автоматизации программирования, какие подходы наиболее перспективны, а также детально выявлять сильные и слабые стороны конкретных моделей. Это бесценная обратная связь для итеративного улучшения ИИ-агентов и повышения их конкурентоспособности.

Наконец, для инженеров и тимлидов понимание того, на что реально способен ИИ-агент, упрощает его интеграцию в рабочие процессы. Это дает возможность безопасно автоматизировать рутинные процессы, снизить нагрузку на разработчиков и направить их экспертизу на решение действительно сложных и нетривиальных задач.

Какие сложности возникают при сборе данных и тестировании

Работа с реальными задачами — одно из ключевых преимуществ SWE-bench, но одновременно и источник определенных сложностей. Проблемы из проектов часто неоднозначны и многослойны, поэтому их трудно обрабатывать автоматически. Для надежного тестирования ИИ-агентов требуется разработка методов, которые оценивают качество решений не только формально, но и по существу.

Дополнительные сложности создает разнообразие подобного рода задач. SWE-bench охватывает широкий спектр тем — от отладки и рефакторинга до добавления нового функционала. Нет универсального способа тестировать все типы задач, поэтому для них разрабатывают разные подходы.

Отдельная сложность — оценка качества решений. Не всегда легко определить, правильное ли решение предложил ИИ-агент. Поэтому в SWE-bench используют несколько типов тестов:
pass-to-pass проверяют стабильность кода после изменений
fail-to-pass проверяют корректность изменений в коде проекта

В дополнение требуются метрики, которые адекватно отражают качество решения и механизмы ручной перепроверки.

Наконец, поддержка и развитие SWE-bench требует значительных вычислительных и человеческих ресурсов. Необходимы средства на вычисления, инфраструктуру, а также команда специалистов для сопровождения бенчмарка, тренировки ИИ-агентов, проверки результатов и расширения покрытия задач. Без этих ресурсов масштабирование и повышение качества бенчмарка невозможны.

Наш опыт: какие языки поддерживает SWE-bench

Для адаптации SWE-bench под другой язык программирования важно учитывать:
технологический стек
наличие открытых проектов с активным сообществом и накопленной историей задач.

Мы уже провели предварительную адаптацию SWE-bench для нескольких языков помимо Python. В рамках пилотных проектов собирались данные и тестировались модели на Java, C#, PHP, JS/TS, Ruby, Kotlin, C++, Go. Эти эксперименты показали, что подходы оригинального бенчмарка масштабируются на другие языки с сохранением точности и практической ценности оценок.

Ручная перепроверка, или SWE-bench Verified

Задачи в SWE-bench часто сложные и неоднозначные, поэтому автоматического тестирования может быть недостаточно. Чтобы бенчмарк отражал качество решений, применяется ручная перепроверка — на этом основана концепция SWE-bench Verified. Она включает валидацию каждой задачи специалистами для проверки корректности и полезности собранных задач.

Разрабатываются методологии ручной перепроверки с учетом особенностей конкретных языков программирования. Это особенно важно, поскольку автоматические средства не всегда выявляют, решаема ли задача в принципе, правильно ли она сформулирована и соответствует ли целям оценки. Здесь решающую роль играет экспертная оценка — без нее невозможно гарантировать высокое качество бенчмарка.

Каковы цели ручной перепроверки? Для начала ручная перепроверка помогает убедиться в корректности автоматической оценки. Даже точные метрики могут давать сбой — например, из-за неудачных формулировок issue или пограничных случаев в логике тестов. Затем выявляются и устраняются ошибки в бенчмарке: например, дублирующиеся задачи, неточные описания, неоднозначные критерии оценки. Когда каждая задача проверена экспертом, это делает SWE-bench надежным и авторитетным инструментом для оценки сторонних моделей и для работы над собственными ИИ-агентами.

Сравнение SWE-bench с другими бенчмарками для разработки ПО

SWE-bench — не единственный инструмент для оценки ИИ-моделей в контексте программирования. Существует ряд бенчмарков, каждый из которых решает свои задачи и предлагает собственных подход к измерению эффективности. Рассмотрим основные альтернативы, чтобы понятия отличия SWE-bench.

Бенчмарк

Фокус

Типы задач

Языки программирования

Метрики оценки

Ручная перепроверка

SWE-bench

Комплексные задачи Software Engineering

Понимание кода, генерация, исправление ошибок, рефакторинг

Python (основной)

Успешность решения, качество кода (SWE-bench Verified)

Да

HumanEval

Генерация кода по текстовому описанию

Генерация функций на основе docstrings

Python

Прохождение автоматических тестов

Нет

MBPP

Генерация кода по текстовому описанию

Генерация функций на основе текстового описания

Python

Прохождение автоматических тестов

Нет

CodeSearchNet

Поиск кода по текстовому описанию

Поиск релевантного кода по текстовому запросу

Python, Java, Go, JavaScript, PHP, Ruby

Точность поиска, релевантность

Нет

Defects4J

Исправление ошибок в коде

Исправление ошибок в реальных проектах

Java

Успешность исправления, количество исправленных ошибок

Да (частично)

  • HumanEval сосредоточен на генерации кода по текстовому описанию — в основном на Python. Он широко используется, но ограничен простыми, локализованными задачами.

  • MBPP также работает с Python и проверяет способность модели писать короткие программы начального уровня.

  • CodeSearchNet ориентирован на поиск кода по описанию, охватывая сразу несколько языков — Python, Java, Go, JavaScript, PHP и Ruby.

  • Defects4J предлагает задачи по исправлению реальных ошибок в проектах на Java, фокусируется на ограниченном числе проектов и типов ошибок.

  • HumanEval-V добавляет мультимодальность, остается относительно небольшим по объёму и также сосредоточен на Python.

На этом фоне SWE-bench выделяется сразу по нескольким направлениям. Во-первых, он работает с комплексными задачами, близкими к реальным задачам Software Engineering, а не к отдельным фрагментам кода или синтетическим сценариям. Во-вторых, благодаря концепции SWE-bench Verified, бенчмарк сочетает автоматическую оценку с ручной перепроверкой, что значительно повышает точность и доверие к результатам. И в-третьих, все задачи в SWE-bench взяты из реальных pull request'ов и issue на GitHub, что делает их практически значимыми и релевантными для реальных проектов — в отличие от бенчмарков, собранных в лабораторных условиях.

Таким образом, SWE-bench служит не просто тестом на генерацию кода, а полноценной средой для оценки ИИ-агентов в условиях, максимально приближенных к реальной разработке.

Ценообразование SWE-bench: как формируется стоимость одного датапойнта

Стоимость получения результата для одной задачи в SWE-bench (или одного датапойнта) не высечена на камне — она варьируется в зависимости от сложности и глубины необходимой оценки. Мы подходим к этому вопросу гибко и адаптируемся под реальные потребности и бюджеты.

Ключевых переменных две: сложность задачи и тип тестирования. Простая ошибка требует меньше ресурсов для анализа, чем реализация сложного функционала. Аналогично, автоматическая проверка тестов — это один уровень затрат, а тщательная ручная валидация экспертом — совсем другой, обеспечивающий максимальную достоверность.

Помимо этого, мы учитываем масштаб проекта. Тестирование на большом объеме задач открывает возможности для оптимизации и пакетных условий, в то время как для пилотных запусков или проверки специфических гипотез может подойти и оценка отдельных датапойнтов. Индивидуальные требования — будь то фокус на конкретных технологических стеках, работа с определенными репозиториями или нестандартные метрики оценки — также влияют на итоговую конфигурацию и стоимость.

Мы всегда подбираем оптимальный формат сотрудничества. Ориентировочная стоимость одного датапойнта начинается от нескольких долларов и доходит до сотни — в зависимости от сложности задачи и выбранного формата тестирования. Финальная оценка формируется индивидуально и уточняется на этапе согласования проекта.

Заключение

Расширенная версия SWE-bench — это инструмент для оценки ИИ-агентов, адаптированный под реальные задачи разработки и поддерживающий широкий спектр языков программирования. При необходимости использование бенчмарка может сопровождаться экспертной поддержкой: от подбора релевантных задач до интерпретации результатов и настройки рабочих процессов. Такой подход делает SWE-bench практическим инструментом для принятия решений, повышения качества моделей и построения эффективных решений на стыке разработки и ИИ.

Теги:
Хабы:
+4
Комментарии0

Публикации

Информация

Сайт
doubletapp.ai
Дата регистрации
Дата основания
Численность
51–100 человек
Местоположение
Россия