TL;DR
LLM не группирует похожие промпты — она их разгоняет. В традиционных нейросетях (например, для распознавания изображений) похожие объекты сближаются внутри сети с каждым слоем. В LLM всё наоборот: два промпта с одинаковым смыслом расходятся всё дальше по мере прохождения через слои. Это и есть математическая причина, почему модель отвечает по-разному на "синонимичные" запросы.
Самая неожиданная находка: шаблон промпта влияет на ответ модели сильнее, чем сама задача. Если вы переформулировали вопрос, сохранив структуру — это менее рискованно. Если изменили структуру/обёртку промпта — модель дёргается сильнее, чем если бы вы сменили саму задачу.
Порядок опасности по убыванию: опечатки → перестановка слов → замена слов → перефразирование. Опечатки хуже паразнивирования в разы, потому что ломают внутреннюю токенизацию — модель буквально получает другой "алфавит" на входе.
Схема находок
РИСК ИЗМЕНЕНИЯ ПРОМПТА (от высокого к низкому):
Опечатки (typos) → МАКСИМАЛЬНЫЙ риск
↓ ломают токенизацию, модель видит другие "кусочки" слов
Перестановка слов (misalignment) → ВЫСОКИЙ риск
↓ переставить слова хуже, чем заменить синонимами
Замена слов в конце промпта → СРЕДНИЙ риск
↓ маленькие модели чувствительнее к концу, большие — к началу
Перефразирование целыми мыслями → МИНИМАЛЬНЫЙ риск
↓ безопаснее всего, если нужно изменить формулировку
---
ГЛАВНАЯ НАХОДКА:
Шаблон/структура промпта → влияет СИЛЬНЕЕ, чем содержание задачи
Пример применения
Задача: Антон ведёт Telegram-канал про личные финансы. Каждую неделю просит ChatGPT написать разбор ETF. У него есть рабочий шаблон, но иногда он "чуть подправляет" формулировку — и удивляется, почему качество прыгает. Иногда блестяще, иногда среднее.
Промпт — аудит перед отправкой:
Перед тем как отправить промпт, проверь по списку:
1. ОПЕЧАТКИ — нет ли случайных опечаток в шаблоне (не в данных)?
Даже одна опечатка в слове шаблона сильнее ломает ответ, чем
изменение самой задачи.
2. СТРУКТУРА — шаблон тот же, что работал раньше?
Если что-то поменял в обёртке промпта — это влияет сильнее,
чем изменение самого вопроса.
3. ПОРЯДОК СЛОВ — ты менял местами части промпта?
Переставить слова хуже, чем заменить их синонимами.
4. ЕСЛИ НУЖНО ИЗМЕНИТЬ — перефразируй целыми мыслями.
Перефразирование безопаснее перестановки или опечаток.
Результат:
Это не промпт для задачи — это чек-лист для диагностики нестабильных ответов. Антон сможет определить, что именно он менял между хорошими и плохими запросами, и где искать причину скачка качества.
Почему это работает
Обычная нейросеть (для картинок) работает как таможня со стеклом: похожие объекты с каждым шагом обработки становятся ближе друг к другу. Кот и кот — одна стопка. Собака и собака — другая. Это называется кластеризация, и она нужна для точной классификации.
LLM работает иначе — она разгоняет похожие промпты. Два промпта с одним смыслом с каждым трансформерным слоем становятся дальше друг от друга во внутреннем пространстве модели. Это не баг — это особенность архитектуры: модель учит каждый пример отдельно, не формируя "классы" для похожего смысла.
Почему шаблон важнее содержания — потому что шаблон занимает больше токенов и стоит раньше в контексте. Логиты (числа, из которых формируется ответ) суммируют вклад ВСЕХ токенов. Шаблон вносит больший вклад просто потому, что его больше и он идёт первым.
Почему опечатки самые опасные — LLM работает не со словами, а с токенами (кусочками слов). Опечатка меняет токен на другой — модель буквально получает другой "материал" на входе. Перефразирование же сохраняет большинство токенов, только меняет некоторые из них на семантически близкие.
Шаблон промпта
Универсальный "стабилизирующий блок" для начала промпта:
[Зафиксированный заголовок роли или задачи — не меняй между запросами]
{задача}: {содержание_задачи}
[Зафиксированные инструкции формата — не меняй между запросами]
Что подставлять:
- {задача} — тип задания: "Напиши разбор", "Объясни", "Сравни"
- {содержание_задачи} — сам материал: название ETF, тема, данные
Принцип: всё что обёртка — фиксируй и не трогай. Меняй только {содержание_задачи}.
🚀 Быстрый старт — вставь в чат:
Помоги мне зафиксировать стабильный шаблон промпта для повторяющейся задачи.
Я хочу минимизировать прыжки качества между запросами.
Задавай вопросы, чтобы понять мою задачу и помочь составить шаблон.
[вставить шаблон выше]
LLM спросит про твою повторяющуюся задачу и формат ответа — потому что чем точнее зафиксирован шаблон, тем меньше случайных изменений ты вносишь от запроса к запросу.
Ограничения
⚠️ Только теория, без рецепта: Исследование объясняет ПОЧЕМУ возникает чувствительность, но не даёт способа её устранить. Рекомендации (фиксируй шаблон, избегай опечаток) — логические выводы, не проверенные как метод улучшения промптов.
⚠️ Зависимость от размера модели: Где именно опасно менять промпт (начало или конец) зависит от размера модели. В маленьких — конец опаснее, в больших — начало. GPT-4 и Claude — большие, правило "начало важнее" скорее всего применимо.
⚠️ Только тест-задачи с конкретным ответом: Эксперименты проводились на вопросах с однозначным правильным ответом (MCQ). Для творческих задач, где "правильного ответа" нет, выводы применимы по смыслу, но экспериментально не подтверждены.
⚠️ Не про улучшение качества: Исследование про стабильность, а не про качество. Зафиксированный шаблон даст стабильный ответ, но не обязательно лучший.
Ресурсы
Работа: Understanding the Prompt Sensitivity — Yang Liu, Chenhui Chu, Kyoto University
Код: github.com/ku-nlp/Understanding_the_Prompt_Sensitivity
Метрика: PromptSensiScore (PSS) — Zhuo et al., 2024
Датасеты: ARC Challenge, CommonSenseQA, MMLU, OpenBookQA, Alpaca
