Перейти к основному содержимому

Маскирование запросов

Маскирование запросов — поиск и скрытие конфиденциальных данных в запросах перед их отправкой к модели.

Сервис распознает основные типы данных, например email, номер телефона, номер паспорта. Можно выбрать нужные типы, а также настроить распознавание собственных типов данных.

Распознавание работает на основе регулярных выражений. Проверяются текстовые значения в POST-запросах на эндпоинты:

  • /chat/completions — текст сообщений, текстовые части мультимодального контента, аргументы функций и поле prediction;
  • /images/generations — текст в поле prompt.

Маскирование можно использовать в одном из двух режимов — замена данных или блокировка запроса.

Мы не рекомендуем использовать маскирование как единственный механизм защиты данных. Ограничивайте доступ к API-ключам и не передавайте конфиденциальную информацию без необходимости.

Чтобы использовать маскирование, включите его. Маскирование включается отдельно для каждого ИИ-роутера.

Типы распознаваемых данных

В сервисе есть правила для распознавания следующих типов данных:

  • email-адреса;
  • российские и международные номера телефонов;
  • номера банковских карт с проверкой контрольной суммы по алгоритму Луна;
  • СНИЛС с проверкой контрольной суммы;
  • ИНН из 10 или 12 цифр с проверкой контрольной суммы;
  • серия и номер паспорта РФ;
  • API-ключи ИИ-роутера.

Вы также можете настроить распознавание собственных типов данных. Для этого составьте регулярное выражение для распознавания нужных данных и укажите его в тикете при включении маскирования.

Режимы маскирования

Маскирование работает в одном из двух режимов:

  • замена данных — найденные данные заменяются на маркеры-заглушки. Подходит для работы с данными, в которых могут встречаться конфиденциальные;
  • блокировка запроса — при первом найденном вхождении запрос блокируется. Подходит для работы с данными, в которых не должно быть конфиденциальных данных еще до отправки к модели.

Замена данных

Найденные конфиденциальные данные в запросе заменяются на маркеры-заглушки вида [ЗАМЕНЕНО:<тип_данных>]. Модель получает запрос с замененными данными.

Если встречаются разные вхождения одного типа данных, они получают порядковые номера, например [ЗАМЕНЕНО:email_1] и [ЗАМЕНЕНО:email_2]. Для числовых значений не учитывается разделение дефисами и пробелами.

примечание

Например, запрос «Напиши ivan@example.com, копия — manager@example.com. Ответить на ivan@example.com.» будет обработан и отправлен модели в виде «Напиши [ЗАМЕНЕНО:email_1], копия — [ЗАМЕНЕНО:email_2]. Ответить на [ЗАМЕНЕНО:email_1]».

При замене данных ответ API не будет содержать дополнительных данных или заголовков. Менять обработку успешных ответов не требуется.

Блокировка запроса

При первом найденном вхождении отклоняется весь запрос. ИИ-роутер возвращает ошибку guardrail_rejected с HTTP-кодом 422 в формате JSON-файла и не отправляет запрос к модели. Если запрос потоковый, то ошибка возвращается до начала SSE-потока.

В ответе в заголовке x-gateway-request-id возвращается идентификатор запроса. Сохраняйте его в логах приложения для диагностики.

При обработке ответа проверяйте поле error.code. Не повторяйте запрос с кодом guardrail_rejected автоматически без изменения содержимого.

Ошибки

Если ИИ-роутер не смог применить правила и запрос нельзя отправить без проверки, клиент получает ошибку с HTTP-кодом 500:

{
"error": {
"type": "server_error",
"code": "internal_error",
"message": "Guardrails could not be applied to this request",
"request_id": "sel-aig-<request_id>"
}
}

Здесь <request_id> — идентификатор запроса.

Для ошибки с кодом 500 настройте ограниченное число повторных попыток с увеличением задержки после каждой ошибки. Если ошибка сохраняется, создайте тикет и в нем укажите идентификатор запроса.

Ограничения

Проверка не гарантирует обнаружение всех персональных или конфиденциальных данных.

Так как проверка работает на основе регулярных выражений, то значение останется без изменений, если оно:

  • разделено между несколькими полями или частями сообщения;
  • закодировано;
  • транслитерировано;
  • записано словами вместо цифр;
  • находится внутри изображения или файла.

Возможны ложные совпадения. Например, правило для распознавания паспорта РФ может распознать как паспорт другой идентификатор из десяти цифр.

Включить маскирование запросов

  1. Если вы хотите использовать маскирование в режиме блокировки запросов, убедитесь, что ваш клиент обрабатывает ошибку guardrail_rejected с HTTP-кодом 422 и заголовок Content-Type: application/json, в том числе для запросов со stream: true.

  2. Создайте тикет для включения маскирования. В тикете укажите:

    • ID ИИ-роутера, можно скопировать в панели управления: в верхнем меню нажмите ПродуктыИИ-роутер → в карточке ИИ-роутера под его именем нажмите ;
    • режим маскирования — замена данных или блокировка запроса;
    • типы данных, которые нужно маскировать;
    • если нужно настроить распознавание собственного типа данных — регулярное выражение для поиска этого типа данных;
    • если выбран режим замены данных — желаемое имя маркера.