TL;DR
Hard Negatives — техника, которая улучшает точность LLM через добавление похожих, но неправильных примеров в контекст. Вместо "вот правильный пример, делай так" даёшь "вот правильный, вот похожий неправильный, различай". Исследование HIL-GPT (система для автомобильного тестирования) показало: компактные специализированные модели с контрастными примерами работают лучше больших общих моделей.
LLM плохо различает тонкие нюансы между похожими вариантами. Когда все примеры положительные, модель не видит границ — что правильно, что почти правильно, но не то. В автотестировании это критично: две команды могут выглядеть похоже, но делать разное. Без контраста модель путает. Hard negatives — это не любые неправильные примеры, а максимально похожие на правильные, но функционально другие. Модель учится ловить различия.
Исследователи создали датасет из triplets (тройки): anchor (задача) + positive (правильное решение) + negative (похожее неправильное). Негативы генерировали двумя путями: эвристикой (похожие по ключевым словам) и LLM-синтезом (попросили модель создать правдоподобные, но неверные варианты). Результат: компактная модель bge-base-en-v1.5 с hard negatives обошла большие модели по точности и скорости.
Схема метода
ШАГ 1: Собери примеры
→ Реальные правильные примеры твоей задачи
ШАГ 2: Создай hard negatives
→ Попроси LLM сгенерировать похожие, но неправильные варианты
→ Или найди реальные примеры, которые выглядят похоже, но решают другую задачу
ШАГ 3: Структурируй контекст (triplet)
→ Задача (anchor)
→ Правильное решение (positive)
→ Неправильное решение (negative) с объяснением почему не подходит
ШАГ 4: Запроси выполнение
→ На основе контраста правильного и неправильного — реши мою задачу
Всё в одном промпте.
Пример применения
⚠️ Сильная зона метода: Задачи, где нужно различать тонкие нюансы между похожими вариантами. Не работает для простых однозначных задач.
Задача: Ты пишешь письмо клиенту с отказом в возврате товара. Нужен твёрдый, но вежливый тон — не агрессивный и не заискивающий. LLM часто скатывается в один из крайностей.
Промпт:
Напиши письмо клиенту с отказом в возврате товара.
ПРАВИЛЬНЫЙ ТОН (positive):
"Благодарим за обращение. Мы внимательно изучили ситуацию.
Согласно условиям возврата, товар с признаками использования
не подлежит возврату. Мы готовы предложить скидку 15% на следующую
покупку как компенсацию."
НЕПРАВИЛЬНЫЙ ТОН #1 — слишком мягко, заискивающе (negative):
"Нам очень жаль, что так получилось! Мы понимаем ваше разочарование.
К сожалению, по правилам мы не можем вернуть деньги, но, пожалуйста,
не обижайтесь на нас!"
НЕПРАВИЛЬНЫЙ ТОН #2 — слишком сухо, формально (negative):
"Заявка отклонена. Товар не соответствует условиям возврата.
Претензии не принимаются. Обращение закрыто."
Ситуация: клиент купил кроссовки, носил 2 недели, потом пришёл
с "браком" (стёрлась подошва от активного использования).
Напиши письмо в ПРАВИЛЬНОМ ТОНЕ — твёрдо, фактологично, вежливо.
Избегай крайностей из негативных примеров.
Результат: Модель видит границы — что слишком мягко, что слишком сухо. Письмо получится в балансе: факты без агрессии, отказ без извинений за правила, конструктивное предложение вместо пустых "нам жаль".
Почему это работает
LLM обучены на массиве текста, где похожие паттерны могут означать разное. Без явного контраста модель не понимает границ. Ты просишь "вежливо, но твёрдо" — она выдаст что-то среднее, но может промахнуться в любую сторону. Нет калибровки.
Hard negatives создают якоря восприятия. Модель видит: вот ТАК не надо (слишком мягко), вот ТАК тоже не надо (слишком сухо), вот МЕЖДУ ними — правильно. Это как показать на линейке: 3 — мало, 7 — много, нужно 5. Без 3 и 7 модель не поймёт, где 5.
Почему похожие негативы эффективнее случайных? Потому что модель учится различать нюансы. Если дашь совсем неправильный пример ("Иди в жопу, клиент") — модель и так понимает, что это плохо. Но пример "Нам очень жаль..." — выглядит вежливо, может показаться подходящим. Hard negative говорит: "Стоп, это ТОЖЕ неправильно, вот почему".
Рычаги управления: - Количество негативов (1-3) — один для простых задач, несколько для многомерных (тон + структура + длина) - Тип контраста — противоположные крайности (слишком мягко / слишком сухо) или близкие вариации (два похожих стиля с тонкой разницей) - Объяснение почему негатив плох — добавь или убери. С объяснением — модель понимает причину, без — сама делает вывод из контекста
Шаблон промпта
Выполни задачу: {описание_задачи}
ПРАВИЛЬНЫЙ ПОДХОД (positive):
{пример_правильного_решения}
[Опционально: почему это правильно]
НЕПРАВИЛЬНЫЙ ПОДХОД #1 (negative):
{похожий_неправильный_вариант_1}
[Почему не подходит: {причина}]
НЕПРАВИЛЬНЫЙ ПОДХОД #2 (negative):
{похожий_неправильный_вариант_2}
[Почему не подходит: {причина}]
Контекст задачи:
{твои_данные}
Результат должен следовать ПРАВИЛЬНОМУ ПОДХОДУ
и избегать ошибок из НЕПРАВИЛЬНЫХ.
Что подставлять:
- {описание_задачи} — что нужно сделать (написать текст, выбрать решение, найти ошибку)
- {пример_правильного_решения} — один конкретный пример правильного выполнения
- {похожий_неправильный_вариант} — примеры, которые ВЫГЛЯДЯТ правильно, но не подходят по тонким критериям (тон, стиль, формат, логика)
- {причина} — краткое объяснение почему negative не подходит (1-2 предложения)
- {твои_данные} — конкретная ситуация, которую нужно решить
Как создать hard negatives, если у тебя нет готовых:
🚀 Быстрый старт — вставь в чат:
У меня есть задача: {твоя_задача}
Вот пример ПРАВИЛЬНОГО решения:
{твой_пример}
Создай 2-3 ПОХОЖИХ, но НЕПРАВИЛЬНЫХ варианта (hard negatives).
Они должны выглядеть правдоподобно, но нарушать важные критерии
(тон, структуру, логику). Для каждого объясни, почему он не подходит.
Потом собери всё в структуру: anchor (задача) → positive (правильно)
→ negatives (похоже, но неправильно). Я использую это как контекст
для будущих запросов.
LLM сгенерирует варианты, которые выглядят близко к правильному, но содержат типичные ошибки. Она понимает паттерн "правдоподобно, но неверно" и создаст контрастные примеры под твою задачу.
Ограничения
⚠️ Требует примеров: Если у тебя нет ни одного правильного примера — техника не работает. Нужна база для создания контраста.
⚠️ Не для простых задач: Если задача однозначная ("столица России") — hard negatives бесполезны. Работает там, где есть нюансы и субъективность.
⚠️ Hard negatives должны быть похожи: Случайные неправильные примеры не дают эффекта. Негатив должен быть почти правильным, чтобы модель училась различать детали.
⚠️ Токены: Каждый пример жрёт контекст. Для простых задач 1-2 негатива достаточно. Больше — если критериев много (тон + структура + длина).
Ресурсы
Smarter, not Bigger: Fine-Tuned RAG-Enhanced LLMs for Automotive HIL Testing — исследование про систему HIL-GPT для автомобильного тестирования, где компактные модели с hard negatives показали лучший результат, чем большие общие модели. Chao Feng, Zihan Liu, Siddhant Gupta, Gongpei Cui, Jan von der Assen, Burkhard Stiller (University of Zurich, Volvo Car Corporation).
