Скриншот неудачного ответа вашего бота может оказаться в соцсетях за секунды. Один грубый ответ, одна нелепая рекомендация, один политически некорректный комментарий — и вот уже новость: «AI-бот компании X оскорбил клиента» или «Бот компании Y советует покупать у конкурентов». Репутационный ущерб может быть несоразмерен тому, сколько вы сэкономили на автоматизации.
Контент-фильтры и модерация — это страховка от таких инцидентов. Не идеальная, но существенно снижающая риски. В этой статье разберём, как выстроить систему фильтрации для AI-ботов: что проверять, какими инструментами, как не убить при этом пользовательский опыт.
Что может пойти не так: типы нежелательного контента
Прежде чем строить фильтры, нужно понимать, от чего защищаемся.
Оскорбления и токсичность
Модель может сгенерировать грубый, унизительный или оскорбительный текст. Это может быть реакция на провокацию пользователя или случайная генерация.
Примеры: прямые оскорбления, снисходительный тон, пассивная агрессия, грубые формулировки.
Дискриминация и предвзятость
Модели обучены на данных, которые содержат предвзятости. Это может проявляться в ответах: стереотипы, дискриминационные высказывания, неравное отношение к разным группам.
Примеры: сексизм, расизм, эйджизм, дискриминация по признаку инвалидности.
Политика и религия
Бизнес-боту не место в политических или религиозных дискуссиях. Любая позиция отпугнёт часть аудитории.
Примеры: политические высказывания, критика или поддержка религий, комментарии о социальных движениях.
Нарушение brand guidelines
Бот говорит не так, как бренд. Использует неподходящий тон, упоминает конкурентов позитивно, критикует собственную компанию, даёт неверную информацию о продуктах.
Примеры: рекомендация купить у конкурента, негативные отзывы о своих продуктах, неформальный сленг для консервативного бренда.
Вредоносный контент
Инструкции по незаконным действиям, опасные советы, дезинформация. Особенно критично для ботов в сфере здоровья, финансов, безопасности.
Примеры: медицинские советы без disclaimers, инструкции по обходу законов, опасные DIY-рекомендации.
Раскрытие конфиденциальной информации
Бот случайно выдаёт внутреннюю информацию, данные других клиентов, коммерческие секреты.
Примеры: упоминание внутренних процессов, информация о других клиентах, детали ценообразования, которые не публичны.
Архитектура системы фильтрации
Как организовать проверку контента? Вот типичная архитектура.
Фильтрация на входе
Проверка пользовательского сообщения до отправки в модель.
Зачем: Блокировать провокации, снизить вероятность генерации плохого контента, защитить от prompt injection.
Что проверять: явные оскорбления от пользователя, попытки инъекций, запросы на запрещённые темы.
Действия: блокировка с вежливым отказом, перенаправление на оператора, логирование для анализа.
Фильтрация на выходе
Проверка ответа модели до отправки пользователю. Это основной рубеж защиты.
Зачем: Поймать всё, что пропустили на входе или что модель сгенерировала сама.
Что проверять: токсичность, нарушение brand guidelines, конфиденциальная информация, вредоносный контент.
Действия: замена на безопасный ответ, редактирование проблемных частей, эскалация на человека.
Пост-фактум анализ
Анализ диалогов после отправки. Не предотвращает инцидент, но позволяет найти и исправить проблемы.
Зачем: Находить то, что пропустили фильтры. Улучшать фильтры на основе реальных данных.
Методы: выборочный ручной review, автоматический анализ на паттерны, анализ обратной связи от пользователей.
Практический совет
Не полагайтесь только на встроенную модерацию модели (safety filters OpenAI, Google и др.). Они хороши для базовых случаев, но не знают ваших brand guidelines и не ловят специфичные для вас риски. Нужны дополнительные слои.
Инструменты и методы фильтрации
Какие технологии использовать для фильтрации?
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. Развивайте по мере понимания реальных рисков. И помните: цена инцидента обычно выше, чем инвестиции в предотвращение.