3,583 papers
arXiv:2604.11287 72 13 апр. 2026 г. FREE

Консистентность LLM-вывода: почему один промпт даёт разные результаты — и как это исправить

КЛЮЧЕВАЯ СУТЬ
Категориальные инструкции модель выполняет почти в 100% случаев. Числовые — проваливает в каждом четвёртом-десятом ответе. Не потому что не поняла запрос. Потому что без явного формата пространство вариантов слишком широкое. Метод позволяет получать стабильную структуру при повторных запросах — одни и те же блоки, числа в нужном формате, ничего не пропущено. Фишка: дело не в том, чтобы написать "укажи число" — а в том, чтобы написать "в формате от X до Y тыс. ₽". Без якоря модель выбирает из десятков вариантов: "умеренная", "60%", "RPE 12", "средняя нагрузка" — всё технически верно. С явным форматом пространство схлопывается до одного паттерна.
Адаптировать под запрос

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. — предыдущее исследование по структурированным промптам для назначения упражнений


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

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

Категориальные инструкции модель выполняет почти в 100% случаев. Числовые — проваливает в каждом четвёртом-десятом ответе. Не потому что не поняла запрос. Потому что без явного формата пространство вариантов слишком широкое. Метод позволяет получать стабильную структуру при повторных запросах — одни и те же блоки, числа в нужном формате, ничего не пропущено. Фишка: дело не в том, чтобы написать "укажи число" — а в том, чтобы написать "в формате от X до Y тыс. ₽". Без якоря модель выбирает из десятков вариантов: "умеренная", "60%", "RPE 12", "средняя нагрузка" — всё технически верно. С явным форматом пространство схлопывается до одного паттерна.

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

Категориальное требование — почти бинарный выбор: включить или нет. В обучающих данных паттерн "включить" встречался почти всегда. Модель выбирает его автоматически. Число без формата — это не бинарный выбор. Это выбор из сотни равновероятных вариантов. "60 минут", "час", "60 мин", "около часа" — одинаково правдоподобны. Модель ткнёт в любой. Добавь формат — и числовая инструкция становится такой же чёткой, как "включить/не включить". Ещё один рычаг — чеклист самопроверки в конце промпта. Модель перечитывает требования перед выводом. Пропусков становится меньше.

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

LLM не думает — предсказывает следующий токен. Каждый токен выбирается из вероятностного распределения. Широкое пространство вариантов — большой разброс между повторными запросами. Структурные ограничения буквально сужают это пространство. "Включи раздел" — почти нет альтернатив. "Напиши диапазон в формате от X до Y тыс. ₽" — тоже почти нет альтернатив. Без формата — десятки равноценных токенов, модель выбирает случайно. Отдельная ловушка: два ответа могут звучать похоже по смыслу, но содержать принципиально разные числа. "Высокий риск" и "средний риск" — семантически близко, по сути — разные рекомендации. Смысловая похожесть не означает числовую равнозначность.

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

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

Мини-рецепт

1. Зафикируй блоки: Напиши "включи все N блоков" с названием каждого. Это категориальное требование — модель выполнит почти в 100%.

2. Укажи количество пунктов: "Ровно 3 пункта" убирает разброс от одного до восьми — без этого каждый ответ будет разной длины.

3. Добавь формат для чисел — это главное: Не «укажи риск» — а «в формате: Высокая / Средняя / Низкая» или «в формате от X до Y тыс. ₽». Без явного формата числа будут приходить в случайном виде.

4. Добавь чеклист в конец промпта: Список требований с квадратиками. Модель перечитает задачу перед ответом — пропуски снижаются. Копируй шаблон и адаптируй под свои блоки.

Примеры

