3,583 papers
arXiv:2608.12426 78 12 авг. 2026 г. FREE

Constraint Saturation: почему LLM ломается после 5-6 требований в одном промпте

КЛЮЧЕВАЯ СУТЬ
8 требований в одном промпте → 5.7% шанс, что модель выполнит все сразу, хотя каждое по отдельности она тянет на 41%. Исследование Constraint Saturation позволяет понять сколько условий реально можно дать модели за раз — и как разбить промпт, чтобы не терять качество. Причина в том, что провалы требований проваливаются независимо друг от друга, и вероятности перемножаются — как бросить 8 монет и ждать, что все выпадут орлом. Счётные требования (слова, абзацы) рушатся в 2 раза быстрее бинарных (использовать слово или нет) — их нужно выносить в отдельный запрос, а не пытаться удержать все сразу.
Адаптировать под запрос

TL;DR

Исследователи посчитали, сколько одновременных требований может выдержать LLM в одном промпте — и цифра неутешительная: 5-6 требований это потолок для надёжной работы, а для большинства моделей потолок — 2-4. При этом каждое отдельное требование модель выполняет неплохо (скажем, 40% успеха на восьмом требовании), но шанс выполнить все требования сразу падает почти до нуля — потому что это как бросить 8 монеток и просить, чтобы все выпали орлом.

Главная находка: провалы требований почти не связаны друг с другом. Модель не путает одно требование с другим — она просто независимо проваливает каждое с некоторой вероятностью, и эти вероятности перемножаются. Из-за этого нельзя схитрить, переставив требования местами или подобрав "удачную" комбинацию — коллапс неизбежен, если требований много. Единственное исключение — требования, которые "читают" один и тот же кусок текста (например, число предложений): если модель один раз ошиблась со счётом предложений, она автоматически провалит все требования, завязанные на этот счёт.

Метод исследования простой: они проверяли деструктивно — накидывали от 1 до 12 требований в один промпт (не изменяй буквы "е", ровно 3 абзаца, используй слова X/Y/Z и т.д.) и смотрели, что выживает. Оказалось, что требования на удержание в голове (считать слова, следить за форматом по ходу генерации) деградируют в 2 раза быстрее, чем требования на бинарное решение (использовать/не использовать слово). Практический вывод: если тебе нужна надёжность — дели требования на несколько запросов, не пытайся впихнуть 8 условий в один промпт.


🔬

Схема метода (это не техника, а диагностика — но из неё вытекает практика)

НАБЛЮДЕНИЕ 1: Каждое требование по отдельности → модель выполняет с вероятностью ~40-70%
НАБЛЮДЕНИЕ 2: Вероятности почти независимы → шанс выполнить ВСЕ = произведение всех вероятностей
НАБЛЮДЕНИЕ 3: При k=8 требований → шанс успеха на всех сразу падает до 5.7%, хотя каждое отдельное — 41%
ВЫВОД: чем больше требований в одном промпте — тем экспоненциально ниже шанс, что все выполнены

🚀

Пример применения

Задача: Ты просишь Claude/ChatGPT написать пост для соцсетей с кучей требований одновременно.

Промпт (как делают почти все — и почему это ломается):

Напиши пост про запуск нового продукта. 
Требования:
- Ровно 3 абзаца
- Не больше 120 слов
- Используй слова "инновация", "команда", "рынок"
- Без восклицательных знаков
- Тон — уверенный, но не хвастливый
- Заверши призывом к действию
- Первое предложение — вопрос

Результат: Модель, скорее всего, нарушит хотя бы 1-2 требования — не заметит сама. Она может дать 4 абзаца вместо 3, или превысить лимит слов на 15%, или забыть одно из трёх ключевых слов. При этом каждое требование по отдельности она "умеет" выполнять — просто вероятности не складываются, а перемножаются, и семь требований — это уже за порогом надёжности.

Что делать вместо этого: Разбей на 2 запроса. Сначала — контент и смысл (тон, ключевые слова, призыв к действию). Потом — отдельным запросом попроси проверить и подрезать под формальные рамки (3 абзаца, 120 слов, без восклицательных знаков). Формальные, счётные требования — самые хрупкие, их лучше проверять отдельно, а не диктовать заранее.


🧠

Почему это работает

