Вы даже не заметите, как ваш AI-агент проболтается
Представьте: вы даёте deep research агенту задачу — проанализировать конкурентов, используя внутреннюю CRM, и сгенерировать отчёт. Агент отправляет десятки запросов в поисковики, API, базы знаний. Ни один из них по отдельности не содержит секретов. Но соберите их вместе — и получите полную картину вашей клиентской базы, цен и стратегий.
Это MosaicLeaks — новый класс атак, о котором заговорили только в 2025-2026 годах. Исследователи из MIT и Hugging Face показали: даже если каждый отдельный запрос агента "чист", комбинация контекста из множества шагов позволяет восстановить приватные данные. Эффект мозаики — по кусочкам складывается целое.
Суть уязвимости не в утечке одного промпта, а в корреляции множества запросов. Агент сам создаёт цифровой отпечаток, который злоумышленник собирает по крупицам.
Почему это стало проблемой сейчас? Потому что deep research агенты — это уже не просто чат-боты. Они ходят по внешним системам, собирают данные, запоминают контекст на миллионы токенов. И чем длиннее цепочка вызовов, тем выше риск.
Откуда взялся MosaicLeaks и почему PA-DR — ответ
В начале 2026 года команда исследователей (статья вышла в апреле на arXiv) формализовала атаку: назвали её MosaicPrompt Extraction. Оказалось, что стандартные методы фильтрации PII (персональных данных) перед отправкой провайдеру LLM не работают — агент передаёт данные не напрямую, а через последовательность действий. Пример:
- Шаг 1: "Найди контакты IT-компаний в Москве".
- Шаг 2: "Сравни их цены с прайс-листом, который я загрузил".
- Шаг 3: "Отправь отчёт на example@corp.ru".
Если злоумышленник видит все три запроса, он понимает: компания A работает с компанией B, у них есть определённые цены, и почта — рабочая. Агент сам собрал мозаику.
Решение предложили тут же — Privacy-Aware Deep Research (PA-DR). Это не просто очередной фильтр, а архитектурный подход: агент учится минимизировать информацию в каждом внешнем запросе, сохраняя при этом способность выполнять задачу. Как? Разберём по шагам.
Кстати, если вы только начинаете разбираться с архитектурой deep research агентов, рекомендую прочитать полный разбор архитектуры OpenAI, Google и открытых решений — там показано, как устроены цепочки вызовов.
PA-DR: три кита, на которых держится приватность
Метод основан на трёх механизмах, работающих в связке. Без любого из них защита рассыпается.
- Дифференцированная маршрутизация запросов — агент оценивает чувствительность каждого подзапроса и выбирает разного провайдера LLM или разный уровень обработки.
- Контекстное сжатие с удалением PII — перед отправкой контекст сжимается, и из него вырезаются все прямые идентификаторы (имена, email, номера телефонов), но сохраняется семантическая связность.
- Обратная связь по утечке — после выполнения задачи агент проверяет, не было ли избыточных запросов, которые могли раскрыть приватные данные, и при необходимости переписывает их.
Звучит как магия? На практике это не так сложно, как кажется. Давайте соберём минимальный рабочий пайплайн.
Пошаговый план: внедряем PA-DR в вашего агента
1Определите уровни чувствительности данных
Сначала разметьте поля, которые ваш агент может получить от бизнес-систем. Создайте таблицу классификации.
| Категория | Примеры | Действие |
|---|---|---|
| Критичная (PII, финансы) | Имя клиента, номер кредитки | Никогда не передавать вовне; заменять на псевдоним |
| Конфиденциальная | Названия проектов, внутренние метрики | Передавать только через фильтр обобщения |
| Публичная | Общедоступные статьи, даты | Без изменений |
Это основа, без которой PA-DR не запустить. Ошибка на этом этапе — всё пропустить через один фильтр.
2Добавьте слой контекстного сжатия
Используйте локальный LLM (например, Llama 4 или Mistral 3) для переписывания контекста перед отправкой во внешний API. Задача: убрать прямые PII, но сохранить суть. Пример промпта:
def compress_context(context: str, sensitive_fields: list) -> str:
prompt = f"""Удали из текста все персональные данные: {sensitive_fields}.
Замени на обобщённые категории (например, [ИМЯ], [КОМПАНИЯ]).
Не меняй смысл и структуру.
Текст: {context}"""
# вызов локальной модели
return local_llm.invoke(prompt)Важно: сжатие происходит до того, как запрос будет отправлен к OpenAI, Google или Anthropic. Если вы сначала шлёте, а потом чистите — смысла нет.
Кстати, в статье "Куда уходят ваши диалоги с ChatGPT" детально разбирается, какие именно данные остаются на серверах провайдеров — это чтение обязательно перед внедрением PA-DR.
3Реализуйте дифференцированную маршрутизацию
На основе классификации из шага 1 направляйте запросы разных уровней на разные модели. Критичные — только локально или через шифрованный канал (например, NoChat с ML-KEM). Публичные — можно отправлять в GPT-5, Gemini 3, Claude 4. Это снижает поверхность атаки.
def route_request(request: dict):
if request['sensitivity'] == 'critical':
return call_local_llm(request)
elif request['sensitivity'] == 'confidential':
return call_encrypted_external(request)
else:
return call_public_api(request)4Добавьте пост-проверку на утечку мозаики
После завершения цепочки агент должен проанализировать все отправленные вовне запросы и проверить, можно ли по ним восстановить приватную информацию. Используйте простой эвристический анализатор или второй LLM.
def detect_mosaic(requests_log: list, original_data: dict) -> bool:
# эвристика: если сумма запросов содержит все ключевые поля - тревога
combined = ' '.join([r['query'] for r in requests_log])
for field in original_data.keys():
if field.lower() in combined.lower():
return True
return FalseЕсли обнаружена утечка, агент должен отозвать результаты (например, аннулировать кеш) и перезапустить задачу с более строгими фильтрами.
Типичные ошибки, которые превращают PA-DR в тыкву
- Фильтрация на стороне клиента, а не агента. Если вы чистите промпт только перед отправкой, но агент всё равно хранит сырые данные в памяти для подзапросов — утечка возможна изнутри.
- Игнорирование вложенных вызовов. Агенты часто вызывают другие агенты (swarm). Нужно, чтобы каждый участник цепочки тоже придерживался PA-DR. Подробнее о контроле доступа в swarm читайте в материале "Как реализовать контроль доступа и управление доверием в swarm из AI-агентов".
- Слишком агрессивное сжатие. Можно так обезличить контекст, что агент перестанет понимать задачу. Держите баланс: тестируйте точность после каждого изменения.
- Отсутствие аудита. Без логов вы не узнаете, произошла ли утечка. Включайте подробное логирование всех исходящих запросов (кроме PII, конечно).
FAQ по MosaicLeaks и PA-DR
Вопрос: Можно ли защититься только шифрованием?
Нет. Шифрование защищает канал, но не содержимое. Если злоумышленник имеет доступ к API провайдера (или перехватывает запросы), он видит расшифрованный текст. PA-DR уменьшает информацию, доступную даже при расшифровке.
Вопрос: Какова дополнительная задержка?
Сжатие и маршрутизация добавляют 200-500 мс на шаг. Но это оправдано безопасностью. Если задержка критична, выполняйте сжатие асинхронно или используйте кеш.
Вопрос: Нужно ли менять модель под PA-DR?
Не обязательно. PA-DR — это middleware, а не новая архитектура. Но лучше всего он работает с моделями, поддерживающими инструментальные вызовы (function calling).
Напоследок: если вы строите корпоративного deep research агента, не пропустите статью "Корпоративный ИИ-агент: как Яндекс построил DeepResearch" — там показано, как большие компании решают проблему приватности в RAG.
В 2026 году MosaicLeaks станет такой же стандартной угрозой, как SQL-инъекции. PA-DR — это пока экспериментальный, но рабочий метод. Внедрите его сейчас, пока ваш агент не собрал компромат на самого себя. И помните: приватность — это не фича, это архитектурное решение.