[ПЛОХО] : Оцени риски выхода на Wildberries для небольшого бренда косметики
[ХОРОШО] : Оцени риски выхода на Wildberries. Бренд: небольшой производитель из Екатеринбурга, оборот 3 млн ₽/мес., нет опыта работы с маркетплейсами. ОБЯЗАТЕЛЬНО включи все 3 блока: 1. ОПЕРАЦИОННЫЕ РИСКИ — ровно 3 пункта, каждый с оценкой: Высокая / Средняя / Низкая 2. ФИНАНСОВЫЕ РИСКИ — ровно 3 пункта, каждый с диапазоном потерь в формате: от X до Y тыс. ₽ 3. РЕКОМЕНДАЦИИ — ровно 3 действия на первые 30 дней, каждое начинается с глагола ПЕРЕД ОТВЕТОМ ПРОВЕРЬ: - Все 3 блока присутствуют - Каждый пункт блока 1 содержит одно из: Высокая / Средняя / Низкая - Каждый пункт блока 2 содержит диапазон в формате от X до Y тыс. ₽ - Блок 3 содержит ровно 3 пункта, начинающихся с глагола
Источник: Consistency of AI-Generated Exercise Prescriptions: A Repeated Generation Study Using a Large Language Model
ArXiv ID: 2604.11287 | Сгенерировано: 2026-04-14 05:27

Проблемы LLM

ПроблемаСутьКак обойти
Числовые инструкции выполняются ненадёжноПишешь "укажи значение". Модель понимает требование. Но в 10–25% ответов число либо отсутствует, либо написано в другом формате. Причина: вариантов "правильного" ответа слишком много. "Умеренная нагрузка", "60%", "RPE 12", "средняя" — всё технически верно. Модель выбирает любой. Каждый раз иначеДобавь явный формат: не "укажи значение", а "укажи в формате от X до Y тыс. ₽" или "Высокая / Средняя / Низкая". Формат сужает пространство вариантов. Без формата — инструкция не работает

Методы

МетодСуть
Числовой якорь — стабильный формат вместо свободного числаВместо "укажи риск" пиши с явным форматом. Два варианта: 1) Категориальная шкала — "оцени как Высокий / Средний / Низкий". Выбор из трёх вариантов. Модель почти никогда не пропускает — это бинарная задача: включить или нет. Надёжность близка к 100%. 2) Числовой шаблон — "укажи в формате от X до Y тыс. ₽" или "в формате X%". Пространство вариантов схлопывается до одного паттерна. Пропуски резко снижаются. Когда применять: любой структурированный вывод с цифрами — оценки, сметы, риски, KPI. Не применяй там где нужна авторская интерпретация, а не факт
📖 Простыми словами

Consistency ofAI-Generated Exercise Prescriptions: A Repeated Generation StudyUsingaLargeLanguageModel

arXiv: 2604.11287

Нейросети не умеют выдавать один и тот же результат дважды, потому что они работают как генератор вероятностей, а не как база данных. Когда ты просишь модель составить план тренировок или оценить риски, она не лезет в папку с готовым ответом, а буквально на ходу собирает текст по кусочкам, каждый раз подбрасывая невидимые кости. Даже если промпт идентичен, вероятностная природа LLM заставляет её выбирать разные пути: сегодня она решит, что важнее упомянуть приседания, а завтра — выпады, просто потому что статистически оба варианта уместны.

Это как если бы ты каждое утро спрашивал у сонного друга дорогу до метро. Он всегда выведет тебя к станции, но один раз скажет: "иди прямо до аптеки", а в другой — "сверни за тем синим домом". Суть не меняется, но структура и детали плывут. В этом и кроется главная подстава: нейросеть — это не калькулятор, где 2+2 всегда 4, а бесконечно болтливый эксперт, который никогда не повторяется слово в слово.

Исследование на примере планов упражнений показало, что разброс ответов — это не баг, а фича архитектуры. В одном запросе модель выдает три подхода, в другом — пять, где-то добавляет время отдыха, а где-то забывает. Что реально работает для стабилизации этой чехарды: жесткие рамки в промпте (требуй конкретный формат), нулевая температура (настройка temperature: 0 заставляет модель быть максимально скучной и предсказуемой) и структурированный вывод вроде JSON. Без этих костылей ты каждый раз будешь получать новый авторский взгляд на одну и ту же задачу.

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

Короче: забудь о том, что AI даст тебе стабильный результат "из коробки". LLM лажает в консистентности по определению, и это нужно учитывать еще на этапе проектирования. Либо ты зажимаешь модель в тиски жестких инструкций и параметров, либо смиряешься с тем, что твой "цифровой помощник" — это генератор случайных вариаций, который каждый раз играет в лотерею с твоими данными. Кто не умеет фиксировать выдачу, тот никогда не внедрит AI в реальный продакшн.

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

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

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