TL;DR
LLM генерирует текст вероятностно — каждый раз выбирая следующий токен из множества вариантов. Поэтому один и тот же промпт при повторных запросах даёт похожие, но не идентичные ответы. Исследование количественно показало, где именно разброс большой, а где — маленький.
Главная находка: категориальные инструкции модель выполняет почти без сбоев, числовые — нет. Когда промпт требовал "всегда включай предупреждения о безопасности" — модель выполнила в 100% случаев. Когда промпт требовал числовой показатель в конкретном формате — 10–25% ответов не содержали корректного числового значения, хотя требование было явным. Это не баг конкретной модели — это природа генерации: категория сужает пространство вариантов почти до нуля, число — почти никак не сужает.
Вывод работает в обе стороны: больше ограничений в промпте → стабильнее вывод. Открытые задачи с широким пространством правильных ответов давали наибольший разброс. Жёстко ограниченные сценарии — минимальный. Это напрямую переводится в правило: хочешь воспроизводимый результат — добавляй явные структурные ограничения, особенно для числовых значений.
Схема находок
НАХОДКА 1: Ограничения → Стабильность
Больше явных требований в промпте → меньше разброс между повторными запросами
Меньше ограничений (открытая задача) → больше вариативность вывода
НАХОДКА 2: Категории vs. Числа
"Включи раздел X" → выполняется почти в 100% случаев
"Используй числовой формат Y" → не выполняется в 10–25% случаев
→ Числовые инструкции без формата-якоря ненадёжны
НАХОДКА 3: Смысл vs. Цифры
Тексты могут быть похожи по смыслу, но содержать разные числа —
это разные результаты, даже если "звучат одинаково"
→ ПРАКТИЧЕСКОЕ ПРАВИЛО:
Для воспроизводимых ответов нужны явные структурные + числовые ограничения
+ проверочная инструкция перед выводом
Всё применяется в одном промпте.
Пример применения
Задача: Ты продакт-менеджер стартапа. Просишь Claude оценить риски выхода на маркетплейс Wildberries. Каждый раз получаешь разный ответ: то три риска, то восемь, то есть цифры, то нет. Питч для инвесторов нужен завтра — нужна стабильная структура.
Промпт:
Задача: оцени риски выхода нового бренда на Wildberries в категории уходовая косметика.
Бренд: небольшой производитель из Екатеринбурга, оборот 3 млн ₽/мес.,
нет опыта работы с маркетплейсами.
ОБЯЗАТЕЛЬНАЯ СТРУКТУРА — включи все 4 блока без исключений:
1. ОПЕРАЦИОННЫЕ РИСКИ — ровно 3 пункта, каждый с оценкой вероятности
в формате: Высокая / Средняя / Низкая
2. ФИНАНСОВЫЕ РИСКИ — ровно 3 пункта, каждый с цифровым диапазоном потерь
в формате: от X до Y тыс. ₽
3. КОНКУРЕНТНЫЕ РИСКИ — ровно 2 пункта с конкретными названиями
конкурентов-лидеров категории
4. РЕКОМЕНДАЦИИ — ровно 3 действия на первые 30 дней,
каждое начинается с глагола
ПЕРЕД ТYЕМ КАК ОТВЕТИТЬ — проверь:
☐ Все 4 блока присутствуют
☐ Каждый пункт в блоках 1–2 содержит числовое или категориальное значение
в нужном формате
☐ Блок 4 содержит ровно 3 пункта, начинающихся с глагола
Результат: Модель выдаст строго структурированный ответ с заполненными числовыми полями. При повторном запросе структура сохранится — изменится наполнение, но не форма. Разброс по смыслу будет, по структуре — нет. Категориальные требования (Высокая/Средняя/Низкая) выполнятся надёжно. Числовые диапазоны — тоже, потому что явно указан формат "от X до Y тыс. ₽".
Почему это работает
LLM не "думает" — она предсказывает следующий токен. Без ограничений пространство вариантов огромно: можно написать три риска или десять, с числами или без, с заголовками или сплошным текстом. Модель выбирает то, что статистически правдоподобно. Каждый раз немного иначе.
Категориальные инструкции сужают пространство почти до нуля. Если написать "включи предупреждение о рисках" — это бинарный выбор: включить или нет. Паттерн "включить" встречается настолько чаще в обучающих данных, что модель почти никогда не выбирает "нет". Именно поэтому 100% соответствие.
Числовые инструкции без якоря — другая история. "Укажи интенсивность" — слишком много правильных вариантов. Можно написать "умеренная", "60%", "RPE 12", "средняя нагрузка" — все технически верно. Модель выбирает любое из них. Добавь формат — "в формате X%Y" — и пространство вариантов схлопывается. Поэтому формат числового значения важнее самого требования включить число.
Рычаги управления: - Количество пунктов ("ровно 3") → убирает разброс от 1 до 8 - Формат числа ("от X до Y тыс. ₽") → якорит числовой вывод - Категориальная шкала (Высокая/Средняя/Низкая) → надёжнее свободного числа - Проверочный чеклист в конце промпта → модель "перечитывает" требования перед выводом, это снижает пропуски
Шаблон промпта
Задача: {задача}
Контекст: {краткий контекст — кто, что, зачем}
ОБЯЗАТЕЛЬНАЯ СТРУКТУРА — включи все {N} блоков:
1. {БЛОК 1} — {количество пунктов} пунктов,
каждый содержит: {категориальная шкала или числовой формат}
2. {БЛОК 2} — {количество пунктов} пунктов,
каждый содержит числовое значение в формате: {формат}
3. {БЛОК 3} — {количество пунктов} пунктов,
каждый начинается с: {глагол / конкретное слово}
ПЕРЕД ОТВЕТОМ ПРОВЕРЬ:
☐ Все {N} блоков присутствуют
☐ Каждый пункт содержит {требование} в формате {формат}
☐ {Специфическое требование под задачу}
Что подставлять:
- {задача} — конкретная задача, не абстрактная
- {N блоков} — фиксированное число разделов
- {категориальная шкала} — Высокая/Средняя/Низкая, Да/Нет, 1–5 — надёжнее свободного числа
- {числовой формат} — явно: "от X до Y", "X%", "X–Y млн ₽"
- Чеклист — копируй как есть, адаптируй под свои блоки
🚀 Быстрый старт — вставь в чат:
Вот шаблон структурированного промпта с контролем консистентности.
Адаптируй под мою задачу: {твоя задача}.
Задавай уточняющие вопросы, чтобы заполнить все поля.
[вставить шаблон выше]
LLM спросит: сколько блоков нужно, какие числовые форматы ты ожидаешь, сколько пунктов в каждом блоке — потому что без этого она не сможет заполнить структуру корректно. Она возьмёт паттерн из шаблона и адаптирует под твою задачу.
Ограничения
⚠️ Числа без якоря остаются ненадёжны: Даже явная инструкция "укажи значение в формате X" снижает, но не устраняет разброс. При критичных числах — верифицируй вручную или добавляй второй запрос: "проверь, все ли числовые поля заполнены в нужном формате".
⚠️ Смысловая похожесть ≠ эквивалентность: Два текста могут быть похожи по смыслу, но содержать принципиально разные числа. "Высокий риск" в одном ответе и "средний риск" в другом — семантически близко, но по сути — разные рекомендации. Не доверяй "ощущению похожести" там, где цифры важны.
⚠️ Исследование на одной модели: Проводили только на Gemini 2.5 Flash. Принципы, вероятно, работают для всех LLM (природа вероятностной генерации универсальна), но конкретные цифры разброса могут отличаться у Claude или GPT-4o.
⚠️ Клиническая сфера: Примеры из медицины — не копируй промпты для реальных медицинских решений без экспертной проверки.
Ресурсы
Название: Consistency of AI-Generated Exercise Prescriptions: A Repeated Generation Study Using a Large Language Model
Автор: Kihyuk Lee, PhD — Data Convergence Team, Seoul National University Bundang Hospital, Сеонгнам, Республика Корея
Ключевые отсылки из исследования: - FITT принцип (Frequency, Intensity, Time, Type) — стандарт спортивной медицины ACSM - SBERT / all-MiniLM-L6-v2 — модель для измерения семантической близости текстов - AI-as-a-Judge — техника оценки LLM-вывода через другую LLM - Choi et al. — предыдущее исследование по структурированным промптам для назначения упражнений
