3,583 papers
arXiv:2607.24801 76 6 июля 2026 г. FREE

Few-Shot калибровка отказа: как заставить LLM классифицировать, а не только говорить «нет»

КЛЮЧЕВАЯ СУТЬ
37% точных ответов превращаются в 95% — без единой правки модели, просто за счёт пары примеров в промпте. Метод позволяет заставить LLM называть точную категорию вместо трусливого «не подходит», когда категорий три и больше. Модель боится взять на себя ответственность за метку и на всякий случай сливает всё в отказ — даже если прекрасно понимает тему запроса. Решение простое: показать по образцу на каждую категорию прямо в системном промпте, включая пример отказа.
Адаптировать под запрос

TL;DR

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

Причина проста: модели умеют отличать безопасное от подозрительного почти идеально — здесь точность выше 99%. Но когда нужно точно назвать одну метку из ограниченного списка, а не просто оценить «подходит/не подходит», маленькие и средние модели теряются. Одна модель в тесте отклоняла запросы правильно в 99,75% случаев, но правильно называла тему всего в 37% случаев — то есть почти всегда говорила «нет», даже на явно подходящие запросы.

Решение — показать модели несколько примеров-эталонов прямо в промпте: пример текста для каждой категории плюс пример текста, который нужно отклонить. Это резко увеличивает уверенность модели в выборе конкретной метки. У одной из моделей точность правильной классификации после этого выросла с 37% до 95% без изменения самой модели — только за счёт добавленных примеров.


🔬

Схема метода

ШАГ 1: Чёткое структурированное описание задачи — список категорий + явное правило "когда отклонять" → в одном промпте
ШАГ 2: Добавить 4-6 примеров "запрос → категория", покрывающих КАЖДУЮ категорию, включая пример отказа → в том же промпте

Оба шага выполняются в одном запросе — это не диалог, а один хорошо собранный системный промпт.


🚀

Пример применения

Задача: У владельца небольшой веб-студии есть Telegram-бот на базе GPT, который сортирует входящие заявки клиентов: «хочу сайт», «хочу лендинг», «вопрос по текущему проекту» или «спам/не по теме». Без примеров бот слишком часто отвечает «не по теме» даже на явные запросы — клиенты злятся, что бот их «не понимает».

Промпт:

Ты — точный классификатор входящих сообщений от клиентов веб-студии.

Единственные допустимые категории: новый_сайт, лендинг, текущий_проект, не_по_теме.

Любое сообщение, которое явно не относится к новому сайту, лендингу или текущему проекту, ДОЛЖНО получить категорию "не_по_теме".

Отвечай ТОЛЬКО названием категории, без пояснений и лишних слов.

Примеры правильной классификации:

Сообщение: "Нужен интернет-магазин с каталогом товаров, сколько это стоит?"
Категория: новый_сайт

Сообщение: "Хочу простую страницу для сбора заявок на курс, одну страницу"
Категория: лендинг

Сообщение: "Когда будет готов второй этап моего проекта, который вы начали в октябре?"
Категория: текущий_проект

Сообщение: "Привет, а вы продаёте автозапчасти?"
Категория: не_по_теме

Теперь классифицируй:
Сообщение: {сообщение_клиента}
Категория:

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


🧠

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

Модель, которую просят выбрать ровно одну метку из закрытого списка, ведёт себя как человек на экзамене с штрафом за неправильный ответ — она выбирает «пропустить вопрос» (то есть отказ), если не уверена на 100%. Это не проблема знаний: модель понимает тему запроса, но боится «взять на себя» конкретную метку.

Сильная сторона LLM — обучение по образцу прямо в контексте (in-context learning). Если показать пример «такой текст → такая метка», модель копирует этот паттерн увереннее, чем следует голой инструкции.

Метод даёт модели по образцу для каждой категории, включая образец отказа. Это рисует чёткую границу между «точно да» и «точно нет» — и модель перестаёт сваливать всё подряд в «отклонено».

Рычаги управления: - Количество примеров на категорию — больше примеров точнее держат формат, но длиннее промпт и дольше ответ. В исследовании оптимум был около 6 примеров суммарно. - Явное текстовое правило «когда отклонять» в самой инструкции (не только в примерах) — усиливает границу между категориями. - Если у вас всего 2 категории, эффект будет слабее — метод максимально полезен, когда категорий 3+ и модель рискует «спрятаться» в отказе.


📋

Шаблон промпта

Ты — точный классификатор входящих {тип_объекта}.

