TL;DR
Определение задачи в промпте важнее всех техник. Исследователи протестировали тысячи вариантов промптов для классификации текстов — от простых задач (распознать благодарность) до сложных (найти специфические психологические паттерны). Сравнивали популярные техники: персоны ("Ты психолог"), chain-of-thought ("давай пошагово"), автогенерацию промптов моделью, few-shot примеры.
Персоны и CoT почти не помогают. Если базовый промпт сформулирован плохо — нечёткое определение, размытая задача — никакие "давай подумаем пошагово" или "ты эксперт" не спасут. Разница между плохим и хорошим промптом доходила до 75% точности. При этом добавление персоны или CoT к плохому промпту давало прирост максимум 2-5%. К хорошему промпту эти техники вообще ничего не добавляли.
Работает итеративный перебор формулировок. Лучшие результаты получались когда: 1) писали несколько вариантов определения конструкта вручную, 2) тестировали на размеченных данных, 3) брали лучший вариант и просили модель сгенерировать ещё варианты, 4) снова тестировали. Few-shot примеры (3-5 штук) стабильно давали небольшой прирост. Предсказать лучшую формулировку заранее невозможно — только эмпирически.
Схема подхода
ШАГ 1: Напиши 5-10 вариантов определения конструкта
→ Меняй формулировки, структуру, акценты
ШАГ 2: Протестируй на 20-30 примерах с известными ответами
→ Посчитай совпадения с правильными ответами
ШАГ 3: Возьми лучший вариант → попроси модель сгенерировать ещё 10 вариантов
→ "Перефразируй это определение 10 способами"
ШАГ 4: Снова протестируй все варианты
→ Выбери финального победителя
ШАГ 5 (опционально): Добавь 3-5 few-shot примеров
→ Небольшой прирост точности
Пример применения
Задача: Отбираешь отклики клиентов на продукт, где есть конкретные предложения по улучшению (не просто "плохо", а "добавьте функцию X" или "уберите баг с Y"). Нужно автоматически фильтровать сотни комментариев.
Итерация 1 — Плохой промпт:
Определи, содержит ли этот отзыв конструктивное предложение.
Текст: [отзыв клиента]
Ответь: Да или Нет
Итерация 2 — Уточнили определение:
Конструктивное предложение — это когда клиент описывает:
- Конкретную функцию, которую нужно добавить
- Конкретный баг или проблему, которую нужно исправить
- Конкретное изменение в интерфейсе или работе продукта
НЕ считается предложением:
- Общая похвала или критика без деталей
- Эмоциональная реакция без указания что менять
Содержит ли этот отзыв конструктивное предложение?
Текст: [отзыв клиента]
Ответь: Да или Нет
Итерация 3 — Попросили модель перефразировать лучший вариант:
Вот моя задача классификации. Сгенерируй 10 вариантов формулировки определения "конструктивного предложения", меняя структуру, акценты, примеры.
[вставить промпт из Итерации 2]
Результат: Модель выдаст 10 вариантов. Ты тестируешь каждый на своих 20-30 отзывах с известными ответами (которые сам разметил), считаешь процент совпадений, выбираешь лучший. Разница между худшим и лучшим вариантом может быть 30-50% точности на твоих данных.
Почему это работает
LLM не понимает задачу "в общем" — она ищет паттерны в твоих словах. Если ты написал "конструктивное предложение" без определения, модель возьмёт значение из своих обучающих данных — а там это может быть что угодно. Если определил точно ("конкретная функция" + "конкретный баг") — модель знает на что смотреть.
Популярные техники работают через усиление базового промпта. Персона ("ты менеджер продукта") или CoT ("подумай пошагово") пытаются активировать дополнительный контекст из обучающих данных. Но если базовое определение размыто — дополнительный контекст тоже размыт. Это как пытаться увеличить резкость размытой фотографии — не работает. Сначала нужна чёткая фотография (определение), потом можно улучшать детали.
Невозможно предсказать лучшую формулировку потому что мы не знаем точно какие паттерны модель зацепила в обучающих данных. Слово "конструктивный" может активировать один набор паттернов, "actionable feedback" — другой. Единственный способ узнать — протестировать на реальных примерах.
Рычаги управления: - Структура определения (список критериев vs описание vs примеры) → меняй и тестируй что работает - Негативные примеры ("НЕ считается") → уточняют границы, особенно для размытых понятий - Few-shot примеры (0 vs 3-5) → добавь к финальному варианту для +5-10% точности - Число тестовых итераций (5 vs 50 вариантов) → больше итераций = выше шанс найти лучший промпт
Практический протокол
Шаг 1: Определи конструкт максимально конкретно
Вместо абстрактных слов дай операциональное определение — что конкретно должно присутствовать в тексте.
❌ Плохо: "токсичный комментарий"
✅ Хорошо: "комментарий содержит: оскорбление конкретного человека ИЛИ призыв к насилию ИЛИ дискриминацию по признаку (пол, национальность, религия)"
Шаг 2: Создай тестовый набор
Вручную разметь 20-50 примеров. Это твой бенчмарк для сравнения промптов. Без этого не поймёшь какой промпт лучше.
Шаг 3: Сгенерируй 5-10 вариантов промпта вручную
Меняй: - Порядок критериев - Уровень детализации - Добавляй/убирай негативные примеры - Меняй формат (список vs текст vs таблица)
Шаг 4: Протестируй каждый вариант
Прогони каждый промпт через свой тестовый набор. Считай процент совпадений с твоей разметкой.
Промпт для тестирования:
Вот мой промпт для классификации:
[твой промпт]
Примени его к этим текстам и выдай результаты в формате CSV:
Текст 1: [текст]
Текст 2: [текст]
...
Формат ответа:
номер,результат
1,Да
2,Нет
...
Шаг 5: Автогенерация вариантов лучшего промпта
Возьми лучший вариант из Шага 4:
Ты помогаешь оптимизировать промпт для классификации текстов.
Вот текущий промпт:
[лучший вариант]
Он показал точность 75% на тестовых данных.
Сгенерируй 10 альтернативных формулировок:
- Сохрани смысл и критерии
- Меняй структуру, порядок, примеры
- Пробуй разные способы объяснения
- Можешь добавлять/убирать детали
Выдай каждый вариант отдельным блоком, пронумеруй.
Шаг 6: Снова протестируй все новые варианты
Повтори процесс из Шага 4 с новыми промптами.
Шаг 7: Добавь few-shot примеры к финальному варианту
Возьми победителя и добавь 3-5 примеров с правильными ответами:
[твой лучший промпт]
Примеры:
Текст: "Ужасный продукт, всё плохо!"
Ответ: Нет
Текст: "Добавьте кнопку экспорта в Excel — сейчас приходится копировать руками"
Ответ: Да
Текст: "Баг: при нажатии на «Сохранить» вылетает ошибка 404"
Ответ: Да
Теперь классифицируй этот текст:
[новый текст]
Ограничения
⚠️ Нужен размеченный датасет: Без 20-50 примеров с правильными ответами не сможешь сравнить промпты. Придётся разметить вручную.
⚠️ Трудозатраты на итерации: Чтобы найти лучший промпт, нужно протестировать десятки вариантов. Это время, хоть и разовое вложение.
⚠️ Не работает для очень редких паттернов: Если конструкт встречается в 2-3% случаев (как positive meaning making в исследовании — 17%), модель склонна отвечать "нет" почти всегда. Нужны специальные техники балансировки.
⚠️ Субъективные конструкты сложнее: Чем более интерпретативная задача (не "есть ли число" а "есть ли глубокая психологическая трансформация"), тем сложнее модели и тем важнее точное определение.
Как исследовали
Команда взяла три задачи классификации — от простой к сложной. Простая: найти благодарность в Reddit-постах (эмоция, которую люди легко распознают — согласие между разметчиками 75%). Средняя: найти негативные базовые убеждения в текстах людей с ментальными проблемами ("я никчёмный", "мир опасен" — согласие 82%). Сложная: найти positive meaning making — когда человек описывает рост через травму ("после смерти мамы я стал сильнее" — согласие 70%).
На каждой задаче протестировали тысячи комбинаций промптов: базовые определения (написанные вручную и сгенерированные моделью), персоны ("ты психолог"), chain-of-thought ("думай пошагово"), объяснения в few-shot примерах, zero-shot vs few-shot. Сравнивали с разметкой экспертов-психологов.
Результаты удивили: популярные техники вроде CoT и персон дали прирост максимум 2-5%, и только когда базовый промпт был плохим. Лучший результат давала комбинация: вручную сформулировать определение → протестировать варианты → взять лучший → попросить модель сгенерировать ещё варианты → снова протестировать. Разница между худшим и лучшим промптом достигала 75% точности на сложной задаче и 16% на простой.
Почему так: модель ищет паттерны в словах промпта. Если слова размытые — паттерны размытые. "Давай подумаем" не компенсирует "не знаю что искать". Интересно, что автоматически сгенерированные промпты иногда обгоняли человеческие — видимо, модель случайно попадала в формулировки, которые лучше резонировали с её обучающими данными. Но надёжнее всего — комбинировать: человек даёт смысл, модель генерирует вариации, эмпирика выбирает победителя.
Адаптации и экстраполяции
🔧 Техника: A/B тестирование определений вместо полного перебора
Если нет времени на десятки итераций, сделай мини-тест:
Вот две формулировки одной задачи классификации.
Вариант А:
[первое определение]
Вариант Б:
[второе определение]
Примени оба к этим 10 текстам. Для каждого текста выдай результат в формате:
Текст 1:
- Вариант А: Да/Нет
- Вариант Б: Да/Нет
[10 текстов для классификации]
Сравни результаты со своей разметкой, выбери лучший вариант. Это не оптимально, но лучше чем вообще не тестировать.
🔧 Техника: Попроси модель объяснить почему она ошиблась
Когда нашёл лучший промпт, но точность всё равно не 100%, возьми ошибочные случаи:
Вот мой промпт для классификации:
[промпт]
Вот текст, который ты классифицировал как "Да", но правильный ответ "Нет":
[текст где ошиблась]
Объясни:
1. Почему ты решил что это "Да"?
2. Какие части текста ввели в заблуждение?
3. Как мне изменить определение в промпте, чтобы избежать таких ошибок?
Используй объяснения модели чтобы уточнить определение — добавить негативные примеры, прояснить границы.
🔧 Техника: Chain-of-thought для отладки, не для продакшена
CoT в исследовании не дал прироста точности. Но он полезен для понимания почему модель классифицирует так, а не иначе:
[твой промпт]
Прежде чем ответить, объясни пошагово свои рассуждения:
1. Какие ключевые элементы ты видишь в тексте?
2. Соответствуют ли они критериям из определения?
3. Какие сомнения у тебя есть?
Затем дай финальный ответ: Да или Нет
Используй это на этапе разработки промпта чтобы понять логику модели. В финальной версии убери CoT — он добавляет токены без прироста точности.
Ресурсы
Improving Alignment Between Human and Machine Codes: An Empirical Assessment of Prompt Engineering for Construct Identification in Psychology
Авторы: Kylie L. Anglin, Stephanie Milan, Brittney Hernandez, Claudia Ventura
University of Connecticut (Department of Educational Psychology, Department of Psychological Sciences)
Упоминания из исследования: - Automatic Prompt Engineering (APE) метод Zhou et al. 2022 - Chain-of-Thought работы: Wei et al. 2022 (few-shot CoT), Kojima et al. 2022 (zero-shot CoT) - Explanatory prompting: Lampinen et al. 2022 - GoEmotions датасет: Demszky et al. 2020
