Маскирование ПДн
Как не отправлять персональные данные модели: заголовок X-PII-Masking, что маскируется и какие есть ограничения.
Маскирование заменяет персональные данные в запросе на токены до отправки модели, а в ответе подставляет исходные значения обратно. Модель видит токен вместо имени, вы получаете ответ с настоящим именем. Опция платная и подключается организации отдельно.
Как включить
Заголовок X-PII-Masking решает судьбу каждого запроса:
| Значение | Что происходит |
|---|---|
on | запрос маскируется |
off | маскирования нет, ошибки не будет, даже если опция не подключена |
| не передан | действует настройка организации, без подключённой опции маскирования нет |
Также принимаются true, false, 1 и 0. Если передать on, а опция не подключена, придёт 403 pii_masking_not_enabled: запрос не уйдёт модели без маскирования, пока вы считаете себя защищёнными.
curl https://api.morphogen.ru/v1/chat/completions \
-H "Authorization: Bearer $MORPHOGEN_API_KEY" \
-H "X-PII-Masking: on" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-6-luna",
"max_tokens": 100,
"messages": [{"role": "user", "content": "Составь приветствие для Ивана Иванова, телефон +7 912 345-67-89"}]
}'В ответе приходит заголовок X-PII-Masking: applied, если маскирование применено, и off, если нет. Проверяйте его в коде, если защита обязательна.
Что маскируется
Только текст сообщений, на русском и частично на латинице. Сервис находит:
- ФИО, телефоны, email;
- паспорта, СНИЛС, ИНН физических лиц, водительские удостоверения, документы иностранцев;
- номера банковских карт, счета физических лиц и ИП;
- адреса, даты рождения;
- секреты: API-ключи, пароли, токены.
Реквизиты организаций (расчётный счёт, БИК, КПП, ОГРН, ИНН юрлица) не относятся к персональным данным и по умолчанию не маскируются.
Маскирование снижает объём персональных данных в запросе к модели, но не исключает его полностью. Поиск идёт по правилам, словарям и модели распознавания имён. Редкие формы, опечатки и одиночные имена без контекста могут пройти. При сомнении сервис предпочитает лишнюю маску, поэтому иногда маскируются даты договоров и служебные адреса почты.
Что не маскируется
- Картинки, аудио, определения инструментов, аргументы и результаты вызовов инструментов уходят модели как есть. Поддерживается только текстовое содержимое сообщений.
- На
/v1/embeddings,/v1/audio/transcriptions,/v1/images/generationsи с моделью картинок в/v1/chat/completionsмаскирования нет. ЯвныйX-PII-Masking: onдаёт 400pii_masking_unsupported_endpoint. - На
/v1/videosзаголовок игнорируется: запрос проходит, а промпт уходит провайдеру без маскирования. Не отправляйте персональные данные в промпте видео. - Аргументы вызовов инструментов в ответе не демаскируются.
Поток и отказоустойчивость
В потоковом режиме значения возвращаются на место по мере прихода токенов. Если сервис маскирования недоступен, запрос получает 503 и не уходит модели: незамаскированный текст не отправляется никогда. Такой запрос не оплачивается.
Ошибки
| Код | Причина |
|---|---|
400 invalid_pii_masking_header | значение заголовка не из списка |
400 pii_masking_unsupported_endpoint | on на эндпоинте без маскирования |
403 pii_masking_not_enabled | опция не подключена организации |
503 service_unavailable | сервис маскирования недоступен |