Игорь Градов
Игорь Градов
7 мин
ai

7 багов в коде, 4 нейросети: ни одна не нашла всё, но вместе справились

Начну с анализа оригинала и построю how-to по фактам из него.

7 багов в коде, 4 нейросети: ни одна не нашла всё, но вместе справились

Считаю лид: «Один сломанный bash-скрипт с семью багами, четыре нейросети, которые чинят его вслепую, и ни одна не находит всё: разбираем пошагово, как устроить такую проверку и почему одна модель хуже коллегии.» — 31 слово, одно предложение, подлежащее и глагол, есть «почему сейчас».

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

Почему это важно

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

Эксперимент, описанный ниже, проверяет на практике вопрос, который большинство разработчиков решает интуитивно: довериться одной модели, запустить несколько параллельно или отдать все варианты починки ещё одной модели для финальной сборки. Источник эксперимента, авторский тест с реальным bash-скриптом run-code.sh, показал, что каждый из этих подходов по-своему неполон, но вместе они закрывают больше, чем поодиночке.

Что понадобится?

  • Сломанный скрипт для теста. Подойдёт любой bash-скрипт с реальными задачами: вызов внешнего процесса, разбор данных, вывод таблицы. В эксперименте использовался run-code.sh, обвязка вокруг Python-скрипта codegen_test.py, которая собирает результаты по списку моделей и печатает сводную таблицу.
  • Доступ к нескольким языковым моделям. В первом круге использовались четыре: Claude Sonnet 5 (от Anthropic), HY3, Qwen3-Max и DeepSeek-V4-Flash. Во втором круге подключились ещё семь, включая Gemini Pro, Mistral Medium 3.5 и Nemotron-3-Super-120B. Для доступа ко многим из них подходит OpenRouter, у которого есть бесплатный тарифный план.
  • Инструменты проверки. Команда bash -n для синтаксической проверки, diff для построчного сравнения с оригиналом и заглушка (stub), которая имитирует реалистичный вывод основного скрипта (статусы PASS, TEST_FAIL, BAD_JSON, SYNTAX_ERROR, RATE_LIMITED).
  • Время. На два круга эксперимента с четырьмя и семью моделями уходит от одного до трёх часов, в зависимости от скорости ответов моделей.

Пошаговая инструкция

  1. Подготовьте скрипт с известными багами. Возьмите рабочий bash-скрипт и убедитесь, что знаете, где в нём баги. В эксперименте их было семь, от косметических (устаревшие имена файлов в комментариях) до фатальных (сводная таблица всегда показывает нули, что бы ни произошло на самом деле). Пример одного из багов: в массиве данных OpenRouter-пресета часть строк не содержит нужных полей, и команда [ "" -gt 0 ] выбрасывает ошибку integer expression expected.

  2. Составьте промпт (prompt, текстовую инструкцию для модели). Промпт должен содержать полный текст скрипта и задание: найти и исправить все баги. Не подсказывайте, сколько багов и какие. Модель должна работать «вслепую».

Ниже — bash-скрипт run-code.sh. В нём есть баги: от косметических до фатальных.
Найди все баги, объясни каждый и выдай исправленный скрипт целиком.

[полный текст скрипта]
  1. Запустите первый круг: каждая модель чинит независимо. Отправьте одинаковый промпт в каждую из выбранных моделей. Каждая работает в своём «пузыре» и не знает, что делают остальные. Сохраните все ответы отдельными файлами.

  2. Проверьте каждый результат по четырём критериям. Для каждого исправленного скрипта выполните:

# Построчное сравнение с оригиналом
diff original.sh fixed_by_model_A.sh

# Синтаксическая проверка
bash -n fixed_by_model_A.sh

# Запуск с заглушкой, имитирующей реалистичные статусы
./fixed_by_model_A.sh --stub

# Запуск на заведомо битых данных (проверка, сыплются ли ошибки)
./fixed_by_model_A.sh --broken-preset 2>&1 | grep "integer expression expected"
  1. Составьте таблицу результатов первого круга. Отметьте, какие из семи багов нашла каждая модель. В эксперименте ни одна модель не закрыла все семь. При этом слепые зоны у них не совпали: то, что пропустила одна, нашла другая.

  2. Запустите второй круг: сборка лучшего из всех вариантов. Передайте все четыре исправленных скрипта новой модели (или нескольким) с таким промптом:

Ниже — четыре варианта исправления одного и того же bash-скрипта,
сделанные четырьмя разными моделями независимо друг от друга.
Для каждого бага выбери тот фикс, который действительно лучший,
из какого бы источника он ни пришёл. Собери выбранное в один скрипт.
Укажи, какой фикс откуда взят и почему выжил.

