Реалізація AI-модерації користувацького контенту на сайті

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.
Розробка та обслуговування будь-яких видів сайтів:
Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Реалізація AI-модерації користувацького контенту на сайті
Складна
~1-2 тижні
Часті питання
Наші компетенції:
Етапи розробки
Останні роботи
  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Реалізація AI-модерації користувацького контенту на сайті

Користувацький контент — коментарі, відгуки, зображення, повідомлення в чаті — потребує модерації. Ручна перевірка не масштабується: при 10 000 публікацій на день команда з п'яти модераторів фізично не впорається. AI-модерація вирішує завдання автоматично, залишаючи людині тільки спірні випадки.

Що саме піддається автоматичній модерації

Текстовий контент: спам, нецензурна лексика, розпалювання ненависті, загрози, персональні дані у відкритому вигляді. Зображення: відверте матеріали, насильство, порушення авторських прав (через перцептивне хешування). Посилання: фішинг, шкідливі домени. Тональність: токсичні коментарі без явних заборонених слів.

Кожна категорія потребує окремої моделі або окремого API-ендпоінту — універсального рішення немає.

Архітектура системи модерації

Синхронна перевірка перед публікацією — користувач відправляє контент, сервер перевіряє його перед збереженням. Затримка 200–800 мс. Підходить для критичних сценаріїв: оплачені відгуки, юридично значимі публікації.

Асинхронна черга — контент зберігається зі статусом pending, фоновий воркер перевіряє через чергу (RabbitMQ, SQS, Redis Streams). Публікація відбувається після схвалення або через N хвилин, якщо порушень немає. Підходить для високонавантажених форумів і чатів.

Гібридна схема — швидка синхронна перевірка за простими правилами (стоп-слова, довжина, паттерни) + асинхронна ML-перевірка для того, що пройшов початковий фільтр.

POST /api/comment
  → sync: banned words check (< 5ms)
  → sync: OpenAI Moderation API (< 300ms)
  → save with status=published/flagged
  → async: image scan if attachments

Інструменти та API

OpenAI Moderation API — безплатний ендпоінт /v1/moderations. Повертає категорії: hate, hate/threatening, self-harm, sexual, violence, harassment. Тільки текст. Не потребує промпту — окрема спеціалізована модель.

import openai

def moderate_text(content: str) -> dict:
    response = openai.moderations.create(input=content)
    result = response.results[0]

    if result.flagged:
        categories = {k: v for k, v in result.categories.__dict__.items() if v}
        return {"allowed": False, "categories": categories}

    return {"allowed": True}

Google Perspective API — аналіз токсичності з оцінкою від 0 до 1. Атрибути: TOXICITY, SEVERE_TOXICITY, IDENTITY_ATTACK, INSULT, PROFANITY, THREAT. Підтримує багатомовний контент. Безплатна квота: 1 QPS, платний тариф від $0.25 за 1000 запитів.

AWS Rekognition — модерація зображень. API DetectModerationLabels повертає ієрархію міток з confidence score. Категорії: Explicit Nudity, Violence, Visually Disturbing, Hate Symbols.

Azure Content Safety — текст та зображення в одному API. Категорії: hate, sexual, violence, self-harm. Кожна оцінюється за шкалою 0–6. Включає Groundedness Detection для перевірки фактичності відповідей.

Власна модель на основі fine-tuning

Для специфічного контенту (професійний форум з технічною лексикою, медична платформа) сторонні API дають багато хибних тривог. Вихід — fine-tune на своїх даних.

Процес: зібрати датасет із 2000–5000 розміченого прикладів (одобрені/відхилені), дообучити distilbert-base-multilingual-cased через Hugging Face Transformers, розгорнути як окремий сервіс.

from transformers import pipeline

classifier = pipeline(
    "text-classification",
    model="./moderation-model",
    device=0  # GPU
)

def classify_content(text: str) -> tuple[str, float]:
    result = classifier(text, truncation=True, max_length=512)[0]
    return result["label"], result["score"]

Inference на CPU — ~50 мс на текст до 512 токенів. На GPU (T4) — ~5 мс.

Обробка зображень

Перед відправленням у API потрібна попередня обробка: зміна розміру до 2048px по довгій стороні, конвертація у JPEG з якістю 85%, видалення EXIF-метаданих. Це знижує вартість та прискорює відповідь.

Для захисту від завантаження заздалегідь відомого забороненого контенту — PhotoDNA (Microsoft) або pHash-порівняння з базою хешів. PhotoDNA інтегрується через Azure, pHash реалізується самостійно:

import imagehash
from PIL import Image

def compute_phash(image_path: str) -> str:
    img = Image.open(image_path)
    return str(imagehash.phash(img))

def is_known_violation(phash: str, banned_hashes: set, threshold: int = 10) -> bool:
    for banned in banned_hashes:
        if imagehash.hex_to_hash(phash) - imagehash.hex_to_hash(banned) < threshold:
            return True
    return False

Dashboard для ручної модерації

Автоматика не приймає рішення за спірні випадки — їх потрібно показати модератору. Черга ручної модерації містить:

  • контент з confidence 0.4–0.7 (невпевнений результат)
  • контент, на який пожалілися користувачі
  • контент від нових акаунтів без історії

Інтерфейс: список з фільтрами, гарячі клавіші для швидких рішень (approve/reject/escalate), історія рішень з прив'язкою до оператора, метрики точності по кожному оператору.

Зворотний зв'язок та переобучення

Модель деградує, якщо контент-паттерни змінюються. Цикл поліпшення:

  1. Зберігати всі рішення (автоматичні та ручні) з мітками
  2. Щотижня аналізувати розбіжності: де автоматика помилася, модератор виправив
  3. Раз на місяць дообучати модель на накопленних виправленнях
  4. A/B тестувати нову версію на 10% трафіку перед повним переключенням

Моніторинг

Метрики для Grafana/Datadog:

  • moderation.requests.total — загальний обсяг
  • moderation.latency.p99 — затримка 99-го перцентиля
  • moderation.flagged.rate — доля заблокованого контенту
  • moderation.false_positive.rate — доля помилкових блокувань (за апеляціями)
  • moderation.queue.depth — глибина черги ручної модерації

Алерт: якщо false_positive.rate > 5% за 24 години — модель потребує перевірки.

Терміни реалізації

Етап Термін
Інтеграція OpenAI Moderation API + базові правила 3–5 днів
Асинхронна черга + статуси контенту 3–4 дні
Dashboard ручної модерації 5–7 днів
Модерація зображень (AWS Rekognition) 2–3 дні
Fine-tuning власної моделі 10–15 днів
Цикл переобучення + моніторинг 3–5 днів

Базова інтеграція з OpenAI Moderation API та чергою ручної перевірки — 2 тижні. Повна система з власною моделлю, моніторингом та dashboard — 5–6 тижнів.