Современная разработка ПО — это плавильный котел языков: 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 охватывает широкий спектр тем — от отладки и рефакторинга до добавления нового функционала. Универсального способа тестировать все эти типы задач не существует, поэтому разрабатываются разные подходы для разных из них.
Отдельная сложность — оценка качества решений. Не всегда легко определить, правильное ли решение предложил ИИ-агент. Иногда используют несколько типов тестов. Например, 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 практическим инструментом для принятия решений, повышения качества моделей и построения эффективных решений на стыке разработки и ИИ.
Автор: JDTapp