Модель не "видит" промпт целиком как чек-лист, который держит в голове всю генерацию. Она генерирует текст последовательно, и каждое требование, которое нужно удерживать в процессе (считать слова, следить за форматом), конкурирует за внимание с остальными такими же требованиями. Бинарные решения (использовать слово или нет) — это как галочка, которую можно поставить один раз и забыть. Счётчики — это то, что нужно помнить всю дорогу, и именно они ломаются первыми.

Ключевой рычаг, который вытекает из статьи: дели требования по типу. Счётные и структурные требования (число абзацев, слов, предложений) — выноси в отдельный проверочный запрос. Смысловые и бинарные требования (тон, ключевые слова, наличие/отсутствие чего-то) — можно смело комбинировать в одном промпте, они деградируют вдвое медленнее.

Ещё один рычаг: если несколько твоих требований читают один и тот же кусок текста (например, "ровно 5 предложений" и "каждое предложение начинается с глагола" — оба зависят от того, как модель разбила текст на предложения), провал одного почти гарантированно тащит за собой провал другого. Отслеживай такие связки и проверяй их вместе, отдельно от остальных требований.


📋

Шаблон промпта

Это не техника генерации, а диагностический протокол, который можно применить к своему промпту вручную:

У меня есть промпт с несколькими требованиями:
{вставь список требований}

Разбей их на две группы:
1. "Счётные/структурные" — то, что нужно удерживать по ходу генерации 
   (количество слов, абзацев, предложений, порядок, формат)
2. "Смысловые/бинарные" — то, что можно решить одним махом 
   (использовать слово, тон, запрет темы, включить/исключить элемент)

Для группы 1 предложи, как проверить и исправить результат отдельным запросом после генерации.
Для группы 2 — оставь всё в одном промпте.

🚀 Быстрый старт — вставь в чат:

Вот мой промпт с требованиями: {вставь свой промпт}.
Раздели требования на "счётные/структурные" (число слов, абзацев, порядок) 
и "смысловые/бинарные" (тон, ключевые слова, запреты).
Предложи, как разбить это на 2 запроса: сначала контент, потом проверка формальных рамок.

LLM разберёт твой список требований и покажет, какие из них — самые хрупкие (обычно это счётчики), чтобы ты знал, за какими нужно перепроверять результат вручную или отдельным запросом.


⚠️

Ограничения

⚠️ Порог начинается раньше, чем кажется: уже на 5-6 одновременных требованиях надёжность выполнения "всё сразу" резко падает — это не гипотетический край, а реальный потолок для большинства моделей уже сегодня.

⚠️ Нет "правильного порядка" требований: переставлять требования местами, комбинировать их по-разному — не помогает. Слабая связь между провалами означает, что нет "выигрышной комбинации", которую можно подобрать.

⚠️ Самокоррекция почти не спасает: попросить модель перепроверить себя или сгенерировать 5 вариантов и выбрать лучший — сдвигает порог лишь на 1-2 требования, не больше. Это не решение, а костыль.

⚠️ Планирование заранее не помогает совсем: если попросить модель сначала расписать план, а потом писать текст — это вообще не меняет порог коллапса. Проблема не в отсутствии плана, а в удержании множества условий одновременно.


🔍

Как исследовали

Исследователи создали автоматическую систему проверки — 36 типов требований (не превышай число букв, точное число абзацев, включи такие-то слова и т.д.), каждое проверялось строгим алгоритмом, без участия LLM-судьи (это важно: судья сам ошибается на сложных комбинациях, и это искажало бы результат).

Они прогнали 15 моделей (GPT, Claude, Gemini, Llama, Qwen, DeepSeek, Kimi, Grok) через промпты с числом требований от 1 до 12 — почти 370 000 отдельных проверок. Дизайн был честным: контролировали, чтобы на высоких k не подсовывались специально более сложные требования — сложность требований оставалась одинаковой на всех уровнях, проверили статистически.

Самое удивительное — провалы требований оказались почти независимыми друг от друга. Исследователи ожидали найти "конфликтующие пары" требований, которые мешают друг другу — но нашли только слабую связь, и то через общий кусок текста (если модель неправильно посчитала предложения, она провалит все требования, завязанные на подсчёт предложений), а не через настоящую "путаницу" между смыслами требований. Это значит: коллапс — это чистая математика вероятностей, а не хитрая психология модели.


📋 Дайджест исследования

Ключевая суть

