TL;DR
Когда ты даёшь модели список требований, она не выполняет их через один механизм. Каждый тип ограничения — отдельный навык, опирающийся на разные уровни модели. Точное число слов, JSON-формат, запрет на определённое слово — это структурные ограничения. Тон, тема, стиль, регистр — семантические. Они буквально обрабатываются в разных "местах" модели.
Структурные ограничения выполняются надёжнее. В экспериментах точность их соблюдения — 0.82–0.84, семантических — 0.60–0.69. Вот почему знакомая боль: модель выдала ровно 200 слов и включила ключевое слово, но тон "съехал" или тема ушла в сторону. Это не случайность и не невнимательность — это архитектурная особенность.
Второй инсайт: модель не планирует соблюдение инструкций заранее, а отслеживает их в процессе генерации. Сигнал соответствия инструкции почти нулевой до начала ответа, резко растёт в процессе и достигает пика на последнем токене. Это значит: явный запрос самопроверки в конце промпта не просто "хитрость" — он соответствует тому, как модель работает внутри.
Схема метода
Не пошаговая техника, а карта надёжности ограничений — принцип структурирования промпта:
СТРУКТУРНЫЕ (надёжность высокая):
├── Точное число слов / символов
├── JSON-формат, Markdown-структура
├── Включить слово X
└── Исключить слово Y
СЕМАНТИЧЕСКИЕ (надёжность ниже):
├── Тема текста
├── Тональность (позитивная / нейтральная)
├── Регистр (деловой / разговорный)
└── Избегание токсичности / определённого стиля
👉 Правила применения:
1. Структурные → ставь первыми, пиши явно и однозначно
2. Семантические → подкрепляй конкретным примером стиля
3. Конец промпта → добавь блок самопроверки: считай слова, оцени тон
Всё работает в рамках одного промпта.
Пример применения
Задача: Ты контент-менеджер. Клиент — IT-стартап из Москвы. Нужен пост в Telegram: ровно 120 слов, обязательно слово «экспертиза», деловой тон, тема — рост команды, никаких восклицательных знаков.
Промпт:
Напиши пост для Telegram-канала IT-компании.
СТРУКТУРНЫЕ ТРЕБОВАНИЯ (выполни точно):
- Ровно 120 слов в тексте поста
- Обязательно включи слово «экспертиза»
- Без восклицательных знаков
СМЫСЛОВЫЕ ТРЕБОВАНИЯ:
- Тема: рост команды, найм новых специалистов
- Тон: деловой, сдержанный — как CEO в колонке РБК, не как мотивационный спикер
- Пример нужного стиля:
«В первом квартале команда выросла на 30% — добавили
четыре направления. Средний опыт нового специалиста —
семь лет в индустрии. Фокус остаётся прежним: результат,
а не процесс.»
САМОПРОВЕРКА ПОСЛЕ ТЕКСТА:
Напиши отдельным блоком:
— Точное число слов в посте
— Подтверди наличие слова «экспертиза»
— Оцени деловитость тона по шкале 1–10
Результат: Модель выдаст пост, затем отдельный блок самопроверки. Структурные требования (120 слов, «экспертиза», нет «!») скорее всего будут выполнены точно. Деловой тон — потребует проверки: именно здесь выше риск отклонения. Блок самопроверки сразу покажет расхождения без повторного чтения вручную.
Почему это работает
Слабость LLM: нет единого «центра выполнения инструкций». Каждый тип ограничения задействует разные паттерны на разных уровнях модели. Когда требования смешаны в одну кучу — часть теряется: структурные конкурируют с семантическими за внимание модели.
Что модель умеет хорошо: чётко следовать измеримым, однозначным правилам. Посчитать слова, вставить слово, отформатировать — это она «видит» в первых слоях генерации, рано и надёжно. Тон и тема формируются позже и требуют плотного контекста-ориентира.
Как это использовать: разделение блоков в промпте — не просто эстетика. Структурный блок первым запускает надёжные паттерны. Пример стиля для семантического блока даёт модели конкретный сигнал — вместо расплывчатого слова «деловой». Блок самопроверки в конце соответствует внутреннему поведению: пик точности на последнем токене означает, что финальная верификация — это именно то, что модель делает изнутри, а явный запрос усиливает этот механизм.
Рычаги управления: - Конкретный пример стиля → чем точнее ("как Тиньков в Forbes"), тем надёжнее семантика - Разделение блоков → убери, если ограничение одно и оно структурное — лишнее усложнение - Блок самопроверки → добавляй при трёх и более разных типах ограничений; убирай при простых задачах - Число ограничений → чем меньше в одном промпте, тем точнее каждое; если много — разбей на два запроса
Шаблон промпта
{Задача: что нужно создать и для какого канала/формата}
СТРУКТУРНЫЕ ТРЕБОВАНИЯ (выполни точно):
- {ограничение 1: длина, формат, включить слово}
- {ограничение 2: исключить слово, структура}
- {ограничение 3: технический формат}
СМЫСЛОВЫЕ ТРЕБОВАНИЯ:
- Тема: {тема}
- Тон: {тон} — как {конкретный пример стиля или автора}
- Пример нужного стиля:
«{короткий образец текста в нужном тоне}»
САМОПРОВЕРКА ПОСЛЕ ТЕКСТА:
Напиши отдельным блоком:
— {структурная проверка 1: число слов / наличие слова X}
— {структурная проверка 2: отсутствие запрещённого символа}
— {семантическая оценка: тон по шкале 1–10}
Что подставлять:
- {структурное ограничение} — всё, что можно посчитать или проверить объективно: символы, слова, JSON, Markdown
- {конкретный пример стиля} — реальный отрывок текста или узнаваемый автор/формат; абстрактные слова типа "сдержанный" работают хуже
- {семантическая оценка} — конкретный критерий, а не просто "хорошо/плохо"
🚀 Быстрый старт — вставь в чат:
Вот шаблон для текста с несколькими ограничениями разных типов.
Адаптируй под мою задачу: {твоя задача}.
Задавай вопросы, чтобы заполнить поля.
[вставить шаблон выше]
LLM спросит про структурные требования (длина, ключевые слова, формат) и смысловые (тон, тема, стиль) — потому что ей нужно правильно разложить их по блокам. Ключевой вопрос будет про пример стиля: без него семантический блок останется расплывчатым.
Ограничения
⚠️ Семантические ограничения невозможно проверить объективно: "Деловой тон" — оценочное суждение. Модель в блоке самопроверки может поставить себе 9/10, хотя тон воспринимается иначе. Конкретный пример стиля частично решает проблему, но не устраняет.
⚠️ При пяти и более разнотипных ограничениях точность падает: Исследование показало, что именно сложные многосоставные инструкции — зона ошибок. Не рассчитывай, что модель идеально удержит все ограничения одновременно без итераций.
⚠️ Разные модели работают по-разному: Llama кодирует ограничения более специфично. Qwen сильнее полагается на общие языковые паттерны — там структурные и семантические ограничения сильнее перемешаны. Один и тот же промпт может дать разный результат в разных моделях.
Как исследовали
Команда Миланского университета придумала элегантный дизайн. Они собрали датасет с "правильными, но неправильными" ответами: грамматически корректными фразами, которые нарушают конкретное ограничение. Например, "Bird sings" — нормальная английская фраза, но если задание "ровно 10 символов" — это ошибка. Это ключевой ход: он исключает ситуацию, когда модель просто пишет "хороший текст" и получает зачёт автоматически.
Потом они обучили линейные классификаторы-зонды — миниатюрные модели, которые по внутренним состояниям большой модели предсказывали: "она выполнила ограничение или нет?" Сравнение зонда-специалиста (обученного только на одной задаче) против универсального зонда (обученного на всех задачах) сразу показало картину: универсальный постоянно проигрывал специалистам. Ни одного механизма нет — есть отдельные навыки.
Самый неожиданный результат появился при анализе временной динамики. Авторы ожидали увидеть сигнал соответствия инструкции ещё до начала генерации — что модель "планирует" заранее. Но сигнал появлялся почти на нуле, резко рос во время генерации и давал пик на финальном токене. Это значит: модель не планирует — она мониторит. И именно поэтому просьба "проверь сам в конце" работает: это не трюк, а использование естественного поведения.
Проверяли на трёх моделях: Llama 3.1 8B, Gemma 2 2B и Qwen2.5 0.5B. Девять типов задач охватывали четыре измерения: структурное, лексическое, семантическое, стилистическое. Вычисления — на одной H100 GPU с 94 ГБ памяти.
Адаптации и экстраполяции
Адаптация: два запроса вместо одного при критичных требованиях
Когда оба типа ограничений важны и не терпят ошибок — разделение снижает конкуренцию между ними.
🔧 Техника: структура отдельно → семантика отдельно
Шаг 1 — структурный каркас:
«Напиши черновик поста на тему {тема}.
Ровно 120 слов, включи слово "экспертиза", без восклицательных знаков.
Тон пока любой.»
Шаг 2 — доработка семантики:
«Перепиши этот текст деловым сдержанным тоном,
как колонка в РБК Pro. Не меняй длину и структуру.»
Структурные ограничения фиксируются на первом шаге. Семантические отрабатываются отдельно, без конкуренции.
Экстраполяция: принцип специализации — разные чаты для разных типов задач
Исследование показало, что навыки не переносятся свободно между несвязанными типами задач. Это подтверждает практику: не смешивай в одном промпте задачи из принципиально разных доменов (например, анализ данных и написание поста). Создавай отдельный контекст для каждого типа задачи — модель "настроена" на конкретный навык, и смешение снижает качество обоих.
Ресурсы
"How LLMs Follow Instructions: Skillful Coordination, Not a Universal Mechanism" Elisabetta Rocchetti, Alfio Ferrara Department of Computer Science, Università degli Studi di Milano elisabetta.rocchetti@unimi.it
Связанные работы: IFEval (Zhou et al., 2023), InFoBench (Qin et al., 2024b), FollowBench (Jiang et al., 2024), INLP (Ravfogel et al., 2020), PWCCA (Morcos et al., 2018), исследования "instruction-following dimension" (Heo et al., 2025; Stolfo et al., 2025)
