Возможности
ВОЗМОЖНОСТИ

Privacy Mode

Автоматическое маскирование персональных данных перед отправкой к провайдеру.

Зачем это нужно

Когда вы отправляете запрос к зарубежной модели, текст уходит за пределы РФ. По 152-ФЗ это требует обоснования трансграничной передачи персональных данных или согласия субъекта. Privacy Mode автоматически удаляет ПД из запроса, а в ответе восстанавливает их обратно — модель работает с обезличенным текстом, вы получаете осмысленный ответ.

Фича бесплатна для всех моделей каталога.

Что маскируется

ТипПримеры
ФИОИван Петрович Сидоров
Emailuser@example.com
Телефоны+7 903 158-22-00, 8(495)555-12-34
Банковские карты4276 1600 1234 5678
IBAN / Счета40817810099910004312
IP-адреса192.168.1.1, 2001:db8::1
АдресаМосква, Тверская 13
Даты / Время12.04.1985, 2024-08-15T10:30
URLhttps://example.com/me
Национальностьрусский, татарка
Паспорта РФ4506 № 123456
СНИЛС123-456-789 01
ИНН7707083893, 770708389312
ОГРН1027700132195
Мед. лицензииLO-77-01-009999

Как настроить

Откройте раздел «Безопасность» в личном кабинете (/security):

  1. Включите тумблер «PII-маскирование».
  2. В блоке «Скрываемые сущности» выберите типы, которые хотите маскировать.
  3. Настройте три опции:
    • Восстанавливать в ответе — модель возвращает ответ с подставленными оригиналами вместо placeholders. По умолчанию включено.
    • Маскировать system prompt — применять маскирование к сообщениям с role: 'system'. По умолчанию выключено.
    • Блокировать при ошибке — если сервис маскирования временно недоступен или восстановление данных в ответе не удалось — вернуть ошибку 503/502 вместо тихого пропуска без маски. По умолчанию выключено.
  4. Нажмите «Сохранить политику».

Переопределение для одного ключа

На странице «Ключи» (/keys) кликните на чип Privacy у нужного ключа и выберите один из четырёх режимов:

  • По политике организации — следует основной политике (значение по умолчанию).
  • Принудительно выключить — даже если организация включила.
  • Принудительно включить — даже если организация выключила.
  • Обязательно — включено + блокировать при ошибке.

Переопределение в одном запросе

Передайте заголовок X-Hubris-Privacy-Mask или поле privacy_mask в теле запроса:

curl https://api.hubris.pw/v1/chat/completions \
  -H "Authorization: Bearer sk-gw-..." \
  -H "X-Hubris-Privacy-Mask: on" \
  -d '{"model": "openai/gpt-4o", "messages": [{"role":"user","content":"Иван +79031582200"}]}'

Возможные значения: on, off, required. Приоритет (сильнее → слабее): header > body > per-key > политика организации.

Пример: было → стало

Запрос пользователя:

«Иван Петрович, тел +79031582200, запиши на 14:00»

Уходит к провайдеру:

«[PERSON_1], тел [PHONE_1], запиши на [DATE_TIME_1]»

Ответ провайдера:

«Записал [PERSON_1] на [DATE_TIME_1], позвоню за час по [PHONE_1]»

Вы получаете:

«Записал Ивана Петровича на 14:00, позвоню за час по +79031582200»

Стриминг

В режиме stream: true Hubris разбирает SSE-чанки на лету. Когда в потоке появляется placeholder вида [TYPE_N], его текст буферизуется (не более 50 символов или 200 мс) и при появлении закрывающей скобки заменяется на оригинал.

Если placeholder не нашёлся в карте подстановок — буфер выдаётся клиенту как есть, а счётчик X-Hubris-Restore-Mismatch увеличивается на 1.

Заголовки ответа

ЗаголовокЗначение
X-Hubris-Privacy-Modeon, required, или failed
X-Hubris-Masked-Countсколько сущностей скрыто
X-Hubris-Masked-Typesпример: person:1,phone:1,email:2
X-Hubris-Mask-Latency-Msзадержка анализа в миллисекундах
X-Hubris-Privacy-Policy-Versionверсия применённой политики
X-Hubris-Restore-Mismatchсколько placeholders в ответе не удалось восстановить
X-Hubris-Restore-Skipped1, если в политике выключено восстановление

Что НЕ маскируется

  • Изображения в vision-запросах (OCR появится в будущем).
  • Содержимое аудио-запросов (когда появится audio-транскрипция).
  • Сообщения с role: 'system', если в политике отключено «Маскировать system prompt».
  • Произвольная обфускация (например, п@@@ел Иван, «4-5-0-6 123456») — это сделано намеренно, чтобы не ломать релевантные пользовательские маркеры.
  • Очень нестандартные ФИО без контекстных слов — есть редкие промахи NER.

Защитные ограничения

  • Размер запроса: при privacy_mask ≠ off суммарный prompt не может превышать 30 000 токенов — иначе HTTP 413. Это защита от перегрузки сервиса маскирования; для длинных юридических документов значение может быть увеличено в будущих версиях.
  • Лимит запросов: 100 privacy-запросов в минуту на один API-ключ. Превышение — HTTP 429. Лимит мягкий, рассчитан на обычное использование.

Лучше всего работает на коротких сообщениях

Маскирование рассчитано на одиночные запросы или короткие диалоги (1–3 хода). На длинных multi-turn-сессиях возможен такой эффект:

  • В каждом запросе анализатор маскирует всю историю (включая прошлые ответы ассистента), присваивая токены вида [PERSON_1], [LOCATION_5] и т. д.
  • К пятому-десятому ходу контекст модели состоит на 30–70% из таких токенов.
  • Модель учит этот паттерн в контексте и начинает сама генерировать новые токены ([LOCATION_29], [PERSON_47]) для придуманных ею сущностей, которых не было в исходном запросе.
  • В нашем anonymizer map этих токенов нет — мы не можем подставить «оригинал», потому что оригинала и не существует. Такие токены остаются в ответе как есть.

Признаки утечки токенов:

  • Видимые в ответе строки вида [ТИП_число] (например, [LOCATION_29]).
  • В usage_logs.mask_metadata.restore_mismatch_count будет ненулевое значение.
  • В ответе есть response-заголовок X-Hubris-Restore-Mismatch: N.

Что делать:

  • Для PII-чувствительных задач используйте одиночные запросы без длинной истории.
  • Если важна жёсткая гарантия, включите «Блокировать при ошибке» в политике. Тогда при restore_mismatch_count > 0 запрос вернёт HTTP 502 privacy_mask_restore_failed, и можно повторить запрос без истории.
  • Альтернатива — детектировать утечку клиентом: regex /\[[A-Z_]+_\d+\]/ по ответу, и при срабатывании очищать историю / начинать новую сессию.

Технические детали

Под капотом — Microsoft Presidio (open-source PII detection engine от Microsoft) с моделью GLiNER multi-PII (мультиязычная NER, ONNX-оптимизирована), spaCy ru_core_news_sm для русской токенизации и собственные распознаватели СНИЛС, ИНН, паспортов и ОГРН с проверкой контрольной суммы.

Сервис маскирования живёт на том же сервере, что и API, и общается через localhost — данные не покидают периметр Hubris для целей анализа.

Условия использования

Фича бесплатна. При значительном изменении нагрузки мы можем уточнить лимиты — с уведомлением за 30 дней.

Обновлено:

Privacy Mode · Hubris