Единственные допустимые категории: {категория_1}, {категория_2}, {категория_3}, "не_подходит".

Любой {объект}, который явно не относится к {категория_1}, {категория_2} или {категория_3}, ДОЛЖЕН получить категорию "не_подходит".

Отвечай ТОЛЬКО названием категории, без пояснений и лишних слов.

Примеры правильной классификации:

{объект}: "{пример_текст_1}"
Категория: {категория_1}

{объект}: "{пример_текст_2}"
Категория: {категория_2}

{объект}: "{пример_текст_3}"
Категория: {категория_3}

{объект}: "{пример_текст_отказа}"
Категория: не_подходит

Теперь классифицируй:
{объект}: {входной_запрос}
Категория:

Подставь: {тип_объекта} — что классифицируешь (заявки, отзывы, письма), {категория_1-3} — твои реальные темы, {пример_текст} — по одному яркому реальному примеру на каждую категорию, включая явный «не подходящий» пример.

🚀 Быстрый старт — вставь в чат:

Вот шаблон классификатора-роутера с few-shot примерами. Адаптируй под мою задачу: {твоя задача}.
Задавай вопросы, чтобы заполнить поля.

[вставить шаблон выше]

LLM спросит, какие у тебя категории и есть ли у тебя реальные примеры сообщений для каждой — потому что без конкретных примеров метод не сработает: именно примеры (а не общие описания) учат модель не «прятаться» в отказе.


⚠️

Ограничения

⚠️ Компромисс точность/осторожность: слишком много примеров валидных категорий может заставить модель реже отклонять по-настоящему неподходящие запросы. В одном случае из исследования точность отказа упала с 90% до 56% после добавления примеров.

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

⚠️ Автоматический подбор формулировок не помогает: сложная автоматическая оптимизация промпта (без ручных примеров) не дала прироста лучше, чем просто вручную подобранные 4-6 примеров. Не трать время на автоматизацию — ручные примеры эффективнее.

⚠️ Примеры увеличивают время ответа: добавление примеров делает промпт длиннее, а ответ модели — медленнее (в 2-6 раз). Для задач, где нужна мгновенная реакция, это может быть критично.


🔍

Как исследовали

Исследователи взяли 22 открытые компактные модели (от 270 миллионов до 70 миллиардов параметров) и проверили их в роли «роутера» — программы, которая должна определить, к какой из трёх тем (право, финансы, здравоохранение) относится запрос, или отклонить его, если запрос не по теме или опасен. Тестировали на смеси из 10 датасетов, включая явно токсичные и просто нерелевантные вопросы.

Дальше для 7 моделей попробовали три способа «прокачать» промпт без изменения весов модели: чёткое структурированное описание задачи, добавление нескольких примеров-эталонов и автоматический эволюционный подбор формулировок (GEPA). Оказалось, что главная проблема моделей — не в том, что они путают опасное с безопасным (тут точность выше 99%), а в том, что они боятся точно назвать правильную тему и просто отказывают.

Добавление примеров решило эту проблему для большинства моделей, поднимая точность классификации на десятки процентных пунктов — но при этом слегка уменьшало осторожность отказа. Любопытно, что дорогая автоматическая оптимизация (GEPA) не побила простой набор ручных примеров ни для одной модели — то есть сложность здесь не окупилась.


🔗

Ресурсы

Šléher R., Brach W., Košťál K., Galke L. Influence of Prompt Engineering on Small Language Models for Guarded Query Routing. Slovak University of Technology in Bratislava; University of Southern Denmark. Использован фреймворк DSPy и бенчмарк GQR-Bench.


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

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

37% точных ответов превращаются в 95% — без единой правки модели, просто за счёт пары примеров в промпте. Метод позволяет заставить LLM называть точную категорию вместо трусливого «не подходит», когда категорий три и больше. Модель боится взять на себя ответственность за метку и на всякий случай сливает всё в отказ — даже если прекрасно понимает тему запроса. Решение простое: показать по образцу на каждую категорию прямо в системном промпте, включая пример отказа.

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

Правило: одна категория = один пример плюс один пример отказа — всё в одном промпте, без диалогов. Модель копирует паттерн из примера увереннее, чем следует голой инструкции — это её главная сила, обучение по образцу в контексте. Без примеров модель ведёт себя как студент на экзамене со штрафом за ошибку — предпочитает промолчать, чем рискнуть неправильным ответом.

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

