Few-shot промптинг: когда БДСМ с ИИ приносит кайф, а когда — только синяки

Вы когда-нибудь пробовали секс в наручниках? Если да — то знаете: это либо очень возбуждает, либо полный провал. Привычный few-shot промптинг для современных моделей — это точно такой же БДСМ.

Если затянуть ремни слишком туго — ИИ начнет задыхаться от ваших примеров, и никакого кайфа не получится. Если в нужный момент не дотянуть — потеряется смысл, и эффект тоже будет недостаточным. Поэтому здесь есть свои правила безопасности, которые большинство людей полностью игнорирует.

Почему few-shot вообще стал популярен — и почему он устарел

Совсем не так давно — не в исторических понятиях, но в темпах развития искусственного интеллекта это целая эпоха — буквально в первой половине 20-х годов, когда был GPT-3, когда был Gemini 1.5, ранние DaVinci и первые версии LLaMA, few-shot стал очень популярным приемом. И многим он действительно давал реальный подъем эффективности.

Как первый опыт — это дает яркие ощущения и запоминается. Сами модели тогда были еще молодыми, неопытными, и им нужен был как раз такой четкий гайд. Показываем, как надо — они повторяют.

Но сегодня все современные нейросетевые модели выросли в раскрепощенных взрослых. И наши few-shot примеры часто работают как излишний ограничитель в руках неопытной доминатрикс — бьет, ограничивает и мешает.

Я сам начинал пользоваться ИИ еще тогда, когда few-shot был действительно необходимым инструментом. Но очень важно всегда держать руку на пульсе, следить за тем, как на старые техники реагируют новые модели, и избавляться от лишнего. Поэтому сегодня я переписал все свои старые промпты, значительно уменьшив количество примеров. И в данный момент занимаюсь тем, что переписываю их снова — избавляясь от примеров почти полностью.

Почему? Давайте разберемся, чем именно «наручники» сковывают свободу модели.

Как наручники сковывают модель: три механизма

Представьте, что вы связали ИИ и сунули ему в рот три примера. Он теперь не может дышать, его окно внимания забито вашими данными — и на реальное размышление над запросом места не остается. Вроде бы техника есть, а комфорта нет.

У этого удушья есть вполне конкретная механика.

1. Перехват внимания — модель смотрит на наручники, а не на партнера

В механизме self-attention веса внимания к тестовому запросу распределяются так:

$$\alpha_{i} = \frac{\exp\left( \frac{\mathbf{q}_{\text{test}} \mathbf{k}_i^\top}{\sqrt{d_k}} \right)}{\sum_{j \in \mathcal{D}_{\text{shots}}} \exp\left( \frac{\mathbf{q}_{\text{test}} \mathbf{k}_j^\top}{\sqrt{d_k}} \right) + \sum_{m \in x_{\text{test}}} \exp\left( \frac{\mathbf{q}_{\text{test}} \mathbf{k}_m^\top}{\sqrt{d_k}} \right)}$$

Если в few-shot слишком много примеров, знаменатель забивается зависимостью от них, и модель залипает на промпте, а не на реальной задаче. Это все равно что смотреть только на наручники и не видеть ни партнера, ни комнаты вокруг.

Допустим, вы даете модели, которая должна рассказывать про овощи, 3—4 примера на помидорах. Вы объясняете, как нужно формулировать, каких ошибок не допускать. Но делаете вы это на примере помидоров — а затем пользователь приходит и спрашивает про кабачки. И вместо того, чтобы просто отвечать в заданной вами форме, ИИ начинает пытаться сделать кетчуп из кабачков или как-то еще внедрить помидоры, потому что помидорами у него забито все внимание.

2. Паразитное смещение — якорение на первом примере

Вторая проблема — паразитное смещение, оно же demonstration interference, или якорение. ИИ часто цепляется вообще за первый пример, как будто это главная команда, а все остальное игнорирует.

