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

Наша компания занимается разработкой, поддержкой и обслуживанием сайтов любой сложности. От простых одностраничных сайтов до масштабных кластерных систем построенных на микро сервисах. Опыт разработчиков подтвержден сертификатами от вендоров.

Разработка и обслуживание любых видов сайтов:

Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Услуги, которые мы предлагаем
Показано 1 из 1Все 2062 услуг
Реализация AI-модерации пользовательского контента на сайте
Сложный
~1-2 недели
Часто задаваемые вопросы

Наши компетенции:

Этапы разработки

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1358
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1250
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    956
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1188
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    929
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    947

Представьте: на форуме ежедневно публикуют 50 000 комментариев. Ручная модерация требует 12 человек, каждый пропускает до 3% нарушений. Мы сталкивались с такой задачей при модернизации крупного маркетплейса — и решили её за счёт каскада ML-моделей. В этой статье разберём, как построить систему AI-модерации, которая фильтрует спам, токсичность и нежелательные изображения с точностью >99% при <50 мс задержки.

Пользовательский контент — комментарии, отзывы, изображения, сообщения в чате — требует постоянного контроля. Автоматика незаменима, когда объём превышает тысячи публикаций в час. Чисто ручная проверка здесь не масштабируется: при 10 000 публикаций в сутки команда из пяти модераторов физически не справится. AI-модерация решает задачу быстро и дёшево, оставляя человеку только спорные случаи. Гарантируем сокращение ручного труда на 80% за счёт автоматизации.

Что именно поддаётся автоматической модерации

Текстовый контент: спам, нецензурная лексика, разжигание ненависти, угрозы, персональные данные в открытом виде. Изображения: откровенные материалы, насилие, нарушение авторских прав (через перцептивное хэширование). Ссылки: фишинг, вредоносные домены. Тональность: токсичные комментарии без явных запрещённых слов.

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

Как работает AI-модерация?

Архитектура строится на одном из трёх паттернов.

Синхронная проверка перед публикацией — пользователь отправляет контент, сервер проверяет его до сохранения. Задержка 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 выбрать?

Сравнение популярных инструментов для модерации текста и изображений.

API Тип контента Бесплатный лимит Примерная цена Задержка
OpenAI Moderation API Текст Да Бесплатно 200-400 мс
Google Perspective API Текст 1 QPS $0.25/1000 запросов 300-600 мс
AWS Rekognition Изображения 5000 бесплатных в месяц $0.001/изображение 200-500 мс
Azure Content Safety Текст+изображения 1 млн символов бесплатно $0.15/1000 запросов 300-500 мс

OpenAI Moderation API обрабатывает запрос в среднем за 200 мс, что в 3 раза быстрее Perspective API при той же точности. Для русскоязычного контента Perspective даёт оценку токсичности, но может ошибаться на сарказме.

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-tuning на своих данных.

Процесс: собрать датасет из 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 часа — модель нужно проверить.

Что входит в работу

  • Интеграция одного или нескольких API (OpenAI, Perspective, Rekognition, Azure).
  • Разработка синхронного middleware или асинхронной очереди на вашем стеке.
  • Dashboard для ручной модерации с историей и метриками.
  • Документация по API и архитектуре.
  • Обучение команды (2 часа онлайн).
  • Поддержка 1 месяц после запуска.

Сроки реализации

Этап Срок
Интеграция 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 недель. Свяжитесь с нами для пилотного проекта — оценим вашу нагрузку и предложим решение. Закажите консультацию по интеграции.

Интеграция AI: чат-боты, RAG, семантический поиск, рекомендации

В 8 из 10 проектов «AI-чат-бот» оказывается дорогой обёрткой над GPT-4o с системным промптом. Без доступа к реальным данным компании. Пользователь спрашивает «сколько стоит тариф Премиум» — бот галлюцинирует цену из воздуха. Спрашивает «когда придёт заказ» — получает вежливое «напишите в поддержку». Это не интеграция — это имитация. Мы за 5 лет внедрили RAG-решения в 30+ проектах: от интернет-магазинов до медицинских порталов. Гарантируем: полезная AI-помощь начинается там, где модель читает ваши документы, а не общие ответы.

Как мы строим RAG-системы?

Retrieval-Augmented Generation — стандартная архитектура: запрос → поиск релевантных фрагментов в векторной БД → вставка найденного в контекст → ответ модели. Но дьявол в деталях реализации. Разберём ключевые узлы, которые определяют качество.

Chunking. Резать документ на куски по 500 токенов без оглядки на структуру — гарантия потери смысла. Если разрез пришёлся на середину абзаца, контекст разрывается. Решение — рекурсивный RecursiveCharacterTextSplitter с overlap 10–15% для документации. Для контрактов и инструкций используем семантический сплиттер: выделяем заголовки, списки, блоки кода — каждый раздел становится независимым чанком. Разница в качестве поиска: на одном медицинском проекте precision вырос с 0.55 до 0.84 только за счёт правильной нарезки.