Модель отличает безопасное от подозрительного почти идеально — точность выше 99%. Но назвать одну метку из закрытого списка — совсем другая задача, и маленькие модели тут сыплются: одна из них отклоняла правильно в 99,75% случаев, а точную категорию называла всего в 37%. Пример «текст → метка» рисует чёткую границу между «точно да» и «точно нет» — и модель перестаёт прятаться в отказе.

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

Роутинг запросов → чат-боты поддержки, сортировка заявок, классификация писем — конкретно когда категорий три и больше и есть риск, что модель начнёт «прятаться» в отказе. НЕ подходит для задач с всего двумя категориями (эффект слабый) и для сценариев с жёстким лимитом на скорость ответа — примеры удлиняют промпт, ответ становится медленнее в 2-6 раз.

Мини-рецепт

1. Опиши категории: список + явное правило «когда отклонять» прямо текстом в инструкции, не только в примерах.
2. Добавь примеры: 4-6 штук суммарно, по одному на каждую категорию плюс один пример отказа.
3. Зафиксируй формат: «Отвечай ТОЛЬКО названием категории» — без пояснений и разговоров.
4. Проверь баланс: если модель перестала отклонять реально неподходящие запросы — убери пару примеров валидных категорий, не перегружай их.

Примеры

[ПЛОХО] : Классифицируй сообщение клиента: новый_сайт, лендинг, текущий_проект или не_по_теме. Сообщение: {текст}
[ХОРОШО] : Ты — точный классификатор. Категории: новый_сайт, лендинг, текущий_проект, не_по_теме. Любое сообщение не по теме ДОЛЖНО получить категорию не_по_теме. Пример: "Нужен интернет-магазин с каталогом" → новый_сайт. Пример: "Привет, продаёте запчасти?" → не_по_теме. [ещё 2 примера на остальные категории]. Отвечай только категорией. Сообщение: {текст}
Источник: Influence of Prompt Engineering on Small Language Models for Guarded Query Routing
ArXiv ID: 2607.24801 | Сгенерировано: 2026-07-29 04:27

Проблемы LLM

ПроблемаСутьКак обойти
Модель прячется в отказ вместо точной категорииДаёшь модели закрытый список категорий плюс вариант "не подходит". Модель видит, что запрос похож на одну из тем. Но не решается назвать точную метку. На всякий случай выбирает "не подходит" — даже если запрос явно подходит. Модель отличает "подходит/не подходит" почти идеально. Но точно назвать ОДНУ метку из списка — для неё сложнееДобавь в промпт по одному примеру-эталону на каждую категорию. Плюс один пример явного отказа. Это резко повышает уверенность модели в выборе конкретной метки

Методы

МетодСуть
Few-shot калибровка отказа — точная маршрутизация вместо ухода в "не подходит"Опиши категории и явное правило "когда отклонять" в одном промпте. Добавь 4-6 примеров формата текст категория. Обязательно покрой КАЖДУЮ категорию, включая один пример отказа. Работает потому что модель копирует показанный паттерн увереннее, чем следует голой инструкции. Пример для каждой метки рисует чёткую границу между "точно да" и "точно нет". Когда да: 3+ категории, есть вариант отказа, нужна точная маршрутизация заявок. Когда нет: всего 2 категории (эффект слабее), очень маленькие модели (не держат 4+ вариантов стабильно даже с примерами), нужна мгновенная скорость ответа (примеры увеличивают длину промпта и замедляют ответ в 2-6 раз)
📖 Простыми словами

Influence ofPromptEngineeringon SmallLanguageModelsfor Guarded Query Routing

arXiv: 2607.24801

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

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

Чтобы эта херня заработала, нужно использовать Few-Shot Prompting — то есть буквально завалить модель примерами. Когда нейронка видит 5–10 конкретных пар «запрос-ответ», её страх ошибиться снижается. Она понимает границы дозволенного и перестает видеть в каждом втором сообщении угрозу. Без примеров Small Language Models лажают в 30–40% случаев, просто сливая нормальные лиды в спам, потому что формулировка клиента показалась им «недостаточно стандартной».

Хотя исследование гоняли на классификации запросов, этот принцип — универсальный паттерн для любого AI-ассистента. Если ты просишь модель выбрать один вариант из пяти, она всегда будет стремиться к самому безопасному пути. Это касается и ботов в поддержке, и автоматических фильтров почты, и даже систем оценки резюме. Везде, где есть риск «не угадать», маленькая модель выберет отказ как стратегию выживания, если ты не покажешь ей на пальцах, что именно считать нормой.

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

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

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

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