А если угадаю?!

🧠 Почему LLM «угадывает» задачу, а не решает её?

Исследователи (статья 2608.07614) проверили: код проходит явные тесты в 92–94% случаев, но 54–64% решений нарушают скрытые условия, которые не были прописаны в промпте.

Модель не «думает» — она достраивает неявные детали наугад. Причём чаще всего она либо полностью угадывает, либо полностью игнорирует требование — поляризация.


🔍 Суть метода (IVR-проверка)

1. Берём задачу с полным набором условий. 2. Убираем из промпта все неявные детали (порядок сортировки, обработку пустых значений и т.п.). 3. Каждое удалённое условие превращаем в скрытый тест. 4. Модель пишет код только по урезанному запросу + одному явному тесту. 5. Прогоняем через явные и скрытые тесты. ➡️ Если явный пройден, а скрытый нет — модель «забыла» условие.


📌 Пример из практики (парсинг Excel)

Шаг 1 – пишем промпт без уточнений: > *«Напиши код, который убирает дубликаты заказов из списка.»*

Шаг 2 – модель выдаёт код, проходящий простой тест «нет дубликатов».

Шаг 3 – скрытые тесты проверяют: • какую запись оставить (первую или последнюю), • что считать дубликатом (ID + дата), • сохраняется ли исходный порядок.

Шаг 4 – если решение падает на скрытом тесте — значит, модель не учла одно из условий.


🧩 Шаблон промпта, который снижает «слепоту»

> *Напиши {что нужно сделать}.*

> Явные требования: > 1. {самое важное условие} > 2. {второе по важности} > 3. {обработка пустых/крайних случаев} > 4. {формат и порядок вывода}

> *Перед кодом уточни у меня все предположения о неявных деталях.*

Пример заполнения:

> Напиши функцию, которая удаляет дубликаты заказов из списка.

> 1. Дубликатом считать строку с одинаковым ID клиента и датой заказа. > 2. При дублях оставлять последнюю запись по времени. > 3. Пустой список → пустой список, без ошибок. > 4. Порядок остальных записей сохранять.

> *Уточни типы данных (dict/tuple), нужно ли преобразовывать даты.*


⚖️ Когда метод полезен, а когда нет

Полезно: • Задачи с потенциальными неявными условиями (парсинг, сортировка, фильтрация). • Проверка качества генерации LLM — оценка надёжности решений.

Бесполезно: • Строго формализованные задачи без скрытых требований (например, простые арифметические функции). • Модели, которые уже используют уточняющие диалоги (ChatGPT с функцией вопросов).


📊 Ключевые цифры из экспериментов

92–94% решений проходят явный тест. • 54–64% нарушают хотя бы одно скрытое требование. • Нарушения не случайны: либо все решения падают, либо ни одно — «поляризация». • Первое пропущенное условие теряется чаще, чем последующие.


🎯 Что делать и чего избегать

Делайте: • Явно перечисляйте критические требования в промпте. • Прогоняйте решение через скрытые тесты до продакшна.

Не полагайтесь: • На угадывание модели — в большинстве случаев она либо полностью угадала, либо ничего не учла.


📎 Исходник: summary_2608.07614.txt