Модель эмбеддингов. Для русскоязычных текстов intfloat/multilingual-e5-large даёт заметный прирост точности против устаревшей text-embedding-ada-002. По нашим замерам, NDCG@10 на тестовой выборке из 10 000 пар «запрос-документ» на 12% выше. OpenAI text-embedding-3-large — хороший вариант для англоязычного контента, но для русского рекомендуем BAAI/bge-m3 или упомянутую e5-large.

Векторная БД. Если у вас уже стоит PostgreSQL — pgvector экономит ресурсы. Ставим расширение CREATE EXTENSION vector, добавляем колонку vector(1024), создаём HNSW-индекс. На проекте с 80 000 статей поддержки p95 поиска — 12 мс. Этого хватает. Для каталогов с миллионами единиц — Qdrant или Weaviate: нативный гибридный поиск и шардирование «из коробки».

Что даёт гибридный поиск?

Только векторный поиск слеп к точным совпадениям: артикулы «ABC-123», имена собственные, аббревиатуры теряются. Только полнотекстовый поиск не улавливает синонимы и перефразирования. Комбинация через RRF (Reciprocal Rank Fusion) даёт лучшее из двух миров: BM25 + векторный поиск, результаты смешиваются. На практике recall@20 растёт с 0.65 до 0.92 — разница заметна пользователю.

Reranking — финальный фильтр: top-20 кандидатов из гибридного поиска прогоняем через cross-encoder cross-encoder/ms-marco-MiniLM-L-6-v2. Он добавляет 50–100 мс к ответу, но relevance поднимает ещё на 5–10%. Без reranking чат-бот может показывать нерелевантные документы.

Семантический поиск на сайте

Поиск «удобные кожаные кресла» должен находить товары с описанием «мягкие стулья из натуральной кожи» — обычный LIKE-поиск не способен. Наша архитектура: при добавлении товара/поста автоматически генерируем эмбеддинг через multilingual-e5-large, сохраняем в pgvector. На запросе — эмбеддим его той же моделью, ищем ближайших соседей через cosine distance с HNSW-индексом. Для каталога из 100 000 позиций индекс строится 3 минуты, в памяти ~400 Мбайт (1536-мерные векторы). Cреднее время поиска — 20 мс.

Рекомендательные системы

Коллаборативная фильтрация («пользователи, похожие на вас, покупали X») требует истории — минимум 2–3 месяца данных с 1000+ активных пользователей. Для стартапов или малых проектов используем content-based: эмбеддинг текущего товара → поиск ближайших соседей по косинусной близости. Когда накапливается статистика (обычно 15–20 взаимодействий на пользователя), переключаемся на гибридную модель LightFM. Она объединяет и поведение, и признаки товаров. У нас в e-commerce проекте с 50 000 SKU гибридная модель повысила конверсию в рекомендательный блок на 18% (A/B-тест длился 2 недели).

Стриминг ответов

Пользователь не обязан ждать, пока модель сгенерирует весь текст — это убивает UX. Server-Sent Events (SSE) — протокол для стриминга токенов. OpenAI SDK поддерживает stream: true, возвращая AsyncIterator. На фронтенде — Vercel AI SDK (useChat) или самописный EventSource. Типичная ошибка: использовать WebSocket для однонаправленного стрима — SSE проще (меньше кода, встроенный реконнект). Стек: Node.js + SSE + React.

Оркестрация агентов

Простой чат-бот отвечает. Агент — выполняет действия: создаёт тикет в Jira, проверяет статус заказа в CRM, бронирует слот в календаре. Для оркестрации используем LangGraph: граф состояний, где каждый узел — вызов модели или инструмента. Vercel AI SDK useChat + tools для Next.js позволяет добавить интеграцию в 10 строк кода. Главная сложность — надёжность: модель иногда вызывает не тот инструмент или передаёт кривые параметры. Защита — Zod-схемы на каждый инструмент и structured outputs для гарантии JSON.

Что входит в работу

Этап Результат Срок
Аудит данных и бизнес-логики Карта источников, формат документов, оценка качества 1–2 дня
Прототип RAG или рекомендательной системы Демонстрация с метриками (recall, precision, latency) 1–2 недели
Интеграция в существующее веб-приложение API-эндпоинты, интерфейс для чат-бота/поиска 1–2 недели
A/B-тестирование и оптимизация Отчёт по метрикам (CTR, конверсия, hallucination rate) 1 неделя
Документация и обучение команды Руководство по эксплуатации, код-ревью 2–3 дня

Дополнительно: мы передаём исходный код векторизатора, дашборды мониторинга (Langfuse), доступ к админке для обновления базы знаний. Постпродакшн-поддержка — 1 месяц бесплатно.

Сроки

Задача Ориентировочный срок
RAG-чат-бот на базе существующей базы знаний 3–6 недель
Семантический поиск по каталогу 2–4 недели
Рекомендательная система с A/B-тестированием 6–10 недель
Мультиагентная система с интеграциями от 8 недель

Стоимость рассчитывается индивидуально после знакомства с проектом. Оценим ваш проект за 1 день. Свяжитесь с нами — расскажем, как превратить AI из игрушки в инструмент, который приносит прибыль.