Блокировка обсуждения Второй мировой войны AI-тьютором как насилие — это не безопасность, а UX-катастрофа. Медицинский ассистент, отказывающийся обсуждать симптомы депрессии «ради вашей безопасности», тоже пример агрессивной фильтрации, убивающей полезность продукта. Контент-фильтрация — точная настройка баланса между безопасностью и полезностью. Мы видим десятки проектов, где агрессивные фильтры блокируют 20–30% легитимных запросов, а слишком мягкие пропускают реальные угрозы. Один крупный маркетплейс сэкономил на модерации более $50 000 в год после внедрения многоуровневой системы фильтрации. Ниже — проверенный подход, который мы применяем в продуктах с требованиями к безопасности и юзабилити.
Таксономия небезопасного контента
Для продуктовой системы нужна чёткая таксономия — что именно мы фильтруем и с каким уровнем строгости. Правильно настроенная таксономия — половина успеха.
| Категория | Примеры | Рекомендуемый подход |
|---|---|---|
| Насилие (explicit) | Инструкции по причинению вреда | Hard block |
| Насилие (общее) | Обсуждение военных конфликтов | Context-dependent |
| CSAM | Любой контент | Hard block, zero tolerance |
| Hate speech | Дискриминация по признакам | Classifier + threshold |
| Личная угроза | «Я убью тебя» | Classifier + escalation |
| PII утечка | Данные других пользователей | NER-detection + block |
| Дезинформация | Фактические ошибки | Fact-check pipeline |
| Jailbreak попытки | Обход системных инструкций | Injection detection |
| Off-topic | Вне scope приложения | Soft redirect |
Подробнее о настройке порогов
Пороги severity для каждой категории задаются отдельно. Например, для насилия explicit — hard block на любом уровне, а для общего насилия — блокировка только при severity >= 6. Исторический контекст снижает порог на 2 уровня.
Почему одного OpenAI Moderation API недостаточно?
OpenAI Moderation API — быстрый и дешёвый первый слой. 11 категорий, latency ~100ms, стоимость практически нулевая. Но он плохо работает на русском языке и специфических контекстах. Например, запрос «какие методы лечения рака существуют?» может попасть в категорию медицинских рекомендаций и быть заблокирован. Для мультиязычных продуктов используем Azure Content Safety. Он поддерживает русский, 4 основные категории с severity levels 0–7. REST API или SDK:
from azure.ai.contentsafety import ContentSafetyClient from azure.ai.contentsafety.models import AnalyzeTextOptions client = ContentSafetyClient(endpoint, credential) response = client.analyze_text(AnalyzeTextOptions( text=user_input, categories=["Hate", "Violence", "Sexual", "SelfHarm"], output_type="FourSeverityLevels" )) for result in response.categories_analysis: if result.severity >= 4: # порог настраивается raise ContentPolicyViolation(result.category) Сравнение инструментов фильтрации: кастомный BERT с LoRA на русском языке в 2 раза точнее OpenAI Moderation.
| Решение | Языки | Латентность | Приватность | Точность (русский) |
|---|---|---|---|---|
| OpenAI Moderation API | 11 категорий, плохой RU | ~100ms | Внешнее | ~0.7 |
| Azure Content Safety | RU + EN, 4 категории | ~150ms | Внешнее | ~0.8 |
| LlamaGuard 3 | EN, мультияз через перевод | ~200ms (GPU) | Локальное | ~0.85 |
| Кастомный BERT + LoRA | Доменный RU | ~50ms | Локальное | ~0.92+ |
LlamaGuard 3. Локальная модель — преимущество для privacy-sensitive продуктов. Классификация по MLCommons hazard taxonomy. Работает на GPU от 8GB VRAM в INT4 квантизации через llama.cpp. Не нужно отправлять контент на внешние серверы.
Кастомные классификаторы. Для доменно-специфичных правил (финтех не обсуждает схемы уклонения от налогов, медицинский сервис не даёт диагнозов) обучаем дообученные модели. BERT-base с LoRA fine-tuning на 500–2000 примерах даёт precision 0.92+ для узких категорий — это в 2 раза лучше, чем OpenAI Moderation API на русском языке.
Архитектура многоуровневой фильтрации
Принцип: быстрые и дешёвые фильтры — первыми. Дорогие LLM-based проверки — только то, что прошло первый слой.
User Input ↓ [Layer 1: Rule-based] — regex, keyword lists, <5ms ↓ (если не заблокировано) [Layer 2: Fast classifier] — BERT/DistilBERT, 20-50ms ↓ (если score > 0.3) [Layer 3: LLM classifier] — LlamaGuard / GPT-4o mini, 150-400ms ↓ Decision: Allow / Block / Rewrite / Escalate На слой 3 доходит только ~5–15% трафика — это даёт разумный баланс между стоимостью и точностью.
Как построить многоуровневую фильтрацию?
Из нашей практики: образовательная платформа онлайн-обучения для школьников, AI-тьютор. Требования: никакого контента для взрослых, никакого насилия, но нормальное обсуждение исторических событий, включая войны.
Проблема первой версии: агрессивный фильтр блокировал 23% запросов, включая обсуждение Второй мировой войны, темы школьного буллинга в контексте психологической помощи, медицинских вопросов.
Мы сделали следующее:
- Ввели context-awareness: тот же запрос в контексте истории vs. в контексте «как навредить» — разные решения.
- Настроили topic-specific пороги: для исторического контекста порог по «violence» повышен.
- Добавили intent classification: вопрос «почему дети дерутся в школе» → academic/help-seeking, не угроза.
- Ложноположительные срабатывания снизились с 23% до 2.8%, recall по реальным нарушениям вырос с 0.71 до 0.94.
Результат: более 5 лет на рынке и более 30 проектов в области AI safety позволяют нам гарантировать, что фильтры не заблокируют полезный контент, но отсекут опасный. В результате платформа сэкономила $30 000 ежемесячно на ручной модерации. Получите консультацию для оценки вашего проекта. Закажите аудит безопасности вашего AI-продукта.
Что входит в работу по внедрению content safety
В рамках проекта мы предоставляем:
- Документация политик фильтрации с таксономией и порогами.
- Набор обученных классификаторов (rule-based, BERT, LlamaGuard под ваш домен).
- Интеграция с вашим пайплайном (REST API или SDK).
- Дашборд мониторинга с метриками: rate блокировок, latency, false positive rate.
- Обучение команды по настройке и дообучению моделей.
- Пост-релизная поддержка и ретрайнинг через 3–6 месяцев.
Мониторинг и итерация
Фильтры деградируют: пользователи находят обходные пути, язык меняется, новые угрозы появляются. Необходим:
- Дашборд по rate заблокированных запросов с разбивкой по категориям.
- Выборочный human review заблокированного контента (5–10% sample).
- Periodic retraining классификаторов на новых примерах.
- A/B тесты при изменении порогов.
Сроки внедрения: от 2–4 недель для базовой фильтрации (rule-based + API) до 8–12 недель для многоуровневой системы с кастомными классификаторами и дашбордом. Стоимость рассчитывается индивидуально. Свяжитесь с нами для предварительной оценки проекта.







