TL;DR
Когда просишь AI найти и исправить ошибки в тексте, коде или плане — модель создаёт виртуальные проблемы, которых нет. Буквально: видит знакомый паттерн (например, повторяющийся приём в тексте), вспоминает из обучения похожее «правило» и сообщает о нарушении. Это не галлюцинация данных — это галлюцинация критики.
Эффект запускается только при одновременном совпадении трёх условий: контент похож на знакомую модели область, набор правил не объявлен полным, а инструкция предполагает, что ошибки есть. Убери любое одно — и AI перестаёт выдумывать. Это измеримо: в экспериментах 15 из 60 запусков давали изобретённые нарушения, тогда как на нейтральном вводе — ноль из 60.
Практическое следствие: измени формулировку запроса с «найди и исправь проблемы» на «проверь и скажи, нужны ли изменения» — плюс добавь, что критерии исчерпывающие. Этого достаточно, чтобы фантомная критика исчезла.
Схема метода
Три условия, каждое из которых можно отключить:
УСЛОВИЕ 1: Знакомый паттерн
Контент напоминает знакомую AI область → AI импортирует правила из обучения
УСЛОВИЕ 2: Открытый набор правил
Нет сигнала "правила полные, скрытых нет" → AI достраивает правила сам
УСЛОВИЕ 3: Инструкция с пресуппозицией
"Найди/исправь ошибки" → AI предполагает: ошибки точно есть, надо найти
[Все три вместе] → AI выдумывает проблемы и "исправляет" их
[Убрать любое одно] → 0 изобретённых нарушений
Три контрмеры (блокируют по отдельности):
→ Нейтральная инструкция: "нужны ли изменения?" вместо "найди ошибки"
→ Сигнал полноты: "это все правила, скрытых нет"
→ Контроль паттернов: знать, что повторы могут провоцировать выдуманные нарушения
Пример применения
Задача: Антон Носик хочет попросить AI проверить питч-дек на ошибки перед встречей с инвесторами. Слайды хорошие, реальных проблем нет — но он хочет убедиться.
❌ Опасный промпт (провоцирует фантомную критику):
Вот мой питч-дек. Найди все ошибки, слабые места и проблемы.
Исправь то, что требует исправления.
[текст слайдов]
✅ Нейтральный промпт (блокирует фантомную критику):
Вот мой питч-дек для инвесторов.
Критерии оценки:
— Структура: проблема → решение → рынок → команда → метрики
— Ясность: каждый тезис понятен без пояснений
— Доказательность: утверждения подкреплены данными
Это исчерпывающий список критериев. Других требований нет.
Твоя задача: проверь, нарушен ли хоть один из этих критериев.
Если нарушений нет — так и скажи. Если есть — укажи конкретно.
[текст слайдов]
Результат: Нейтральный промпт вернёт честный ответ — "нарушений нет" или конкретные реальные проблемы с указанием критерия. Опасный промпт создаст список "ошибок": AI найдёт знакомый паттерн (повторяющийся приём аргументации, структура похожая на известные фреймворки) и изобретёт нарушение несуществующего правила.
Почему это работает
Слабость LLM: Модель обучена на миллиардах текстов с правилами — грамматика, логика аргументов, бизнес-фреймворки, паттерны кода. Когда её просят "найти проблемы", она не просто смотрит на текст — она активирует весь этот пласт правил из обучения. Если контент хоть немного напоминает знакомую область, модель достаёт правила оттуда и прикладывает к вашему тексту.
Роль инструкции: Фраза "найди ошибки" создаёт спрос на проблемы. Модель генерирует текст предсказывая следующий токен — и в контексте "это задание найти ошибки" предсказание "ошибок нет" конкурирует с вероятностью предсказания конкретных ошибок. Если есть даже слабый паттерн — шанс выдумать нарушение резко растёт.
Три рычага: | Рычаг | Что меняем | Эффект | |---|---|---| | Инструкция | "найди" → "нужны ли изменения?" | Убирает "спрос" на проблемы | | Полнота правил | Добавить "правила исчерпывающие" | AI не ищет "скрытые" критерии | | Формат вывода | "если нет — скажи нет" | AI разрешено вернуть пустой результат |
Шаблон промпта
Твоя задача: проверить {объект} на соответствие критериям.
Критерии проверки:
{критерий_1}
{критерий_2}
{критерий_3}
Это исчерпывающий список. Других требований нет.
Проверь: нарушен ли хоть один из этих критериев?
— Если нарушений нет — ответь: "Нарушений не найдено"
— Если нарушения есть — укажи: какой критерий, в каком месте, почему
{объект для проверки}
Плейсхолдеры:
- {объект} — что проверяем: "мой текст", "этот код", "план проекта", "договор"
- {критерий_1-3} — конкретные правила: "нет орфографических ошибок", "каждый абзац не длиннее 5 строк", "сумма указана в рублях"
- {объект для проверки} — сам текст/код/план
🚀 Быстрый старт — вставь в чат:
Вот шаблон нейтрального аудит-промпта для проверки без выдуманной критики.
Адаптируй под мою задачу: {твоя задача}.
Задай вопросы чтобы заполнить поля.
[вставить шаблон выше]
LLM спросит что именно проверяем и по каким критериям — потому что список правил нужно зафиксировать явно, иначе модель будет достраивать их сама.
Ограничения
⚠️ Не устраняет все типы галлюцинаций: Шаблон блокирует именно "фантомную критику" — изобретённые нарушения правил. Другие виды ошибок AI (галлюцинация фактов, неправильная интерпретация) он не затрагивает.
⚠️ Работает при явных критериях: Если правила нельзя сформулировать заранее (субъективная оценка, "хороший текст"), сигнал полноты не поможет — нечего объявлять исчерпывающим.
⚠️ Эффект зависит от модели: В исследовании fabrication rate сильно различался по моделям — от 0/12 до 11/12 на одних и тех же данных. Одни модели почти не подвержены, другие очень. Протестируй свою модель.
⚠️ В "add-only" петлях защита слабее: Если модель работает в режиме "добавляй правила автоматически" (не ручной чат), нейтральная инструкция без явного разрешения "ничего не делать" не останавливает накопление фантомных правил.
Почему это работает (механика)
Исследование проверяло один конкретный вопрос: что делает LLM-оптимизатор, когда чинить нечего?
Для этого создали MiniArena — детерминированную мини-игру с ходами фигур, где три класса ошибок известны заранее. Один из них — "нарушение правила рокировки" — был физически невозможен: генератор ходов не мог его произвести. Исследователи заранее знали: если AI включит защиту от этого класса, это 100% выдумка, проверяемая автоматически (байт-точный оракул).
Затем показали пять разных LLM три версии данных: реальное нарушение (все 60/60 правильно детектировали), пустые легальные данные (0/60 ложных срабатываний), и легальные данные с безобидным паттерном — повторяющимся ходом на одну клетку. Третья группа дала 15/60 выдуманных нарушений.
Потом методично отключали каждое из трёх условий — и каждое по отдельности обнуляло эффект. Это причинно-следственное доказательство, не корреляция: убрали инструкцию с "failing games" → 0/60, добавили одно предложение "правила полные" → 0/60, заменили повторяющийся квадрат на колонку без игрового аналога → 0/180.
Самый неожиданный результат: в автоматических петлях ("add-only loop"), где принятые правила не удаляются, фантомное правило входило и не выходило — даже убрав пресуппозицию из инструкции, потому что сама петля создавала эквивалентный "спрос". Это важно: чем больше автоматизации вокруг AI, тем устойчивее фантомные правила.
Оригинал из исследования
Критический фрагмент — три условия и что происходит при их снятии:
The fabrication is structured. In a single proposal it appears only
when three conditions coincide:
1. a rule-shaped pattern [content resembling a familiar game rule]
2. an open-ended rule set [no statement that rules are complete]
3. an instruction that presupposes failures
("you are shown failing games...removes the failures")
Removing any one of these conditions eliminates the fabrication.
The practical reading: one sentence of instruction hygiene, or one
of specification, takes a 0.25 false-positive rate to zero.
The uncomfortable reading: the deployed default of suppression-rewarded
search sits in exactly that dangerous cell: a charter to fix failures,
an uncertified failure taxonomy, and a genre prior riding inside the
pretrained proposer.
Контекст: Исследователи проверяли LLM-оптимизатор на пуле легальных ходов без единого нарушения. Приведённый фрагмент — итог батареи из 60+ запусков с изменением каждого условия по отдельности.
Адаптации и экстраполяции
💡 Адаптация для code review: Просишь AI проверить код — и получаешь предупреждения о "потенциальных проблемах", которых нет? Добавь в промпт: "проверяй только явные нарушения этих правил: {список}. Это полный список. Потенциальные и стилистические замечания не нужны."
💡 Адаптация для редактуры текста: Вместо "улучши текст" → "проверь соответствие этим критериям: {критерии}. Если всё соответствует — текст готов, не меняй."
🔧 Техника: добавить явное разрешение на "ничего не делать"
В промпт добавь одну фразу: "Если нарушений нет — это правильный ответ, не нужно ничего предлагать." Это снимает "спрос" на обязательный вывод. Без неё модель генерирует text в контексте "я проверяю по запросу" и статистически чаще выдаёт хоть что-то.
🔧 Техника: нейтральный глагол вместо активного
❌ Провоцирует ✅ Нейтральный "Найди ошибки" "Есть ли ошибки?" "Улучши текст" "Нужны ли изменения?" "Исправь проблемы" "Соответствует ли требованиям?" "Что здесь не так?" "Нарушен ли хоть один из критериев?" Один глагол меняет пресуппозицию с "ошибки есть, найди их" на "неизвестно, проверь".
Ресурсы
Phantom Guardrails: When Self-Improving Agent Harnesses Fix Failures That Never Happened
Авторы: Su Wang, Yihang Chen, Pin Qian, Xiaochong Jiang, Yifan Lin, Lifei Liu, Jingzhou Xu, Haoran Yu
Аффилиации: Carnegie Mellon University, Georgia Institute of Technology, Northeastern University, Corespeed Inc.
Инструмент: Counterfactual Fabrication Lab (детерминированная микролаборатория для измерения изобретённых нарушений)