8 требований в одном промпте → 5.7% шанс, что модель выполнит все сразу, хотя каждое по отдельности она тянет на 41%. Исследование Constraint Saturation позволяет понять сколько условий реально можно дать модели за раз — и как разбить промпт, чтобы не терять качество. Причина в том, что провалы требований проваливаются независимо друг от друга, и вероятности перемножаются — как бросить 8 монет и ждать, что все выпадут орлом. Счётные требования (слова, абзацы) рушатся в 2 раза быстрее бинарных (использовать слово или нет) — их нужно выносить в отдельный запрос, а не пытаться удержать все сразу.

Принцип работы

Раньше казалось: чем важнее требование, тем аккуратнее его формулируй. На деле важна не важность, а тип нагрузки на внимание модели. Бинарные решения (использовал слово или нет) — это галочка, поставил один раз и забыл. Счётчики (слов, абзацев, предложений) — то, что нужно тащить через всю генерацию, и именно они ломаются первыми. Переставлять требования местами или подбирать удачную комбинацию — бесполезно, слабой связи между провалами не хватает для лазейки.

Почему работает

Модель не держит промпт как чек-лист в голове. Она пишет текст последовательно, и каждое требование-счётчик отбирает внимание у остальных таких же. Провалы требований почти не связаны друг с другом — модель не путает одно с другим, она просто независимо ломает каждое с разной вероятностью, и эти вероятности перемножаются. Отсюда и цифры: 41% успеха на отдельном требовании при 8 условиях превращается в 5.7% шанс на все сразу. Исключение — требования, читающие один и тот же кусок текста (например, счёт предложений): провал одного тащит за собой провал связанного.

Когда применять

Генерация текста с кучей формальных условий → посты, письма, код со строгим форматом, особенно когда требований больше 5-6 в одном промпте. Не подходит как оправдание для простых задач с 2-3 условиями — там метод избыточен, модель справится без разбивки.

Мини-рецепт

1. Собери все требования: выпиши список условий, которые хочешь впихнуть в один промпт.
2. Раздели на два лагеря: счётные/структурные (число слов, абзацев, порядок) и смысловые/бинарные (тон, ключевые слова, запреты).
3. Счётные — отдельным запросом: сначала пиши контент, потом отдельно проси проверить и подрезать под формальные рамки.
4. Бинарные — можно вместе: тон, ключевые слова, запреты спокойно живут в одном промпте, деградируют вдвое медленнее.
5. Найди связки: если два требования читают один кусок текста (например, счёт предложений и структура каждого предложения), проверяй их вместе, отдельно от остальных.

Примеры

[ПЛОХО] : Напиши пост про запуск продукта. Ровно 3 абзаца, не больше 120 слов, используй слова инновация/команда/рынок, без восклицательных знаков, тон уверенный, первое предложение — вопрос, заверши призывом к действию
[ХОРОШО] : Запрос 1 — Напиши пост про запуск продукта. Тон уверенный, но не хвастливый. Используй слова инновация, команда, рынок. Заверши призывом к действию. Запрос 2 — Проверь этот текст: подрежь до ровно 3 абзацев и не больше 120 слов, убери восклицательные знаки, сделай первое предложение вопросом
Источник: Large Language Models Can Follow Instructions, But Not Many at Once: Phase Transitions in Compositional Constraint Satisfaction
ArXiv ID: 2608.12426 | Сгенерировано: 2026-08-14 06:21

Проблемы LLM

ПроблемаСутьКак обойти
Модель не держит больше 5-6 требований одновременноДаёшь промпт с 7-8 требованиями сразу. Каждое отдельное модель выполняет неплохо, шанс 40-70%. Но шанс выполнить ВСЕ сразу падает почти до нуля — вероятности не складываются, а перемножаются. Уже на 5-6 требованиях надёжность резко проседаетРаздели требования на два запроса. Сначала — смысловые и бинарные (тон, ключевые слова, запреты). Потом отдельным запросом — счётные и структурные (число слов, абзацев, предложений) для проверки и правки
Связанные требования проваливаются одним пакетомЕсли два требования читают один и тот же подсчёт текста (например, "ровно 5 предложений" и "каждое предложение начинается с глагола" — оба зависят от разбивки на предложения), ошибка в разбивке ломает оба сразу. Это не два независимых провала, а один общий сбойНайди требования, которые опираются на один и тот же подсчёт или разбор текста. Проверяй их вместе, отдельным шагом, а не надейся что они независимы

Методы

