А если угадаю?!
🧠 Почему 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