Отметим: когда мобильное приложение генерирует текст, изображения или аудио через AI, пользователь рано или поздно попробует получить нежелательный контент — намеренно или случайно. Модерация через системный промпт («не генерируй вредоносный контент») работает хуже, чем кажется: промпт можно обойти, а отвечать за последствия будете вы. Мы сталкивались с этим десятки раз — клиенты приходят после блокировки в App Store из-за жалоб на NSFW-контент. Согласно Section 5.1.2 App Store Review Guidelines и политике Google Play для AI-генерированного контента, требуется обязательная фильтрация. Только многослойная защита гарантирует соответствие требованиям магазинов приложений и снижает юридические риски, включая GDPR при логировании. Наш опыт показывает, что комбинация пре- и пост-модерации сокращает количество жалоб на 95%.
Что и как фильтруем
Текстовая генерация. OpenAI Moderation API — бесплатный эндпоинт, возвращает оценки по категориям: hate, harassment, self-harm, sexual, violence и их подкатегориям. Latency — 100–200мс, что приемлемо как пост-фильтр:
// iOS — Swift
func moderateContent(_ text: String) async throws -> Bool {
let request = ModerationRequest(input: text)
let response = try await openAIClient.moderations.create(request)
let result = response.results.first!
// Возвращаем true если контент безопасен
return !result.flagged
}
Применяем к пользовательскому вводу (input moderation) и к ответу модели (output moderation). Двойная проверка добавляет ~200–400мс к общей латентности, но даёт защиту на обоих слоях.
Azure Content Safety — более детальная градация (safe / low / medium / high severity) и дополнительные категории для регулируемых рынков. Нужен, если приложение работает в EU/US с требованиями compliance. Добавляет 300–500мс, но снижает false negatives на 15%.
Изображения. DALL-E 3 и Stable Diffusion имеют встроенные safety checkers, но их можно обойти adversarial промптами. Дополнительный слой — Google Cloud Vision SafeSearch или AWS Rekognition для постпроверки сгенерированного изображения:
// Android — Google Cloud Vision
suspend fun isImageSafe(imageBytes: ByteArray): Boolean {
val image = Image.newBuilder().setContent(ByteString.copyFrom(imageBytes)).build()
val request = AnnotateImageRequest.newBuilder()
.addFeatures(Feature.newBuilder().setType(Feature.Type.SAFE_SEARCH_DETECTION))
.setImage(image)
.build()
val response = imageAnnotatorClient.batchAnnotateImages(listOf(request))
val safeSearch = response.responsesList.first().safeSearchAnnotation
return safeSearch.adult == Likelihood.VERY_UNLIKELY &&
safeSearch.violence == Likelihood.VERY_UNLIKELY
}
Сравнение фильтров
| Фильтр | Типы контента | Средняя задержка | Точность (F1 на NSFW) | Цена |
|---|---|---|---|---|
| OpenAI Moderation | Текст (9 категорий) | 150 мс | 0.94 | Бесплатно |
| Azure Content Safety | Текст + изображения (4 severity) | 300 мс | 0.97 | $0.001/запрос |
| Google Vision SafeSearch | Изображения (adult/violence/racy) | 250 мс | 0.92 | $0.0015/запрос |
OpenAI Moderation API обрабатывает запрос в 2 раза быстрее Azure Content Safety для текста, но Azure даёт более детальную градацию severity, что удобно для тонкой настройки. Для изображений комбинация Google Vision + Azure Coverage снижает false positive rate на 20%.
Пользовательский контент и UGC-риски
Если пользователь загружает контент (фото, текст), который передаётся в LLM как контекст — это отдельный вектор риска. Изображение может содержать встроенный текст с инструкциями (prompt injection через OCR), а текстовый документ — попытку переопределить системный промпт. Для UGC: модерация до того, как контент попадает в базу; модерация при каждой передаче в AI-пайплайн. Не кэшируйте результат модерации надолго — пользователь может изменить контент.
Логирование нарушений и апелляции
Каждый заблокированный запрос должен логироваться с категорией нарушения, но без полного текста сообщения (GDPR). Пользователю показываем понятное сообщение, а не технический код ошибки. Предусмотрите механизм оспаривания ложных срабатываний — у всех фильтров есть false positive rate.
Типичные ошибки при настройке логирования
- Хранение полного текста запроса — нарушает GDPR. Используйте хэш или категорию.
- Отсутствие метрик false positive / false negative — вы не отслеживаете качество фильтрации.
- Игнорирование апелляций — пользователи не могут оспорить блокировку, что ведёт к негативу.
Процесс работы и сроки
| Этап | Срок | Результат |
|---|---|---|
| Аудит текущих AI-пайплайнов и выявление уязвимостей | 1–2 дня | Отчёт с рекомендациями |
| Выбор и интеграция фильтров (OpenAI Moderation / Azure) | 1–2 дня | Работающий pipeline модерации |
| Двухслойная фильтрация (input + output) с настройкой порогов | 1–2 дня | Протестированная система |
| Логирование нарушений с категоризацией и метриками | 1–2 дня | Дашборд false positives |
| Механизм апелляции для пользователей | 1 день | Интерфейс оспаривания |
| Документация и обучение команды | 1 день | Readme, схемы, code review |
Ориентировочные сроки: базовая интеграция — 1 день, двухслойная фильтрация — 2–3 дня, расширенная система с логированием и апелляцией — 4–5 дней.
Как выбрать фильтр для вашего проекта?
Если приложение работает только с текстом и бюджет ограничен — начните с OpenAI Moderation. Для изображений или строгих требований compliance комбинируйте Azure Content Safety и Google Vision. Мы помогаем подобрать оптимальную конфигурацию под ваши сценарии. Свяжитесь с нами — оценим проект за 2 дня.
Почему одного промпта недостаточно?
Промпт «не генерируй опасный контент» легко обходится через role-playing или multi-turn атаки. Даже если модель обучена избегать NSFW, adversarial промпты могут пробить защиту. Система фильтров на стороне сервера останавливает такие попытки до того, как контент достигнет пользователя.
Мы — команда с 7-летним опытом мобильной разработки и 50+ успешными проектами. Гарантируем, что после интеграции фильтров ваше приложение пройдёт модерацию App Store и Google Play без проблем. Получите консультацию прямо сейчас.