Формула смещения предсказания в механизме In-Context Learning — из знаковых работ вроде Zhao et al., «Calibrate Before Use: Improving Few-shot Performance of Language Models» и исследований феномена demonstration shortcut — математически показывает, как именно «наручники» сковывают свободу выбора модели:

$$P(y \mid x, \mathcal{D}_{\text{shots}}) = \text{Softmax}\left( W \cdot \mathbf{h}(x, \mathcal{D}_{\text{shots}}) + \mathbf{b}_{\text{shots}} \right)$$

Где $\mathcal{D}_{\text{shots}} = \{(x_1, y_1), \dots, (x_k, y_k)\}$ — демонстрационные примеры, а вектор $\mathbf{b}_{\text{shots}}$ отражает паразитное смещение — якорение, навязанное распределением классов в промпте.

Если в промпте преобладает один класс — например, только положительные отзывы, — ИИ автоматически склонится к нему. Или помидоры — все, склоняемся к помидорам, даже если реальный запрос требует другого.

3. Галлюцинации от нехватки воздуха

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

Вы пытались показать и на помидорах, и на баклажанах — а к модели приходят и спрашивают про яблоки или про картошку. И она начинает задыхаться и придумывать то, чего нет в реальности. Пытается совместить помидоры, картошку и баклажаны в одном блюде.

По данным исследований, противоречивые few-shot примеры увеличивают вероятность галлюцинаций на 40—60%. 40—60% галлюцинаций только из-за того, что вы добавили неудачные примеры, которые не совпали с запросом.

Мы сталкивались с этим неоднократно в работе. При попытках передавать tone of voice или — что было еще хуже — передавать ограничения, действующие у клиента в математике, эти ограничения начинали кочевать вообще на любую тему, обсуждаемую с ИИ. Именно поэтому все ограничения должны передаваться через RAG-контекст, а tone of voice — формулироваться абстрактно, а не внедряться через few-shot.

Когда БДСМ все-таки к месту: где few-shot все еще нужен

И тем не менее — иногда только хороший БДСМ приносит хорошие ощущения. Так и few-shot все еще бывает полезен. Когда?

1. Маленькие модели

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

2. Жесткий формат без креатива

Когда нам не нужна никакая креативность, а важен очень точный формат — соблюдение жестких структур данных, какой-нибудь JSON или XML-ответ в нашем специализированном формате со своими переменными. Их, конечно же, обязательно нужно показать. Потому что если мы ждем уникальных переменных и не сообщили их модели — откуда она их узнает? Она их опять же выдумает.

Сюда же относится любой уникальный синтаксис, не распространенный, который модель не встречала ранее. Генерация кода на нишевом языке, генерация запросов в специальном сеттинге, валидация информации — здесь уже частично задачи уровня decision-модели, но и обычный ИИ мы можем заставить выдавать нужный JSON, показав ему, как он должен работать.

Здесь как раз нужны ремни для единообразия, наручники для новичков и кляп, чтобы не болтать лишнего.

Важный нюанс — даже когда показываете формат, не передавайте конкретные значения. Покажите переменные, которые должны быть везде, но сами значения замените на заглушки в скобках — например, [PRODUCT_NAME] или {{price}}. Такие плейсхолдеры не имеют веса и не будут перетягивать внимание. Иначе вы снова навяжете то самое паразитное смещение.

Жесткий стоп-лист: где few-shot запрещен

Есть зоны, где few-shot — это стоп-слово. Используете — рискуете сломать и ИИ, и свой результат.

Аналитика данных. Если вы приведете пример, как нужно проанализировать данные, то ровно такие данные и будут во всем вашем анализе. Модель скопирует логику примера, а не разберет реальные цифры.

Сложный копирайтинг. Не будет ни креативности, ни адекватности — будет попытка впихнуть помидоры в кабачки. И это рождает галлюцинации. Тем более что на копирайтинге температура модели выше — и ситуация становится еще хуже.

Брейнштормы. Никаких few-shot. Это напрямую ограничит свободу мышления. Поштормить уже не получится.

