Privacy Mode
Автоматическое маскирование персональных данных перед отправкой к провайдеру.
Зачем это нужно
Когда вы отправляете запрос к зарубежной модели, текст уходит за пределы РФ. По 152-ФЗ это требует обоснования трансграничной передачи персональных данных или согласия субъекта. Privacy Mode автоматически удаляет ПД из запроса, а в ответе восстанавливает их обратно — модель работает с обезличенным текстом, вы получаете осмысленный ответ.
Фича бесплатна для всех моделей каталога.
Что маскируется
| Тип | Примеры |
|---|---|
| ФИО | Иван Петрович Сидоров |
| user@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 |
| URL | https://example.com/me |
| Национальность | русский, татарка |
| Паспорта РФ | 4506 № 123456 |
| СНИЛС | 123-456-789 01 |
| ИНН | 7707083893, 770708389312 |
| ОГРН | 1027700132195 |
| Мед. лицензии | LO-77-01-009999 |
Как настроить
Откройте раздел «Безопасность» в личном кабинете (/security):
- Включите тумблер «PII-маскирование».
- В блоке «Скрываемые сущности» выберите типы, которые хотите маскировать.
- Настройте три опции:
- Восстанавливать в ответе — модель возвращает ответ с подставленными оригиналами вместо placeholders. По умолчанию включено.
- Маскировать system prompt — применять маскирование к сообщениям с
role: 'system'. По умолчанию выключено. - Блокировать при ошибке — если сервис маскирования временно недоступен или восстановление данных в ответе не удалось — вернуть ошибку 503/502 вместо тихого пропуска без маски. По умолчанию выключено.
- Нажмите «Сохранить политику».
Переопределение для одного ключа
На странице «Ключи» (/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-Mode | on, 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-Skipped | 1, если в политике выключено восстановление |
Что НЕ маскируется
- Изображения в 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 502privacy_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 дней.
Обновлено:
Генерация изображений
Генерация изображений через /v1/chat/completions. Передайте `modalities: ["image","text"]` и модель с поддержкой image-output.
Claude Code
Подключение официального CLI-агента Claude Code к Hubris через эндпоинт /v1/messages — поддержка Sonnet, Opus, Haiku, кэширования, vision, статусной строки.