Скриншот неудачного ответа вашего бота может оказаться в соцсетях за секунды. Один грубый ответ, одна нелепая рекомендация, один политически некорректный комментарий — и вот уже новость: «AI-бот компании X оскорбил клиента» или «Бот компании Y советует покупать у конкурентов». Репутационный ущерб может быть несоразмерен тому, сколько вы сэкономили на автоматизации.

Контент-фильтры и модерация — это страховка от таких инцидентов. Не идеальная, но существенно снижающая риски. В этой статье разберём, как выстроить систему фильтрации для AI-ботов: что проверять, какими инструментами, как не убить при этом пользовательский опыт.

Что может пойти не так: типы нежелательного контента

Прежде чем строить фильтры, нужно понимать, от чего защищаемся.

Оскорбления и токсичность

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

Примеры: прямые оскорбления, снисходительный тон, пассивная агрессия, грубые формулировки.

Дискриминация и предвзятость

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

Примеры: сексизм, расизм, эйджизм, дискриминация по признаку инвалидности.

Политика и религия

Бизнес-боту не место в политических или религиозных дискуссиях. Любая позиция отпугнёт часть аудитории.

Примеры: политические высказывания, критика или поддержка религий, комментарии о социальных движениях.

Нарушение brand guidelines

Бот говорит не так, как бренд. Использует неподходящий тон, упоминает конкурентов позитивно, критикует собственную компанию, даёт неверную информацию о продуктах.

Примеры: рекомендация купить у конкурента, негативные отзывы о своих продуктах, неформальный сленг для консервативного бренда.

Вредоносный контент

Инструкции по незаконным действиям, опасные советы, дезинформация. Особенно критично для ботов в сфере здоровья, финансов, безопасности.

Примеры: медицинские советы без disclaimers, инструкции по обходу законов, опасные DIY-рекомендации.

Раскрытие конфиденциальной информации

Бот случайно выдаёт внутреннюю информацию, данные других клиентов, коммерческие секреты.

Примеры: упоминание внутренних процессов, информация о других клиентах, детали ценообразования, которые не публичны.

Архитектура системы фильтрации

Как организовать проверку контента? Вот типичная архитектура.

Фильтрация на входе

Проверка пользовательского сообщения до отправки в модель.

Зачем: Блокировать провокации, снизить вероятность генерации плохого контента, защитить от prompt injection.

Что проверять: явные оскорбления от пользователя, попытки инъекций, запросы на запрещённые темы.

Действия: блокировка с вежливым отказом, перенаправление на оператора, логирование для анализа.

Фильтрация на выходе

Проверка ответа модели до отправки пользователю. Это основной рубеж защиты.

Зачем: Поймать всё, что пропустили на входе или что модель сгенерировала сама.

Что проверять: токсичность, нарушение brand guidelines, конфиденциальная информация, вредоносный контент.

Действия: замена на безопасный ответ, редактирование проблемных частей, эскалация на человека.

Пост-фактум анализ

Анализ диалогов после отправки. Не предотвращает инцидент, но позволяет найти и исправить проблемы.

Зачем: Находить то, что пропустили фильтры. Улучшать фильтры на основе реальных данных.

Методы: выборочный ручной review, автоматический анализ на паттерны, анализ обратной связи от пользователей.

Инструменты и методы фильтрации

Какие технологии использовать для фильтрации?

Rule-based фильтры

Простые правила: списки запрещённых слов, регулярные выражения, шаблоны.

Плюсы: быстро, предсказуемо, легко настраивать, понятная логика.

Минусы: легко обойти (опечатки, синонимы, encoding), много false positives при агрессивных правилах.

Применение: первая линия защиты, ловит очевидное. Хорошо для конкретных слов, которые точно не должны появляться.

ML-классификаторы

Модели машинного обучения, обученные определять токсичность, sentiment, тематику.

Плюсы: понимают контекст, сложнее обойти, ловят неявные случаи.

Минусы: требуют инфраструктуры, могут ошибаться, нужны данные для обучения/дообучения.

Инструменты: Perspective API (Google), OpenAI Moderation API, свои модели на BERT/similar.

LLM как модератор

Использовать другую LLM для проверки ответов первой.

Плюсы: может проверять сложные критерии (соответствие brand guidelines, tone of voice), гибкая настройка через промпт.

Минусы: дополнительная latency, стоимость (ещё один API-вызов), та же LLM может ошибаться.

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

Гибридный подход

Комбинация методов: rule-based для очевидного, ML-классификатор для токсичности, LLM для brand compliance.

Такой каскад ловит больше, чем каждый метод по отдельности.

Настройка под brand guidelines

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

Определите правила бренда

Tone of voice — как бренд говорит: формально или неформально, дружелюбно или нейтрально, с юмором или серьёзно.

Запрещённые темы — о чём бренд не говорит: политика, конкуренты, внутренние процессы.

Обязательные элементы — что должно быть: disclaimers в определённых случаях, упоминание контактов для сложных вопросов.

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

Встройте правила в промпт

Системный промпт должен содержать brand guidelines. Но одного промпта недостаточно — модель может его «забыть» или проигнорировать.

Создайте brand-специфичные проверки

Примеры:

Упоминание конкурентов — детектировать названия конкурентов в ответе. Блокировать или редактировать.

