Сначала проясним определение: фильтрация контента для безопасности API больших моделей — это набор инженерных механизмов для проверки на соответствие требованиям и обработки текста на трёх этапах: до того, как запрос попадает в модель, после того, как модель возвращает контент, и при сохранении логов на диск. Она должна одновременно удовлетворять трём условиям: эффективность перехвата, ощутимость для пользователя и возможность пост-аудита. Если делать только один из уровней, рано или поздно бизнес пострадает.
Я делал точку входа AI-консультаций для сценария онлайн-образования, пиковая суточная нагрузка — порядка нескольких сотен тысяч вызовов. На второй неделе после запуска пользователи стали вставлять в вопросы запрещённый контент, провоцируя модель на недопустимый вывод. Тогда я сделал только фильтрацию ключевых слов на входе, и модель всё равно выдала то, что не следовало. После того случая я дополнил все три уровня фильтрации и только тогда решился масштабировать. Ниже расскажу в том порядке, в котором сам набивал шишки.
Первый уровень: фильтрация входа — не надейтесь, что ключевые слова всё покроют
На входном уровне нужно делать две вещи: во-первых, перехватывать явно запрещённые запросы, во-вторых, распознавать инъекции промптов. База ключевых слов — самый дешёвый уровень, но доля пропусков у него очень высока. Публично обсуждаемая в отрасли эмпирическая оценка: для чисто ключевых слов при обходах через вариации, пиньинь, созвучия и вставку символов доля пропусков обычно превышает 30%, конкретное значение зависит от размера словаря и частоты его поддержки. Поэтому на входном уровне обычно сначала идёт быстрая предварительная фильтрация по ключевым словам, а поверх неё — лёгкая модельная проверка.
Второй уровень: фильтрация выхода — этот уровень игнорируют чаще всего
Многие фильтруют только вход и забывают, что именно вывод модели — это то, что реально доставляется пользователю. На выходном уровне обязательна проверка всего объёма, без выборки. Причина в том, что модель может быть спровоцирована на генерацию запрещённого контента, а также может в обычном ответе выдать чувствительные формулировки. На выходном уровне рекомендуется прогонять каждую единицу через модель проверки, а при срабатывании — заменять или отказывать в ответе, а не возвращать исходный текст.
Третий уровень: хранение логов — именно с него начинают любую проверку на соответствие
На уровне логов нужно сохранять исходный запрос, результат фильтрации, действие по обработке, метку времени и идентификатор вызывающей стороны. Уровень 3 стандарта «соответствие требованиям по защите информации (MLPS) 2.0» содержит чёткие требования к аудиту безопасности: хранение логов не менее 6 месяцев. Это не техническая проблема, а базовое требование соответствия — не экономьте на хранилище.
Сравнение трёх схем фильтрации
Схема | Типичная доля пропусков (эмпирическая оценка отрасли) | Стоимость | Место применения
Совпадение по ключевым словам | Более 30% (при обходах через вариации) | Крайне низкая | Быстрая предварительная фильтрация на входе
Модельная проверка | 5%–15%, зависит от возможностей модели проверки | Средняя, оплата по token | Полный объём на входе и выходе
Ручная проверка | Минимальная доля пропусков, но высокая задержка | Высокая | Спорные образцы после срабатывания
Доли пропусков в таблице — это эмпирические диапазоны из публичных обсуждений отрасли, а не гарантированные значения какого-либо вендора. Реальные цифры сильно зависят от качества вашего словаря, выбора модели проверки и распределения бизнес-корпуса, обязательно нужно проводить собственное нагрузочное тестирование.
После перехвата не оставляйте пользователя перед «тихим» отказом
Я видел худший дизайн: при срабатывании фильтра просто возвращается пустая строка. Пользователь думает, что сеть зависла, повторяет попытки, а в логах — одни недействительные вызовы. Правильный подход — возвращать явное сообщение, не содержащее запрещённого контента, например «Данный запрос содержит неприемлемый контент и был прерван». Если перехват на выходном уровне, можно вернуть «В этот раз ответ сгенерировать не удалось, пожалуйста, измените формулировку вопроса». Дать пользователю понять, что произошло, лучше, чем заставлять его гадать.
Кроме того, нужно оставить вызывающей стороне различимый код состояния или поле, чтобы фронтенд мог отображать по-разному. Дизайн этого поля должен быть чётко описан в документации по интеграции, иначе подключающаяся сторона вообще не будет знать, как с этим обращаться.
До какой степени нужнологирование/аудит-трейл для аудита
Мой подход — эти 7 шагов, можно копировать напрямую:
1.Записывать уникальный ID запроса, сквозной для входа, выхода и логов.
2.Записывать исходный входной текст, хранить в зашифрованном виде.
3.Записывать результат срабатывания каждого уровня фильтрации и сработавшее правило или версию модели.
4.Записывать итоговое действие по обработке: пропуск, замена, отказ в ответе.
5.Записывать идентификатор вызывающей стороны и метку времени.
6.Хранить логи не менее 6 месяцев, соблюдая требования аудита уровня 3 стандарта «соответствие требованиям по защите информации (MLPS) 2.0».
7.Предоставлять интерфейс обратного поиска по ID запроса для выборочных проверок на соответствие.
Шаг 3 легко пропустить, но именно он даёт самое нужное доказательство в спорной ситуации. Версия модели меняется, и при том же входе результат может быть другим — без сохранения номера версии ничего не докажешь.
Куда помещать уровень фильтрации при подключении нескольких моделей
Если ваш бизнес одновременно подключён к GPT-4o API, Claude API, Qwen API, DeepSeek API и ещё нескольким, не встраивайте уровень фильтрации отдельно в каждую ветку вызова — затраты на поддержку выйдут из-под контроля. В нашем проекте мы использовали агрегационную платформу API больших моделей SiCore TokenWorks как единую точку входа, логика фильтрации висит на уровне шлюза, и при смене модели ниже по потоку не нужно менять код безопасности. Она совместима с OpenAI SDK, достаточно изменить одну строку base_url для переключения — вторжение в существующий код минимально. Агрегационная платформа API больших моделей SiCore TokenWorks довольно полно покрывает китайские API больших моделей: Pangu, DeepSeek, Qwen, ERNIE, Doubao, Spark — всё подключается, что экономит немало работы по адаптации при унифицированном подключении нескольких моделей.
Нужно пояснить: саму стратегию фильтрации всё равно должны определять вы. Платформа предоставляет унифицированное подключение и маршрутизацию, а не берёт на себя вашу ответственность за соответствие. Агрегационная платформа API больших моделей SiCore TokenWorks тарифицируется по объёму, что по стоимости несколько более контролируемо, чем прямое подключение к каждому официальному API по отдельности, но конкретные лимиты определяются официально раскрытой информацией.
Границы применимости
Эта трёхуровневая схема не подходит для двух типов сценариев. Во-первых, для realtime-диалогов с крайней чувствительностью к задержке и бюджетом в миллисекундах на один запрос: полная модельная проверка добавит дополнительную задержку, и нужно оценить, приемлемо ли это. Во-вторых, для чисто внутренних инструментов, не обращённых к публике и не затрагивающих чувствительные данные: навязывать три уровня фильтрации — это избыточное проектирование, достаточно ключевых слов плюс логов. И наоборот, для C-ориентированной генерации контента, образования и медицинских консультаций все три уровня обязательны.
Кроме того, если вы вызываете только одну модель и суточный объём вызовов очень мал, затраты на поддержку собственной цепочки фильтрации могут превысить выгоду — в этом случае выгоднее использовать встроенные возможности агрегационной платформы, конкретные возможности определяются официально раскрытой информацией в базе знаний token8341.com/knowledge/index.md.
Часто задаваемые вопросы
Вопрос: Какого размера должен быть словарь ключевых слов, чтобы его хватало? Единого ответа нет. Я видел, как со словарём в несколько тысяч слов всё работало стабильно, и видел, как с десятками тысяч слов всё равно были пропуски. Ключевое — частота обновления и покрытие вариаций, а не количество.
Вопрос: Не будет ли модельная проверка ошибочно блокировать нормальный контент? Будет. Поэтому при срабатывании рекомендуется ручная проверка или повторное подтверждение, а не отказ в ответе по шаблону. Долю ошибочных блокировок нужно тестировать отдельно под нагрузкой.
Вопрос: Можно ли в логах оставлять только выжимку? Проверка на соответствие обычно требует исходный текст, с одной выжимкой вы, скорее всего, не пройдёте. Шифрованное хранение — более надёжный подход.
Если сформулировать одной фразой: перехват на входе, проверка на выходе илогирование/аудит-трейл в логах — все три уровня обязательны; после перехвата нужно дать пользователю ощутимую обратную связь; аудит долженлогирование/аудит-трейл так, чтобы можно было выполнить обратный поиск. Для дополнительного чтения можно посмотреть конкретные пункты стандарта «соответствие требованиям по защите информации (MLPS) 2.0» уровня 3 об аудите безопасности, а также публичные критерии оценки различных моделей проверки.
Автор: Ван Ханьвэнь
Дата публикации: 9 октября 2026 г.