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

Контролируемое маскирование запросов к LLM

Контролируемое маскирование запросов к LLM дает вам полный контроль над процессом и сохраняет необходимую для сервисов структуру данных. Вы отправляете исходный запрос в Jay Guard для маскирования, затем передаете его в LLM, а ответ от модели — обратно в Jay Guard для демаскирования.

Используйте контролируемое маскирование для защиты конфиденциальных данных при работе с LLM. Этот метод подходит в случаях, когда вам не требуется проксирование, при котором Jay Guard самостоятельно отправляет запрос модели и получает от нее ответ.

Jay Guard обнаруживает в запросе сущности и применяет к ним одно из следующих действий:

  • Пропускать (allow): сущности не маскируются, но их обнаружение фиксируется в аудите.
  • Блокировать (deny): сущности скрываются, а в поле action ответа указывается deny.
  • Маскировать (redact): вместо конфиденциальных данных в запросе возвращаются плейсхолдеры.

Эти действия настраиваются в правилах фильтрации.

Принцип работы

  1. Маскирование запроса. Приложение отправляет исходный запрос для LLM на эндпоинт маскирования Jay Guard:

    POST /api/dataguard/public/user-masking/{service}/mask

    Здесь {service} — это идентификатор сервиса, для которого применяются правила маскирования (например, mlp). Возможные значения:

    • gigachat;
    • mlp — для моделей, размещенных в Caila;
    • openai;
    • yandexgpt.
  2. Получение замаскированных данных и ID сессии. Jay Guard возвращает замаскированную версию запроса, сформированную в формате данных для этого сервиса, и уникальный ID сессии X-DATA-GUARD-MASKING-ID.

  3. Отправка запроса в LLM. Приложение отправляет замаскированные данные в целевую LLM и получает ответ.

  4. Демаскирование ответа. Приложение отправляет ответ от LLM на эндпоинт демаскирования Jay Guard, передавая ID сессии (X-DATA-GUARD-MASKING-ID) для восстановления исходных данных. Эндпоинт:

    POST /api/dataguard/public/user-masking/{service}/unmask

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

Для маскирования запроса, отправьте его на эндпоинт:

POST /api/dataguard/public/user-masking/{service}/mask

Структура запроса

Заголовки

ЗаголовокОписание
X-DATA-GUARD-API-KEYКлюч доступа из интерфейса Jay Guard.
X-META-* (до 5 штук)Опциональные заголовки для передачи дополнительной метаинформации, которая будет зафиксирована в журнале аудита (например, X-META-USER-ID).

Тело

Тело запроса может содержать любой валидный JSON-объект, который вы планируете отправить в LLM:

curl -X POST 'https://<your-host>/api/dataguard/public/user-masking/mlp/mask' \
--header 'X-DATA-GUARD-API-KEY: <your_api_key>' \
--header 'Content-Type: application/json' \
--data-raw '{
"model": "gpt-4",
"messages": [
{
"role": "user",
"content": "Меня зовут Иван Петров, мой номер телефона +7(999)123-45-67. Помоги составить письмо."
}
]
}

Ответ

Jay Guard возвращает замаскированную версию запроса, уникальный идентификатор сессии X-DATA-GUARD-MASKING-ID, список сущностей и действия:

// HTTP Headers:
// X-DATA-GUARD-MASKING-ID: 11e8-23e5-11e9-ab14-d663bd873d93
// X-DATA-GUARD-MASKING-ACTION: redact
{
"model": "gpt-4",
"messages": [
{
"role": "user",
"content": "Меня зовут <jg:person_1>, мой номер телефона <jg:phone_1>. Помоги составить письмо."
}
]
}
предупреждение

Сохраните значение идентификатора X-DATA-GUARD-MASKING-ID из ответа. Оно потребуется для демаскирования.

Демаскирование ответа

Чтобы восстановить исходные данные, отправьте ответ от LLM на эндпоинт демаскирования:

POST /api/dataguard/public/user-masking/{service}/unmask

Структура запроса

Заголовки

ЗаголовокОписание
X-DATA-GUARD-API-KEYКлюч доступа из интерфейса Jay Guard.
X-DATA-GUARD-MASKING-IDУникальный идентификатор сессии, полученный на шаге маскирования.

Тело

Тело запроса должно содержать любой валидный JSON-объект c текстом, полученным от LLM, и значением X-DATA-GUARD-MASKING-ID:

curl -X POST 'https://<your-host>/api/dataguard/public/user-masking/mlp/unmask' \
--header 'X-DATA-GUARD-API-KEY: <your_api_key>' \
--header 'X-DATA-GUARD-MASKING-ID: 11e8-23e5-11e9-ab14-d663bd873d93' \
--header 'Content-Type: application/json' \
--data-raw '{
"choices": [
{
"message": {
"role": "assistant",
"content": "Конечно, <jg:person_1>! Я подготовлю для вас шаблон письма. Уточните, на какой адрес его отправить?"
}
}
]
}'

Примеры запросов демаскирования смотрите в соответствующем разделе документации.

Ответ

Jay Guard возвращает демаскированный текст.

{
"choices": [
{
"message": {
"role": "assistant",
"content": "Конечно, Иван Петров! Я подготовлю для вас шаблон письма. Уточните, на какой адрес его отправить?"
}
}
]
}

Потоковое демаскирование

Если вы работаете с LLM, которая возвращает ответ в потоковом режиме, используйте WebSocket-эндпоинт. Фрагменты ответов, полученные таким образом, будут сразу демаскироваться.

URL для подключения: ws://<dataguard-host>/api/dataguard/public/user-masking/unmask/stream

При установке соединения передайте заголовки X-DATA-GUARD-API-KEY и X-DATA-GUARD-MASKING-ID. Фрагменты ответа от LLM будут демаскированы в реальном времени.

Аудит

Все обнаруженные во время маскирования сущности фиксируются в журнале аудита с типом события «Маскирование запроса в LLM».

к сведению

На данный момент операции демаскирования не логируются в журнале аудита.