Одна идея в десяти обёртках от LLM

от автора

Почему нейросеть думает одинаково восемь раз подряд — и как вытащить её из этой петли одной строчкой в системном промпте

Ты просишь Claude придумать несколько заголовков для статьи . Читаешь — и понимаешь, что это один заголовок в десяти обёртках. Меняются слова, порядок, двоеточия, суть — одна.

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

Если тебя это тоже бесит — дело не в том, что ты плохо пишешь промпты. Это свойство всех frontier-LLM, и Sakana AI опубликовала статью, где объяснила причину и предложила решение в одну строчку в системном промпте. От меня — самая суть!

Откуда берётся однообразие

Это ощущение знакомо любому, кто пытался выжать из AI больше трёх вариантов подряд. К пятому ты начинаешь их мысленно кластеризовать — и видишь, что в восьми якобы «разных» идеях сидят две-три зацепки, переодетые в разную одежду.

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

Sakana проверили это на самой простой задаче: «подбрось честную монетку 100 раз». Модель понимает, что распределение должно быть 50/50. На практике у frontier-моделей оно уезжает к 70/30 и сильнее. То есть модель знает правильное распределение, но не умеет из него сэмплить — это две разные способности, и вторая у LLM развита плохо.

В творческих задачах это превращается в то самое «восемь обёрток одной мысли». Модель по умолчанию схлопывает разнообразие к модальному ответу — наиболее вероятному. Просишь басню — получаешь вариации про черепаху и зайца. Просишь заголовок — получаешь «Как X стать Y: полный гайд» в восьми формах.

Почему просьба «быть разнообразнее» не работает

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

Второй стандартный ход — поднять температуру.

Это параметр генерации, который управляет тем, насколько «смело» модель выбирает следующий токен:

— при температуре 0 она всегда берёт самый вероятный,

— при 1 сэмплит из распределения как есть,

— при 2 хвосты поднимаются и шанс вытащить менее очевидный вариант растёт.

Кажется логичным: больше температура — больше разнообразия.

В статье Sakana это сравнение есть: high-temperature sampling всё равно проигрывает SSoT. Причина в том, что температура размывает выбор финального токена, но не меняет траекторию рассуждения. Модель всё так же идёт по наиболее вероятному пути мысли (не будем спорить, можно ли назвать рассуждение — мыслью) — просто выбирает чуть разные слова для его выражения. Крутить температуру — это не «добавить креативности», а подкрутить генератор синонимов. Рассуждение одно, лексика плавает.

Обе попытки — и докрутка промпта, и температура — работают на уровне слов и токенов. А проблема ниже: в том, как модель вообще выстраивает траекторию рассуждения. Ты говоришь ей «сверни налево», но не даёшь никаких поводов сворачивать — нет механизма, который бы заставил её это сделать.

Большая часть того, что сегодня продаётся как «prompt engineering», — это бесконечные уговоры модели словами. Пожалуйста, подумай шире. Пожалуйста, не повторяйся. Пожалуйста, будь креативнее. Это не инженерия — это заклинание, и работает оно примерно с той же эффективностью, как молитва на закрытую дверь.

Что предлагает SSoT

SSoT расшифровывается как String Seed of Thought. Идея в том, чтобы встроить источник случайности прямо в рассуждение модели — и заставить её использовать эту случайность для внутренних решений.

Промпт выглядит так: перед ответом сгенерируй случайную строку в тегах <random_string>, потом в тегах <thinking> используй её как seed для решений, которые обычно делаются «на автомате», и только потом выдай результат в <answer>.

Как выглядит промт от автров статьи:

Сначала сгенерируй сложную случайную строку между тегами <random_string> и </random_string>. Потом используй эту строку как основу для всех случайных решений внутри тегов <thinking> и </thinking>. После этого выдай финальный ответ между тегами <answer> и </answer>. Ответ должен быть единственным, уникальным и максимально разнообразным.

Работает это потому, что модель, получив случайную строку, сама додумывается превратить её в источник решений. В статье показано, что она обычно берёт ASCII-коды символов и применяет к ним modulo или rolling hash, чтобы на каждой развилке рассуждения получать разный исход: разные строки дают разные хеши и разные ветки. Дело не в том, что модель вдруг стала умнее — она просто перестала схлопывать своё знание к самому вероятному пути.

Как использовал я:

Сначала сгенерируй случайную строку между тегами <random_string> и </random_string>.Затем используй эту строку внутри <thinking></thinking>, чтобы выбрать: угол подачи, структуру, тон и точку входа в текст. Разные строки должны давать принципиально разные решения.Потом пиши итоговый текст в <answer></answer>.

Что это меняет в работе с AI

Это работает как антидот к регрессии к среднему. Если ты используешь AI генерации идей, заголовков, гипотез, вариантов фич, — SSoT даёт шанс увидеть не только самые очевидные ветки решения. Для задач с одним правильным ответом SSoT не нужен и может мешать: он заточен под задачи, где валидных вариантов несколько.

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

ссылка на оригинал статьи https://habr.com/ru/articles/1026772/