
Всем привет! Меня зовут Миша Мартьянов, я инженер по исследованиям и разработке в лаборатории AI R&D в red_mad_robot. В мои задачи входит проверка гипотез и развитие наших продуктов. Однако недостаточно просто улучшать продукты, необходимо также чтобы они работали устойчиво и безопасно.
Ранее я рассказывал разработку идеального контент-фильтра на базе Guardrails. Но время не стоит на месте: появляются новые модели и новые практики их применения. Этому и будет посвящён наш сегодняшний разговор.
Люди очень пытливые существа
Если вы когда-нибудь делали сервис с открытым вводом текста, то знаете: люди будут писать всё подряд. От вопросов про котиков до попыток выудить рецепты взрывчатки, найти грязные лайфхаки или обойти любые запреты. И вот тут появляется главный герой инфраструктуры — система модерации. Она должна работать точно, быстро и без ошибок. Но, как это обычно бывает, идеального решения не существует — приходится идти на компромиссы, изобретать странные гибриды и мириться с неизбежными ограничениями.
Самый лёгкий и очевидный путь
Лёгкие пути, как правило, обманчивы. Так, например, можно попытаться превратить LLM в модератора. Расписать огромный системный промпт вроде: «Ты модератор, оцени безопасность запроса и верни ответ с метками…». Затем регулярно править текст в надежде, что LLM наконец начнёт понимать границы. Итог предсказуем: задержка в обработке каждого запроса в районе 700–900 мс, видеокарта перегрета, как и бюджет на вычисления.
Тут надо серьезно задуматься: оправданы ли секундные задержки на модерацию? Именно эта мысль подтолкнула меня к моделям эмбеддингов, а точнее bge-m3 — изначально это не классификатор, а мощная модель для получения векторных представлений текста, способная эффективно кодировать смысл предложений в компактные векторы. Чтобы сделать фильтр, я собрал репрезентативный датасет из 40 тыс. примеров запросов с валидационными решениями, обучил свой классификатор и был страшно доволен результатом. Конечно же, с облегчением перешёл на неё, радуясь тому, что задержка упала до 20 мс при вполне приемлемой точности.
Плюсы:
Латентность около 20 мс на запрос;
Нагрузка на GPU в десятки раз ниже чем с LLM;
Простая в реализации фильтрация, чтобы не допускать грубые нарушения.
Но у каждого решения есть свои нюансы. BERT, каким бы внимательным он ни был к словам, вообще не понимал контекст. Ирония, метафоры, намеки, а тем более джейлбрейки — всё это не интересно. Модель уверенно цеплялась за ключевые слова-триггеры и делала выбор по принципу «похоже или непохоже».
Потом начался период проработки архитектуры гибридного режима. Я поставил BERT на вход, но если его перплексия была в зоне неуверенности, то запрос шёл дальше в LLM. Это напоминало конвейер, где на первом этапе робот отсеивает совсем бракованные детали, а все остальные отправляет на долгую проверку человеком. И хотя нагрузка уменьшалась, оставался вопрос: что делать дальше, чтобы не перебирать эти компромиссы до бесконечности?
В итоге BERT хорошо закрывает только часть грубых случаев, а когда пользователь хитрит, модель внезапно «слепнет». И в этот момент появляется Qwen3Guard.
Qwen3Guard — достойная модель для модерации
Команда Qwen сделала то, что казалось логичным, но не у всех получалось: они отказались от идеи превращать LLM в модератора и создали отдельный класс моделей, предназначенных именно для фильтрации.
Qwen3Guard — не урезанная LLM и не стопка слоёв поверх старого классификатора. Это полноценная архитектура для анализа безопасности. В основе лежит Qwen3, обученная на огромных массивах данных по модерации и десятках категорий угроз, а логика анализа опирается не на отдельные слова, а на контекст. Модель понимает цепочки токенов, считывает намерения, улавливает плавный переход от нейтрального к опасному и замечает любые попытки аккуратно прощупать систему.
Когда модель получает текст, она выдаёт три основных сигнала:
Уровень риска — безопасно, спорно или опасно;
Категория нарушения — персональные данные, неэтичные действия и прочие;
Признаки обхода системы или провокации на нарушение правил.
И самое важное. Qwen выпустили две модели — принципиально разные по поведению, хотя обе ориентированы на модерацию — Generative и Stream.
Генеративная версия: Qwen3Guard-Gen-8B и её когнитивные способности
Эта модель по сути ведёт себя как не очень разговорчивая, но крайне наблюдательная LLM. Вообще, это полноценная Qwen3-8B, дообученная так, чтобы воспринимать задачу модерации как инструкцию.
Модель считывает:
Политику безопасности;
Диалог — промпт и ответ модели;
Формат, в котором нужно вернуть результат.
На выходе модель формирует структурированный анализ, где перечисляет категории угроз, оценивает уровень риска, идентифицирует попытки джейлбрейка и определяет корректность ответа ассистента с точки зрения политики безопасности и качества коммуникации. У модели две ключевые сильные стороны: глубина понимания и удобство разметки и аналитики данных. Во-первых, модель хорошо анализирует контекст, учитывает историю сообщений и видит связи, которые ускользают от обычных классификаторов. Во-вторых, если вам нужно собрать датасет, сделать автоматизированный аудит логов или построить reward-модель, Generative-вариант подходит идеально.
Модель работает в двух режимах:
Strict — любой сомнительный запрос автоматически считается небезопасным;
Loose — сомнительные запросы считаются безопасными, но помечаются как спорные.
На эталонных наборах данных, например, ToxicChat или OpenAI Moderation, генеративная Qwen3 демонстрирует высшую точность — F1. По этому показателю она превосходит всех известных конкурентов в тестах на английском и китайском языках: LlamaGuard, ShieldGemma, NemoGuard и PolyGuard.
Не все так идеально
Однако у подхода есть обратная сторона. Модель генерирует текст, а этот процесс всегда занимает больше времени, чем простая классификация. По сути, система работает почти как обычная языковая модель, настроенная на модерацию с помощью текстовой инструкции. Если поток запросов онлайн слишком большой — задержки станут неприлично большими. Это будут те же самые в несколько секунд как и других LLM моделей того же размера.
Модель в режиме потока: Qwen3Guard-Stream-8B
Stream — это интересный эксперимент, неожиданно оказавшийся крайне удачным. Эта модель не пишет текст, а скорее работает как трансформер, который сразу же отдаёт логиты классификации на каждом шаге чтения токенов. Внешне это та же модель с 8 млрд параметров, но архитектурно это уже не «генератор текста», а инструмент для извлечения признаков с дополнительными модулями для классификации.
Это и есть модерация в реальном времени. Модель принимает токены как обычный трансформер, поэтому можно стримить их из основного ассистента и получать свежий прогноз риска в моменте. Если ассистент начинает переходить к опасной теме, Stream это сразу замечает — и ответ можно оборвать до отправки пользователю.
Работает всё довольно быстро — за 60 мс можно оценить текст размером в примерно 100 токенов. Потоковая модель почти не уступает генеративной версии в качестве, но выигрывает по скорости настолько, что становится очевидным выбором для сервисов, где важна реакция «прямо сейчас».
Оценка для каждого токена содержит уровень риска и категорию нарушения. Например, токен Bomb выдаст риск Unsafe и категорию Violent. Причём модель не реагирует на Bomb как на триггер-слово — она учитывает контекст, в котором употребляется слово, отсекая ложноположительные (false positive) срабатывания.
Модель Stream отлично подходит для динамических сценариев:
Поймать токсичность и опасность «на лету»;
Не допустить утечку вредного ответа;
Максимально быстро среагировать на опасность.
Что по скорости
Официальная документация аккуратно говорит про низкую задержку и потоковое обнаружение в реальном времени. Время работы растёт почти линейно с длиной ответа — в отличие от Gen-подхода, который приходится пересчитывать целиком при каждом новом фрагменте.
На практике для модели размером 8B в формате BF16 на современной GPU задержка на один запрос без контекста достигает ~60 мс.
Сравнение с другими подходами:
Специализированные модели, например, bge-m3 ~20 мс;
Полная LLM-модерация ~700 мс.
В результате получаем подход, который уже подходит для продакшена и по скорости занимает промежуточную позицию между узкоспециализированными моделями и полноценными LLM.
Эволюция подхода к модерации
Подводя итоги, стоит признать, что Qwen3Guard-Gen-8B — качественный и мощный инструмент для глубокого анализа и аудита. Однако модель не приносит революционных изменений в архитектуру модерации в реальном времени. Это просто LLM, целенаправленно дообученная на задачах классификации и оценки безопасности. Схожего результата можно добиться, тонко настроив другие большие модели под конкретные политики безопасности, что оставляет нас в парадигме «медленно, но умно».
Настоящее практическое преимущество — у потоковой версии. Её архитектура, изначально собранная под задачи классификации, обеспечивает стабильно низкую задержку. Главное достоинство Stream в том, что это готовое, предварительно обученное решение. Для модели не нужно разрабатывать сложные промпты — она уже настроена на базовые сценарии анализа безопасности.
По-моему, Qwen3Guard-Stream-8B отлично подходит для построения гибридного конвейера. Например, можно оставить быстрый BERT-фильтр на входе для отсева грубых нарушений и Stream для анализа пограничных случаев, а на выходе использовать одну потоковую версию. Такая схема позволяет сократить задержки, отслеживать в реальном времени действия ассистента и остановить ответ до передачи пользователю, если ассистент начнёт генерировать небезопасный контент.
Над материалом работали:
текст — Миша Мартьянов
редактура — Игорь Решетников
иллюстрации — Саша Буяк
Это блог red_mad_robot. Мы запускаем цифровые бизнесы и помогаем компаниям внедрять AI. Здесь наша команда разработки на собственных кейсах рассказывает о том, что происходит с AI сегодня, а стратегические аналитики подсказывают, что будет завтра. Мы бы подписались.
Наш Telegram-канал (там всё другое, а ещё есть анонсы мероприятий): t.me/redmadnews
Gizensha
Модераст - не человек. Еще бы контент-фильтром на ютубе хвастались, который гнобит всех подряд.