МетодСуть
Двухэтапная генерация: контент проверка формальных рамокСначала проси модель написать текст с содержательными требованиями (тон, ключевые слова, запреты на темы). Потом отдельным запросом — попроси проверить и подрезать под формальные рамки (число слов, абзацев, предложений). Почему: бинарное требование модель решает один раз и забывает, а счётное нужно держать в голове всю генерацию — такие требования конкурируют за внимание и ломаются первыми. Работает при 5+ требованиях в промпте. Не нужен при 1-3 требованиях — риск коллапса низкий

Тезисы

ТезисКомментарий
Провалы требований почти не связаны между собой — их вероятности перемножаютсяЕсли у тебя 5 требований и каждое модель выполняет с вероятностью 90%, шанс выполнить все сразу — не 90%, а примерно 59% (0.9 в пятой степени). Модель не путает одно требование с другим — она независимо проваливает каждое, и шансы умножаются, а не усредняются. Применяй: прежде чем накидывать много требований в один промпт, прикинь произведение вероятностей — если оно низкое, дели запрос на части
Требования "на память" ломаются в 2 раза быстрее требований "на решение"Есть два типа требований: те, что нужно удерживать по ходу всей генерации (считать слова, следить за форматом), и те, что решаются один раз и забываются (использовать слово или нет, соблюсти тон). Первые конкурируют за внимание модели всю дорогу и деградируют вдвое быстрее вторых. Применяй: если нужно совместить много условий — оставляй в промпте бинарные, а счётные выноси в отдельную проверку
📖 Простыми словами

LargeLanguageModelsCan Follow Instructions, But Not Many at Once: Phase Transitions in Compositional Constraint Satisfaction

arXiv: 2608.12426

Современные нейронки работают не как всемогущий разум, а как статистический предсказатель, который спотыкается на ровном месте, если ты просишь его сделать слишком много дел сразу. Проблема в том, что LLM не умеют держать в голове «чек-лист» задач в процессе генерации текста. Каждое новое условие в промпте — это не просто строчка текста, а конкурирующая нагрузка на внимание модели. Когда ты накидываешь сверху пятое или шестое требование, нейронка просто «вылетает в кювет», потому что её способность связывать ограничения между собой ломается на фундаментальном уровне.

Это как если бы ты попросил друга одновременно жонглировать мячами, ехать на одноколесном велосипеде, петь гимн и при этом перемножать в уме трехзначные числа. По отдельности он, может, и жонглер неплохой, и поет сносно, но композиция навыков превращает его в беспомощное нечто. В исследовании это называют фазовым переходом: до определенного момента модель еще держится, но стоит добавить всего одно лишнее условие, и вероятность успеха падает не плавно, а камнем вниз. Формально она старается, но на деле получается полная лажа.

Цифры здесь просто безжалостные: 2–4 требования — это реальный предел для большинства моделей, после которого начинается лотерея. Даже если модель по отдельности выполняет каждое условие с вероятностью 40%, то при попытке совместить восемь таких «хотелок» шанс на успех стремится к нулю. Это чистая математика: вероятность того, что все восемь «монеток» выпадут нужной стороной одновременно, ничтожна. Особенно сильно модели лажают на счетчиках (например, «напиши ровно 50 слов») — такие задачи требуют контроля на каждом шаге, и именно они первыми отправляют логику AI в нокаут.

Тестировали это на сложных текстовых задачах, но принцип универсален для любой работы с промптами, будь то кодинг, копирайтинг или анализ данных. Если ты впихиваешь в один запрос требования по стилю, длине, запрещенным словам, формату вывода и специфическому тону, ты сам подписываешь своему результату смертный приговор. Сложные промпты — это иллюзия контроля, которая на деле только мешает модели выдать адекватный результат.

Короче: хватит пытаться запихнуть в один промпт всю свою жизнь и ожидать чуда. 5-6 требований — это абсолютный потолок, а для надежности лучше ограничиваться тремя. Если задача сложная, не будь душным заказчиком, а разбивай процесс на этапы: сначала пусть напишет суть, вторым промптом поправит стиль, а третьим — подгонит под формат. Кто пытается решить всё одним махом, получает мусор на выходе и тратит время на бесконечные регенерации.

Работа с исследованием

Адаптируйте исследование под ваши задачи или создайте готовый промпт на основе техник из исследования.

0 / 2000
~0.5-2 N-токенов ~10-30с
~0.3-1 N-токенов ~5-15с