Многозадачность. Если идет многозадачность, модель будет путаться в примерах и не понимать, чего вы от нее хотите. Если столько примеров и еще многозадачность — как будто вы сами не понимаете, чего хотите.

Во всех этих случаях лучше освободить модель, дать ей волю — и она покажет, на что способна самостоятельно.

Как заниматься сексом без наручников и получать больше кайфа

Что же работает вместо few-shot?

1. Zero-shot + четкие инструкции + RAG

Вы даете свободу, но даете при этом абстрактные инструкции. Современные модели прекрасно понимают абстракцию и могут по ней понять гораздо больше, чем вы вообще пытаетесь вложить. А ограничиваете — и отчасти направляете — вы ее RAG-контекстом.

Это нормальное ограничение. Да, это тоже индивидуально под конкретную задачу, но это действительно полезно и при этом информативно.

Вместо «пример — пример — пример — напиши текст про помидоры, вот правильный ответ: помидоры — это бла-бла-бла» вы просто говорите: «напиши текст про помидоры, это должен быть лонгрид в таком-то тоне, с такой-то позиции». И вот тебе наша RAG-база про томаты, про все их сорта — выбирай нужные, учитывай.

Никаких помидоров, навязанных через примеры. Только инструкция и фактура.

2. Режим мышления — Chain of Thought

Попросите ИИ думать вслух. И тут развилка — либо он будет тупо перебирать ваши примеры и фиксироваться на них, и не подумает нормально. Либо — если вы освободили его от few-shot — он начнет думать на основе своих куда более глубоких знаний, чем те примеры, которые вы ему привели.

Читайте цепочку размышлений — в ней вы всегда увидите проблемы, которые приносит ваш промпт. Даже если это не reasoning-модель, прямо в диалоге просите: «объясни ход своих мыслей, объясни, почему так». Когда он будет формулировать объяснение, качество работы повысится, и вы увидите, где именно ваш промпт жмет.

3. Файн-тюнинг — длительные отношения

А если у вас есть задачи, которые повторяются многократно и в разных формах, то здесь вообще нужен файн-тюнинг. Это длительные отношения — вы обучаете партнера на своих данных, и он учится делать то, что вам нужно, без подсказок. И уже не впихивая их в контекстное окно с высоким приоритетом.

Да, это более ресурсозатратная история, чем просто поправить промпт и убрать из него лишнее. Но для масштабных задач путь должен быть именно таким.

Вывод

Few-shot устарел, но не мертв. Он просто занял свою нишу.

Few-shot prompting мощен и опасен, если использовать его некстати, не в том контексте, не в той ситуации. Для большинства задач с современными моделями он вредит гораздо больше, чем помогает — забивает контекст, вводит смещение смысла, провоцирует галлюцинации.

Но в узких случаях, когда нужна жесткая структура и уникальный синтаксис, он все еще полезен. Аккуратно — но полезен и действительно добавляет эффективности.

Поэтому прежде чем совать в промпт свои примеры, спросите себя — сможет ли модель справиться без них? Не знаете, сможет ли — попробуйте zero-shot.

Если вы их все-таки впихнули — переспросите себя, не слишком ли много? Одного, двух, трех примеров хватит. Мы все равно рискуем, что модель сосредоточится на первом и ничего больше не будет читать.

И если вы засандалили несколько примеров — перепроверьте, не противоречат ли они друг другу. Проверьте согласованность. Если они будут противоречить — вы точно уже ничего хорошего не получите.

Хороший БДСМ — это про доверие и безопасность. Хороший промптинг — тоже. Не мучайте ИИ понапрасну — он и так может сделать для вас больше, чем вы думаете. 

[ E-E-A-T // АВТОР МАТЕРИАЛА ]
Marketing Business Partner агентства Time2see
ВРЕМЯ ДЕЙСТВОВАТЬ

Нужна система роста на основе данных?

Спроектируем маркетинговую и техническую архитектуру под задачи вашего предприятия.