September 12

ChatGPT молча принимает 3–4 решения за тебя в каждой задаче. Узнаёшь о них, когда что-то сломается

Попросил модель написать функцию логина — получил код, тесты зелёные, всё выглядит готовым. А через месяц выясняется: пароли она защищает через MD5 — устаревший способ, который давно научились взламывать. Ты этого не выбирал. Модель решила сама — и не сказала. Исследователь из Мичиганского технологического университета Jie Wu (июль 2026) посчитал: в среднем модель принимает 3–4 таких скрытых решения на каждую задачу. И показал приём, который заставляет её выложить весь список — до того, как одно из решений выстрелит.

В чём проблема: короткий запрос скрывает десятки вопросов — и модель отвечает на них молча

Твой запрос короткий: «напиши функцию логина», «сделай парсер отзывов». Но внутри задачи спрятаны вопросы, которые ты не оговорил: как защищать пароль, что вернуть при ошибке, что делать с дублями. Модель не останавливается переспросить — она обучена выдавать готовый результат по любому запросу, поэтому каждый пробел заполняет самым вероятным вариантом из обучения. И делает это молча: объяснять выбор её не просили, из-за этого решения остаются внутри кода, а не в тексте ответа. Тесты тут не спасают — они проверяют, ЧТО код делает, а не КАК: код с MD5 проходит их так же зелёно, как код с нормальной защитой. Как строитель, которому сказали «сделай красиво»: он молча клеит обои в цветочек, работа формально сделана — а сюрприз ты обнаружишь после ремонта. По замерам исследования (180 задач, 676 размеченных решений) на одну задачу приходится 3–4 таких молчаливых выбора — и без специального запроса их не видно.

Решение: сначала список скрытых решений, потом правки

Не вычитывай код строчка за строчкой и не проси «перепиши получше». Покажи модели её же результат и потребуй отчёт: какие решения в нём не были в моём запросе. Она разложит их по категориям — безопасность, обработка ошибок, формат данных — с альтернативой и оценкой критичности для каждого. Ты читаешь список как чек-лист, отмечаешь спорное — и просишь переписать только тот кусок, который зависит от изменённого решения. Остальной код не трогается.

→ Что делать: получил код — прогони его через аудит скрытых решений:

Ты — опытный разработчик, который аудирует код на скрытые решения.

Исходный запрос:
{твой_первоначальный_запрос}

Сгенерированный код:
{код}

Задача:
1. РАССУЖДЕНИЕ: перечисли каждое решение в коде, которое явно
   НЕ требовалось запросом. Для каждого назови реалистичную альтернативу.
2. ФОРМАТ: верни список в виде:
   - Категория: {валидация входных данных / формат данных /
     обработка ошибок / хранение данных / производительность / безопасность}
   - Что решено:
   - Альтернатива:
   - Критичность: {низкая/средняя/высокая}

После списка — жди моих правок. Когда я укажу, какое решение изменить,
перепиши ТОЛЬКО тот участок кода, который зависит от этого решения,
остальной код оставь без изменений.

Почему это работает

Модель не планирует решения заранее — но отлично объясняет их пост-фактум. Код рождается как самая вероятная последовательность слов, промежуточные выборы никто не проговаривает. А вот разобрать уже готовый код и назвать, зачем выбран каждый вариант, модель умеет хорошо — это тот же навык, что объяснение чужого кода. Поэтому запрос «посмотри на свой код и найди, что ты решила сама» превращает молчаливые выборы в текст, который можно прочитать и оспорить. Точечная регенерация сужает зону риска. Команда «перепиши весь код» заставляет модель заново принимать все решения — из-за этого она может поменять и то, что тебя устраивало. Поэтому проси переписать только участок, зависящий от одного изменённого решения. Честные границы: редкие категории — безопасность и долговременное хранение — модель находит хуже всего, а они самые критичные; и если от одного решения зависело несколько кусков кода, правка может захватить не все. Список ускоряет проверку, но не отменяет её.

Пример

Приём работает не только с кодом. Просишь ChatGPT: «составь ТЗ на сайт для мастерской по ремонту обуви». Получаешь стройный документ — а внутри модель молча решила: движок WordPress, форма заявки без онлайн-оплаты, про мобильную версию — одна строчка. Разворачиваешь так:

Ты — опытный подрядчик, который проверяет ТЗ на скрытые решения.

Исходный запрос:
"Составь ТЗ на сайт для мастерской по ремонту обуви"

Готовое ТЗ:
[вставь ТЗ, которое выдала модель]

Перечисли каждое решение в ТЗ, которое я явно не просил.
Для каждого: категория, что решено, альтернатива,
критичность (низкая/средняя/высокая).
После списка жди моих правок — и переписывай только тот раздел,
который зависит от изменённого решения.

Модель выдаст список: выбрала WordPress (альтернатива — конструктор, дешевле в поддержке), не заложила онлайн-запись (критичность высокая — клиенты пишут вечером, когда мастерская закрыта), цены на сайте решила не показывать. Ты правишь одно — «онлайн-запись нужна» — и она переписывает только раздел про функциональность, не перетряхивая остальной документ.

Где пригодится

  • Любой код от ИИ длиннее 10–15 строк — особенно там, где есть пароли, деньги и чужие данные
  • ТЗ, договоры, планы, стратегии — любой документ, где модель заполняет пробелы за тебя
  • Правки без эффекта домино: точечная регенерация вместо «перепиши всё»
  • Правило: получил результат — сначала спроси «что ты решила сама?», потом внедряй

Если хочешь такие находки из свежих исследований каждый день — их присылает бот @NovaPaperAlert_bot.

Опирался на исследование «AssumptionMiner: Extracting, Tracing, and Revising Implicit Assumptions in LLM Code Generation» (arXiv 2607.22898).