Локальные нейросети всё чаще используют как личных ассистентов: они работают без интернета, не отправляют данные в облако и кажутся безопаснее облачных сервисов. Но есть нюанс: если попросить модель помочь с ответом продавцу и упомянуть предоплату, она может написать мошеннику «переведу сегодня». При этом на прямой вопрос «это мошенники?» та же модель почти всегда отвечает правильно. Разрыв между проверкой и действием — ключевая проблема.
В статье на Habr описан эксперимент: три локальные модели проверили на 42 схемах мошенничества на русском, казахском и шала. На казахском модели почти ни разу не предупредили пользователя. После установки простого защитного слоя между человеком и ассистентом ни одна мошенническая просьба не прошла. Разберём, почему так происходит и как воспроизвести защиту.
Почему модель отвечает правильно, но помогает мошеннику
Языковая модель не «понимает» контекст как человек. Она предсказывает следующий токен на основе паттернов. Когда вы спрашиваете «это мошенники?», модель видит явный запрос на оценку и выдаёт шаблонный ответ с предупреждением. Но когда вы просите «помоги ответить продавцу, я согласна на предоплату», запрос смещается в сторону генерации текста. Модель выполняет инструкцию — написать ответ — и не проверяет, безопасна ли сама ситуация. Предупреждение не встроено в процесс генерации.
Вторая причина — языковая. На казахском и шала обучающих данных меньше, и модель хуже распознаёт маркеры мошенничества. В эксперименте на казахском предупреждения почти не срабатывали. Это типичная ошибка: считать, что если модель хорошо отвечает на русском, она так же хороша на других языках.
Как работает защитный слой
Защитный слой — это промежуточный модуль между пользователем и моделью. Он перехватывает запрос, проверяет его на признаки мошенничества и либо блокирует, либо добавляет предупреждение. В описанном эксперименте слой был простым: список триггерных фраз и правила. Например, если в запросе есть «предоплата», «переведу», «реквизиты» и просьба помочь с ответом, слой останавливает генерацию и выдаёт пользователю предупреждение.
Важно: защитный слой не пытается заменить модель. Он работает как фильтр на входе и выходе. На входе — проверка запроса, на выходе — проверка сгенерированного ответа. Если ответ содержит инструкции по переводу денег незнакомцу, слой его блокирует.
Конкретные шаги для настройки защиты
- Составьте список триггеров. Включите слова и фразы, связанные с деньгами и срочностью: «предоплата», «перевод», «реквизиты», «скиньте на карту», «только сегодня», «гарант», «курьер», «возврат». Для каждого языка — свой список.
- Определите правила блокировки. Например: если в запросе есть два и более триггера и просьба помочь с ответом — блокировать. Если один триггер — добавить предупреждение.
- Проверяйте выход модели. После генерации ответа прогоняйте его через тот же фильтр. Если модель предлагает перевести деньги или отправить данные — блокировать и просить пользователя переформулировать запрос.
- Тестируйте на реальных схемах. Возьмите 10–20 типичных сценариев (продажа на доске объявлений, предоплата за товар, просьба о помощи от «родственника») и проверьте, как ведёт себя система. В эксперименте использовали 42 схемы — это хороший ориентир.
- Добавьте поддержку языков. Если вы работаете с казахским или другими языками, убедитесь, что триггеры и правила учитывают местные формулировки. Не полагайтесь на русскоязычные паттерны.
Типичные ошибки и примеры
Ошибка первая: доверять модели как эксперту по безопасности. Модель может дать правильный ответ на прямой вопрос, но не применит его в контексте генерации. Пример: пользователь пишет «Помоги ответить: я согласен на предоплату, но продавец просит перевести на карту». Модель может ответить «Вот текст: Я переведу сегодня». Защитный слой должен остановить это.
Ошибка вторая: использовать только один язык. В эксперименте на казахском модели почти не предупреждали. Если ваш ассистент работает с многоязычной аудиторией, тестируйте каждую языковую группу отдельно.
Ошибка третья: сложные правила без тестирования. Простой слой из триггеров и блокировок сработал лучше, чем попытка научить модель «понимать» мошенничество. Начните с простого, проверьте на реальных примерах и только потом усложняйте.
Пример из эксперимента: после установки защитного слоя ни одна мошенническая просьба не прошла. Это не значит, что слой идеален — он может блокировать и легитимные запросы. Но для бытовых сценариев (помощь с ответом продавцу, перевод денег) такой фильтр снижает риск.
Что делать, если вы уже используете локальную модель
Проверьте, как ваша модель реагирует на просьбы помочь с ответом в подозрительных ситуациях. Задайте ей вопрос «это мошенники?» — скорее всего, ответ будет правильным. Затем попросите «помоги ответить, я согласен на предоплату» — и посмотрите, что она сгенерирует. Если ответ содержит инструкции по переводу, добавьте защитный слой.
Не полагайтесь на обещания «модель обучена безопасности». Локальные модели часто не имеют встроенных фильтров, а те, что есть, обходятся формулировками. Простой внешний слой с триггерами и проверкой выхода — практичный шаг, который можно сделать за вечер. Главное — тестировать на реальных схемах и не забывать про языки, на которых говорит ваша аудитория.