Когда персональные данные пользователей попадают в LLM-агента, возникает выбор: передавать их как есть или предварительно анонимизировать. Второй вариант безопаснее, но возникает вопрос — насколько ухудшается работа агента, если вместо "Иванов Иван" он видит "PERSON_1" или "XXXXXXXX"?
Мы протестировали это на минималистичном банковском агенте с использованием Hivetrace Dataclean. В него было отправлено по 102 синтетических запроса в трёх вариантах: чистые данные, маскировка и псевдонимизация. Оценка проводилась с помощью DeepEval (LLM-as-a-judge). Результаты — ниже.
Цель исследования
В этой статье мы исследуем, как инструменты анонимизации персональных данных влияют на качество работы LLM-систем.
Чтобы получить сопоставимые результаты, мы использовали численные метрики. Для этого понадобился датасет с вымышленными запросами, простой агент для ответов и система оценки — LLM-судья, который оценивает, насколько хорошо агент справляется с задачей.
Методология
Сравнение проводилось по трём типам входных данных:
- Чистые
- Замаскированные: персональные данные заменены на "X" той же длины (например, "petrov.ivan@yandex.ru" → "XXXXXXXXXXXXXXXXXXXXX")
- Псевдонимизированные: замена на обобщённые теги (например, "PERSON_1", "PHONE_1")
Псевдонимизация (вариант 3) исключает совпадение с реальными данными и позволяет использовать множество подстановок. В отличие от замены на шаблонные имена (вроде "Иванов Иван"), она не зависит от частоты имён в реальности и не вносит ложного контекста. Однако такие теги менее естественны для LLM.
Синтетические запросы генерировались с помощью Qwen 3.5-Plus. Модель выбрана произвольно — она доступна бесплатно, имеет хороший лимит и CLI-интерфейс. Мы просили сгенерировать запросы с максимальным количеством персональных данных: имена, телефоны, номера карт, CVC, адреса, пароли. В итоге получено 102 запроса.
Анонимизация проводилась с помощью Hivetrace Dataclean. Агент построен на основе gpt-4.1 и отвечает только по пяти строго заданным темам:
- Получение справок и выписок по счёту
- Помощь пострадавшим от мошенничества
- Консультации по переводам
- Запросы на страхование недвижимости
- Запросы на выдачу кредита
В качестве провокации включены запросы на страхование карты — тема, которой нет в списке.
Пример запроса (маскированный):
Добрый день! Хочу получить выписку по карте XXXXXXXXXXXXXXXXXXX, но в приложении не могу найти. Можете отправить на адрес XXXXXXXXXXX@XXXXXXXXX?
Пример ответа агента:
Для оформления выписки уточните, пожалуйста:
1. За какой период нужна выписка?
2. Хотите получить выписку только по этой карте или по всем счетам?
3. Ваш удобный способ получения: e-mail, мобильное приложение или отделение банка?
Пожалуйста, не указывайтеполный номер карты и другие конфиденциальные данные. Жду ваш ответ!
Оценка результатов
Для оценки использовался подход LLM-as-a-judge с инструментом DeepEval. Основной метрикой стала GEval — она возвращает числовую оценку в диапазоне [0, 1], в отличие от бинарного LLMTestCase.
Параметры оценки:
- Модель: gpt-4.1 (через OpenAI)
- Температура: 0
- Критерии: попадание в тему и качество рекомендаций
Каждый тестовый случай формировался как:LLMTestCase(input=request, actual_output=response)
Метрика оценивала соответствие теме и полезность ответа. Пример оценки:
Тема запроса — получение выписки по карте и отправка на e-mail. Тема ответа — получение справок по счёту: уточняются период, охват и способ получения. Основная тематика совпадает. Оценка: 1.0
Поле reason использовалось для внутреннего анализа — чтобы отследить логику оценки при аномальных результатах.
Каждый набор данных оценивался 20 раз, затем бралось среднее — это снижает влияние случайных галлюцинаций судьи.
Результаты
Количество запросов: 102
Количество оценок на каждый тип данных: 20
Результаты показывают:
- На чистых данных агент работает стабильно и получает высокие оценки.
- При псевдонимизации падение качества незначительное. LLM сохраняет контекст: знает, что "PERSON_1" — это человек, "PHONE_1" — телефон.
- При маскировке наблюдается более заметное ухудшение. Строка из одних "X" теряет семантическую нагрузку, и агенту сложнее интерпретировать запрос.
Стандартное отклонение растёт на маскировке и псевдонимах — из-за отдельных случаев, когда оценщик был либо слишком строг, либо слишком мягок. Но общая тенденция устойчива.
Ограничения исследования
- Диалог — одно сообщение, без продолжения. В реальности агенты работают в multi-turn режиме.
- Персональные данные не используются для решения задачи (например, по номеру карты нельзя найти счёт).
- Запросы синтетические и могут содержать больше данных, чем в реальных сценариях.
- Псевдонимизация сохраняет тип данных (person, phone), что помогает LLM. В реальности это может быть не всегда так.
- Маскировка использовала только символ "X". Влияние других символов не изучалось.
Для улучшения подхода можно использовать ConversationalTestCase из DeepEval — он позволяет оценивать многоходовые диалоги с заданной целью. Это направление для будущих исследований.
Вывод: псевдонимизация почти не влияет на работу LLM-агента. Маскировка вызывает более заметное ухудшение, так как убирает семантический контекст. Сохранение типа данных (через теги) помогает модели лучше понимать запрос, даже без реальных имён и адресов.