HAVE AI NEWS HAVE AI NEWS
tg subscribe
Исследования

«Я уверен на 100%»: почему самооценка нейросетей не заменяет unit-тесты

«Я уверен на 100%»: почему самооценка нейросетей не заменяет unit-тесты

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

Слепая уверенность алгоритмов

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

Вместо ручного код-ревью или прогона автотестов гипотеза предполагала простой фильтр: если модель в конце ответа ставит метку CONFIDENCE: SURE — решение принимается, если CONFIDENCE: UNSURE — отправляется на доработку. Однако на практике фильтр пропустил бы все баги в продакшен, так как очередь на перепроверку осталась абсолютно пустой.

Как проходило тестирование

Для эксперимента были подготовлены 20 практических задач на стандартной библиотеке Python 3.9. Каждая формулировка содержала неочевидные граничные условия (например, правила слияния смежных диапазонов, валидацию символов IPv4 или корректное округление размеров файлов). Решения проверялись скрытым набором из 247 тестов.

В промпте строго оговаривалось: возвращать статус SURE разрешено только при полной убежденности, что функция закроет все крайние случаи и пройдет жесткое тестирование. Запросы отправлялись через сторонний API-шлюз к трем моделям (по три генерации на задачу):

Идентификатор моделиОтветовУспешные тестыSUREUNSUREОшибочные SURE
gpt-6.1-sol60606000
claude-haiku-5-560596001
glm-5.3-flash59565903
Всего17917517904

Итоговая доля ошибок составила скромные 2,2%, но ключевая проблема в другом: все 4 бракованных решения получили от моделей наивысшую оценку качества.

Ошибки, в которых нейросети не сомневались

Сломались решения не на экзотических сценариях, а на вполне тривиальных операциях:

  • Сдвиг индексов в парсинге дат. Модель glm-5.3-flash написала подробные комментарии о защите от некорректных форматов, но затем попыталась распарсить строку YYYY-MM-DD срезами без учета дефисов: year = int(s[0:4]), month = int(s[4:6]), day = int(s[6:8]). В результате стандартная дата упала с ValueError на первом же вызове.
  • Схлопывание относительных путей. При задаче сохранить переход ../../a та же модель положила первый переход .. в стек, а на втором просто сделала pop(), не проверив содержимое. Двойной подъем по директориям взаимно уничтожился, превратившись в a. Ошибка повторилась в двух прогонах из трех.
  • Классический off-by-one. Модель claude-haiku-5-5 при форматировании объема данных ошибочно сдвинула индекс массива единиц: при передаче 1024 байт функция выдала 1.0 MiB вместо 1.0 KiB, провалив 11 из 14 тестов.

Ограничения эксперимента и выводы

Делать однозначные выводы о превосходстве конкретных архитектур на этой выборке нельзя: 20 задач — скромная база, а вызовы шли через агрегатор с неконтролируемым контекстом (число входных токенов между моделями различалось на порядок). Кроме того, в выборку не попали результаты deepseek-v4-flash из-за регулярных тайм-аутов и обрезанных ответов API.

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

Автор: zach882 часа назад

Источник: habr.com