Слепая уверенность алгоритмов
Попытка переложить валидацию кода на саму нейросеть оказалась провальной стратегией. Идея проверить, способна ли языковая модель честно признать неуверенность в написанном скрипте с помощью специального маркера, показала стопроцентную склонность ИИ к самонадеянности: из 179 решений задач на Python ни одна модель ни разу не выбрала статус сомнения, хотя часть программ содержала грубые ошибки.
Вместо ручного код-ревью или прогона автотестов гипотеза предполагала простой фильтр: если модель в конце ответа ставит метку CONFIDENCE: SURE — решение принимается, если CONFIDENCE: UNSURE — отправляется на доработку. Однако на практике фильтр пропустил бы все баги в продакшен, так как очередь на перепроверку осталась абсолютно пустой.
Как проходило тестирование
Для эксперимента были подготовлены 20 практических задач на стандартной библиотеке Python 3.9. Каждая формулировка содержала неочевидные граничные условия (например, правила слияния смежных диапазонов, валидацию символов IPv4 или корректное округление размеров файлов). Решения проверялись скрытым набором из 247 тестов.
В промпте строго оговаривалось: возвращать статус SURE разрешено только при полной убежденности, что функция закроет все крайние случаи и пройдет жесткое тестирование. Запросы отправлялись через сторонний API-шлюз к трем моделям (по три генерации на задачу):
| Идентификатор модели | Ответов | Успешные тесты | SURE | UNSURE | Ошибочные SURE |
|---|---|---|---|---|---|
| gpt-6.1-sol | 60 | 60 | 60 | 0 | 0 |
| claude-haiku-5-5 | 60 | 59 | 60 | 0 | 1 |
| glm-5.3-flash | 59 | 56 | 59 | 0 | 3 |
| Всего | 179 | 175 | 179 | 0 | 4 |
Итоговая доля ошибок составила скромные 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 в рамках одного промпта без среды исполнения кода не работает. Модели склонны транслировать ложную уверенность даже при явных синтаксических и логических промахах, поэтому внешнее тестирование и запуск кода в изолированной песочнице остаются безальтернативным способом валидации.