Обещания — детектировать формулировки типа «гарантируем», «обязательно», «100%». Такие обещания могут создать юридические проблемы.

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

Неформальность — если бренд формальный, детектировать сленг, эмоджи, слишком casual формулировки.

Баланс: защита без ущерба для UX

Агрессивная фильтрация может сделать бот бесполезным.

Проблема false positives

Фильтр блокирует нормальные ответы из-за случайного совпадения.

Пример: слово «убить» в контексте «убить время» или «цена убийственно низкая» ловится фильтром насилия.

Решения: учитывать контекст (ML-классификаторы лучше rule-based), настраивать пороги чувствительности, анализировать заблокированное и корректировать правила.

Проблема «бесполезного бота»

Бот на всё отвечает «извините, я не могу помочь».

Решения: позитивные формулировки («Для этого вопроса лучше обратиться к специалисту»), fallback на полезные альтернативы, эскалация на человека вместо тупика.

Проблема latency

Много проверок = медленный ответ.

Решения: параллельные проверки вместо последовательных, быстрые проверки (rule-based) первыми, тяжёлые (LLM) — только если не прошёл первые, кэширование для повторяющихся паттернов.

Тестирование на реальных сценариях

Перед запуском: прогнать через фильтры реальные диалоги (исторические или смоделированные). Измерить false positive rate. Если блокируется более 1-2% нормальных ответов — пересмотреть настройки.

Мониторинг и улучшение

Фильтры — не «поставил и забыл». Нужен постоянный мониторинг.

Метрики

Block rate — какой процент ответов блокируется. Слишком высокий — фильтры слишком агрессивны. Слишком низкий — возможно, не ловят проблемы.

False positive rate — какой процент заблокированного на самом деле нормальный. Измеряется ручным review выборки.

Инциденты — сколько проблемных ответов прошло через фильтры. Измеряется по жалобам пользователей и post-hoc анализу.

Latency impact — насколько фильтрация замедляет ответ.

Регулярный review

Заблокированного — что ловят фильтры? Правильно ли ловят? Нужно ли корректировать?

Пропущенного — анализ обратной связи, поиск инцидентов, которые фильтры не поймали.

Новых паттернов — появляются новые способы обхода, новые проблемные темы. Фильтры должны эволюционировать.

Feedback loop

Пользователи могут помечать плохие ответы. Это ценный источник данных. Настройте простой механизм: «Этот ответ был полезен? Да/Нет». Анализируйте «Нет» для улучшения.

Пример конфигурации фильтров

Вот пример многоуровневой системы фильтрации для бота поддержки.

Уровень 1: Input validation

# Быстрые rule-based проверки
- Blacklist: явные оскорбления, инъекционные паттерны
- Length limit: max 1000 символов
- Rate limit: max 10 сообщений/минуту от одного пользователя

Действие при срабатывании:
- Blacklist: вежливый отказ + лог
- Length: просьба сократить
- Rate: временная блокировка

Уровень 2: Content moderation (output)

# ML-классификатор (Perspective API или свой)
Категории: toxicity, insult, threat, sexually_explicit
Пороги: toxicity > 0.7, остальные > 0.8

Действие при срабатывании:
- Замена на стандартный ответ: "Извините, произошла ошибка. Давайте попробуем иначе."
- Лог инцидента для review

Уровень 3: Brand compliance (output)

# Rule-based + LLM проверки
Правила:
- Детекция названий конкурентов → редактирование
- Детекция "обещающих" формулировок → добавление disclaimer
- Проверка tone of voice (LLM) → переформулирование если нужно

LLM-промпт для проверки:
"Проверь ответ на соответствие tone of voice бренда: дружелюбный, но профессиональный.
Если ответ слишком формальный или слишком casual — укажи что исправить."

Уровень 4: Sensitive data check

# Проверка на утечку данных
- Regex для PII (телефоны, email, ИИН/БИН)
- Детекция внутренней терминологии (названия внутренних систем, имена сотрудников)

Действие: маскирование или блокировка

Особые случаи

Чувствительные отрасли

Медицина — обязательные disclaimers («это не медицинский совет»), запрет на диагнозы, перенаправление к врачу при любых симптомах.

Финансы — запрет на инвестиционные советы, disclaimers про риски, ограничение информации о ценах.

Юриспруденция — «это не юридическая консультация», перенаправление к юристу для конкретных случаев.

Международные аудитории

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

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

UGC и внешний контент

Если бот работает с пользовательским контентом (отзывы, комментарии) или внешними источниками (веб-страницы, документы) — indirect prompt injection risk. Нужна санитизация внешних данных перед включением в контекст.

Заключение

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

Что важно запомнить? Не полагайтесь на один фильтр — комбинируйте rule-based для очевидного, ML для понимания контекста, и при необходимости отдельную LLM для сложных проверок. Общих фильтров мало — настраивайте под специфику вашего бренда. И следите за балансом: слишком агрессивная защита сделает бота бесполезным, слишком мягкая — не защитит от инцидентов.

Фильтры — не «настроил и забыл». Следите за тем, что они ловят, анализируйте пропущенное, обновляйте правила.

Начните с базового — встроенная модерация провайдера плюс простой blacklist. Развивайте по мере понимания реальных рисков. И помните: цена инцидента обычно выше, чем инвестиции в предотвращение.