[четыре скрипта]
  1. Сравните сборки между собой. В эксперименте семь моделей выполняли эту сборку, и результаты разошлись: не всегда та модель, чья сборка выглядит убедительнее, объективно собрала лучше. Скрипт, который «просто работает», ещё не доказательство, что модель нашла всё сломанное. Скрипт, который объясняет родословную каждого фикса (откуда пришёл и почему выжил), даёт куда более надёжный результат.
Как это выглядит на практике

В эксперименте баг номер один выглядел так: в массиве OPENROUTER_FREE среди рабочих строк с форматом модель|RPM|RPD затесались три сломанные. У одной строки суффикс |RPM|RPD отсутствовал вообще, у двух других поле RPD было пустым. Ниже по коду цикл разбирал каждую запись через IFS='|' read -r MODEL RPM RPD, а затем проверял [ "$RPD" -gt 0 ]. Для битых строк RPD оказывалась пустой строкой, и bash выдавал ошибку integer expression expected. Скрипт не падал, но терял доверие пользователя. Одни модели заметили это и добавили защитный разбор с подстановкой значения по умолчанию, другие прошли мимо и сосредоточились на фатальном баге с нулями в таблице.

Частые ошибки
  • Подсказывать модели количество багов. Если вы напишете «найди семь багов», модель будет искать ровно семь и, скорее всего, придумает несуществующие, чтобы дотянуть до цифры. Оставляйте задание открытым.
  • Доверять одному ответу. Эксперимент прямо показал: ни одна из четырёх моделей не нашла все баги в коде. Слепые зоны у разных моделей не совпадают, и это не баг методики, а свойство, которое можно использовать.
  • Пропускать этап проверки. Синтаксически корректный скрипт (bash -n без ошибок) может содержать логическую ошибку: таблица красиво печатается, но показывает нули. Без запуска с заглушкой и с битыми данными вы этого не увидите.
  • Игнорировать «родословную» фикса. Во втором круге модель, которая просто выдала рабочий скрипт, менее полезна, чем та, которая указала, какой фикс откуда взяла. Без атрибуции вы не поймёте, почему выбран именно этот вариант, и не сможете проверить решение.

Что делать с этим прямо сейчас?

Разработчику (даже если пишете не на bash). Метод двух кругов работает для любого кода: первый круг ловит баги в коде, второй собирает лучшее. Вместо спора «Claude или GPT» запустите обе модели параллельно и отдайте результаты третьей для сборки. Затраты на API минимальны, выигрыш в покрытии багов в коде измерим.

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

Предпринимателю в РФ. Из моделей, упомянутых в эксперименте, через OpenRouter доступны DeepSeek-V4-Flash, Qwen3-Max и Nemotron, причём часть из них на бесплатном тарифе. Из российских инструментов для аналогичной проверки можно попробовать YandexGPT и GigaChat, хотя для bash-скриптов они пока слабее специализированных моделей.

Мнение редакции dzen.guru

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

Честная оговорка: метод удваивает или утраивает расход токенов (токен, это единица текста, за которую платит API). Для короткого скрипта это копейки, для большого проекта стоит считать. И ещё: второй круг (сборка) требует от модели не только кодерских навыков, но и честности в атрибуции, а это пока редкое качество даже у сильных моделей.

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

Попробуйте промпт-шаблоны dzen.guru для работы с кодом

Готовые промпты для поиска багов, рефакторинга и code review с параллельным запуском нескольких моделей

Открыть шаблоны
Поделиться:TelegramVK
Игорь Градов
Игорь Градов

Основатель dzen.guru. Эксперт по монетизации и продвижению на Дзен. Автор курса «Старт на Дзен 2026».

Комментарии

Читайте также

UI инструменты AI на практике: почему «Банк идей» отказался от готового чата ради контроля
ai

UI инструменты AI на практике: почему «Банк идей» отказался от готового чата ради контроля

Команда корпоративного проекта «Банк идей» опубликовала разбор двух UI инструментов AI продуктов и объяснила, почему для сложного агентного сценария отказалась…

5 мин
50 скиллов для ИИ-агентов собрали 22 млн установок: как подключить лучшие бесплатно
ai

50 скиллов для ИИ-агентов собрали 22 млн установок: как подключить лучшие бесплатно

Компания Anthropic запустила Scout, нового ИИ-агента, который берёт на себя рутинные офисные задачи, и второго июня открыла к нему доступ без подписки, впервые…

6 мин
ai

Искусственный интеллект и работа: как разделить задачи на рутину и творчество

Искусственный интеллект меняет не саму работу, а то, как мы понимаем разделение труда, и этот сдвиг позволяет вернуть труду его изначальный смысл: осознанную,…

6 мин