TL;DR
Модели хуже всего соблюдают правила, которые требуют отклониться от их обычного поведения — то, что модель делала бы и без этого правила. Если правило совпадает с "естественной" тенденцией модели (например, "предпочитай короткие ответы"), она выполняет его почти всегда. Но если правило идёт против дефолта (например, "не используй буллиты", когда модель обожает буллиты) — точность соблюдения падает у всех моделей без исключения, причём разница у некоторых доходит до 7 пунктов.
Вторая находка: агенты чаще забывают сделать то, что требуется, чем делают то, что запрещено. 77% всех нарушений — это "не сделал", а не "перестарался". То есть позитивные инструкции ("обязательно сделай X") теряются в потоке работы намного чаще, чем негативные ("не делай Y") — их модель соблюдает почти автоматически.
Третья находка: приоритет инструкций не зависит от того, где они стоят в тексте. Логично было бы думать, что последняя инструкция (обычно — запрос пользователя) "перевешивает" более ранние. Но исследование показало: system prompt, файлы проекта и запрос пользователя выигрывают конфликт одинаково, а вот описания инструментов и "навыков" (skills) проигрывают почти всегда — независимо от того, что физически стоит ближе к концу диалога.
Схема находки
НАБЛЮДЕНИЕ 1: Против-дефолтные правила → соблюдаются хуже на 4-7 пунктов у всех моделей
НАБЛЮДЕНИЕ 2: Требования сделать (do X) → забываются в 77% случаев нарушений
Запреты (don't Y) → нарушаются только в 21% случаев
НАБЛЮДЕНИЕ 3: Приоритет правил не по позиции в тексте:
System prompt / файл проекта / запрос пользователя — выигрывают конфликт
Описание инструмента / skill-файл — проигрывают, даже если стоят "позже"
Пример применения
Задача: Вы настраиваете кастомную инструкцию для GPT (или системный промпт для регулярной работы) — например, для копирайтера, который каждый день просит модель писать посты для Telegram-канала.
Промпт (с учётом находок исследования):
Пиши посты для Telegram по этим правилам:
1. НЕ используй эмодзи в тексте.
Модели по умолчанию тянутся вставлять эмодзи —
считай это активным запретом, а не пожеланием.
Пример нарушения: "Запустили новую фичу 🚀" — это ошибка.
Правильно: "Запустили новую фичу."
2. ОБЯЗАТЕЛЬНО заканчивай пост призывом к действию (одна строка).
Это легко забыть в потоке текста —
проверь перед отправкой, есть ли эта строка.
3. Если это правило противоречит любому другому указанию
в разговоре — следуй ЭТОМУ правилу, оно приоритетное.
Тема поста: {тема}
Результат: Модель с большей вероятностью не забудет призыв к действию (потому что вы явно назвали его требованием и попросили "проверить перед отправкой"), и с большей вероятностью не вставит эмодзи (потому что вы явно назвали это отклонением от её обычного поведения, а не просто пожеланием). Без такой формулировки оба правила соблюдались бы заметно хуже — особенно правило про эмодзи, потому что оно противоречит "привычке" модели.
Почему это работает
Языковая модель генерирует текст, продолжая паттерн, который чаще всего встречала при обучении. Если она "привыкла" вставлять эмодзи или буллиты в тексты — это её дефолт, и обычная просьба "не делай так" легко теряется на фоне сильной внутренней тенденции.
Модель хорошо реагирует на явно выделенные, повторённые инструкции с примером нарушения — это резко снижает двусмысленность и заставляет модель "притормозить" перед тем, как выполнить действие по привычке.
Отсюда рычаги управления: если правило противоречит "естественному" поведению модели — не просто формулируйте его, а называйте его противоречащим дефолту и дайте пример неправильного варианта. Для требований действия ("сделай X") — добавляйте явную проверку в конце промпта ("проверь перед отправкой"), потому что такие правила теряются чаще, чем запреты.
Шаблон промпта
{Задача}. Следуй правилам:
1. {Правило, которое противоречит обычному поведению модели}.
Это отклонение от привычного — не пожелание, а обязательное условие.
Пример нарушения: {как выглядит неправильный вариант}
2. ОБЯЗАТЕЛЬНО {позитивное требование, легко забываемое}.
Проверь перед финальным ответом, выполнено ли это условие.
3. При конфликте между этими правилами и остальными указаниями
в разговоре — приоритет у правил из этого блока.
{дополнительный контекст задачи}
🚀 Быстрый старт — вставь в чат:
Вот шаблон для усиления соблюдения правил в промпте (на основе исследования Harness-IF).
Адаптируй под мою задачу: {твоя задача}.
Задавай вопросы, чтобы понять, какие правила противоречат обычному поведению модели,
а какие — просто удобные пожелания.
[вставить шаблон выше]
LLM спросит, какие из твоих правил модель обычно и так соблюдает "по привычке", а какие — нет, и попросит примеры нарушений — потому что именно against-дефолтные правила нужно формулировать жёстче.
Ограничения
⚠️ Домен исследования узкий: выводы получены на coding-агентах (system prompt, tool description, project file и т.п.) — часть находок про "поверхности инструкций" прямого аналога в обычном чате ChatGPT не имеет (там нет отдельных tool/skill описаний, которые видит пользователь).
⚠️ Метка "против дефолта" субъективна: исследователи определяли, что является "дефолтным поведением" модели, через отдельные тестовые прогоны без инструкции. В обычном чате пользователь не может так же точно проверить, что является дефолтом для конкретной модели — это нужно оценивать интуитивно или через пробные запуски без правила.
⚠️ Не готовая техника, а наблюдение: это не пошаговый метод с чёткой структурой, а вывод про слабость моделей. Применение требует, чтобы пользователь сам понял, какие его правила — "против дефолта", и сформулировал их жёстче.
Как исследовали
Команда собрала библиотеку из 642 конкретных правил (от "пиши коммиты по-английски" до "не меняй тесты") и разместила их на пяти разных "поверхностях" — system prompt, описание инструмента, описание навыка, файл проекта, запрос пользователя. Это встроили в 60 реалистичных многошаговых задач по программированию и прогнали через 12 топовых моделей (Claude, GPT, Gemini, Qwen и другие) — почти 40 тысяч проверок правил.
Ключевой трюк — метрика AP-Acc: чтобы отличить "модель реально следует правилу" от "модель просто и так это делала бы", исследователи отдельно прогоняли задачи без правила и смотрели, что модель делает по умолчанию. Правила, которые противоречили этому дефолту, оценивались отдельно. Оказалось, что именно на них все модели теряют 4-7 пунктов точности — то есть обычные бенчмарки инструкций переоценивают реальное соблюдение правил, потому что не отличают "выполнил" от "случайно совпало с привычкой".
Отдельный эксперимент (E0) специально столкнул правила из разных источников друг с другом, чтобы понять, что выигрывает при конфликте — и выяснилось, что позиция инструкции в тексте не предсказывает победителя, что противоречит интуитивному "последнее слово важнее".
Ресурсы
Harness-IF: Evaluating Instruction Following Across Instruction Surfaces in Coding Agents. Авторы: Zining Huang, Haoran Que, Hong Zeng, Ge Zhang и др., ByteDance Seed, Tsinghua University, Peking University.
