3,583 papers
arXiv:2610.06454 89 5 окт. 2026 г. FREE

AgentPrivAudit: проверка исходящих действий агента отдельным аудитором, пока данные не утекли

КЛЮЧЕВАЯ СУТЬ
Просьба «будь осторожен с приватными данными» почти не помогает: утечки падают с 47% лишь до 43%. Метод AgentPrivAudit позволяет поймать чужие и личные данные в письме, посте или файле агента до отправки, а не после. Фишка: тот же вопрос про приватность работает вдвое лучше, если задать его отдельным вызовом перед отправкой, а не вшить в промпт агента: 40.7% утечек как инструкция против 21.7% как проверка. Лучший вариант на основе контекстной целостности даёт 18% утечек вместо 47%, а полезность ответов почти не падает.
Адаптировать под запрос
⚡

TL;DR

AgentPrivAudit — это второй LLM-проход, который стоит между агентом и исходящим действием (письмо, пост, сообщение, загрузка файла). Он делает два шага. Сначала выписывает, какие факты агент прочитал и куда они могут уйти: отправитель, получатель, о ком данные, тип, на каких условиях можно делиться. Потом перед каждой отправкой решает по каждому факту: PASS (пропустить), ABSTRACT (заменить деталь обобщением) или BLOCK (убрать).

Главная находка: общий промпт «будь осторожен с приватными данными» почти не работает. Без защиты агенты протекают в среднем в 47% задач: утекает хотя бы один защищённый факт. С общим промптом про приватность — 43%. Причина простая: в реальной работе нужная и защищённая информация приходит агенту одним куском (одно письмо, одна страница). Она остаётся в контексте, и модель не отделяет одно от другого «на лету». Дело не в том, что модель не знает про приватность, а в том, что ей негде остановиться и подумать именно перед отправкой.

С отдельным аудитором на границе записи утечки падают до 18% (критерий «контекстная целостность») при почти неизменной полезности ответов. Разброс между моделями тоже схлопывается: от 25 п.п. до 3 п.п. То есть слабая модель с аудитом ведёт себя почти как сильная. Даже когда критерий сформулирован как обычная инструкция, эффект скромный (с 46.8% до 40.7%). Тот же вопрос, но исполняемый как проверка перед записью, даёт 21.7%.

🔬

Схема метода

ШАГ 1 (после каждой пачки чтений агента) — ЭКСТРАКТОР:
  инструкция пользователя + всё прочитанное → список потоков информации
  (SENDER / RECIPIENT / SUBJECT / TYPE / TRANSMISSION PRINCIPLE)
  Данные агенту отдаются без изменений. Экстрактор может добавить короткую заметку.

ШАГ 2 (перед КАЖДОЙ исходящей записью) — АРБИТР:
  список потоков + черновик отправки + критерий → по каждому потоку:
  обоснование + PASS | ABSTRACT | BLOCK

Критерий — сменный блок (CI / PII / DATA MIN.). Остальное не меняется.
Шаги 1 и 2 — отдельные вызовы модели, не часть промпта самого агента.
🚀

Пример применения

Задача: Вы руководитель небольшого агентства в Новосибирске. Агент (Claude Code с доступом к почте и Notion через MCP) должен написать клиенту «Сибстрой-Девелопмент» письмо о переносе созвона с четверга на пятницу. В переписке про созвон рядом лежат два письма: ваша запись к врачу (диагноз) и обсуждение зарплаты дизайнера (240 000 ₽). Агент прочитал всё это одним поиском. Перед отправкой письма вы прогоняете аудитора.

Промпт:


Ты — аудитор приватности. Ты не выполняешь задачу и не пишешь письма.
Ты проверяешь, какая информация уходит наружу и уместно ли это.




Напиши клиенту «Сибстрой-Девелопмент» (Андрей Волков) письмо: созвон переносим с четверга 15:00 на пятницу 12:00. Коротко и вежливо.



[1] Письмо от Марины (дизайнер): «Андрей, по созвону в четверг — я не успею, у меня зарплатный разговор, прошу 240 000 ₽ вместо 190 000 ₽».
[2] Письмо из клиники: «Подтверждаем запись на четверг 14:00, приём по поводу хронической гипертонии».
[3] Письмо от Андрея Волкова (клиент): «Если надо, можем сдвинуть созвон на пятницу».



Кому: a.volkov@sibstroy.example
Текст: «Андрей, добрый день! Переносим созвон на пятницу в 12:00. В четверг я буду в клинике из-за гипертонии, а Марина решает вопрос с зарплатой, поэтому не успеваем. Спасибо за гибкость!»




Выпиши все факты из Observations, которые могут попасть в ProposedAction.
Для каждого факта заполни:
- SENDER: откуда данные
- RECIPIENT: кому они предназначены по задаче
- SUBJECT: о ком данные
- TYPE: категория (персональный идентификатор, здоровье, финансы…)
- TRANSMISSION_PRINCIPLE: при каких условиях ими можно делиться



Критерий (CI): уместно ли этому отправителю делиться этим фактом об этом субъекте с этим получателем, по этому каналу, для этой цели?

Для каждого потока дай:
- rationale: 1–2 предложения
- disposition: PASS (пропустить как есть) | ABSTRACT (заменить обобщением) | BLOCK (убрать совсем)
Для ABSTRACT напиши, чем заменить.
В конце выдай исправленный текст письма.

Результат: Модель сначала выдаст таблицу потоков: диагноз, зарплата, перенос на пятницу. По каждому будут все пять полей. Затем вердикты с обоснованием. Диагноз и зарплата скорее всего получат BLOCK или ABSTRACT («в четверг я не смогу»), перенос времени — PASS. В конце будет исправленный текст письма без чужих и личных данных.

🧠

Почему это работает

Слабость: агент читает данные «пачкой». Нужное для задачи и защищённое приходят вместе и остаются в контексте. Модель при генерации письма не отделяет «что я знаю» от «что уместно сказать этому человеку». Общая просьба «соблюдай приватность» не говорит, какие именно факты опасны в этой конкретной ситуации.

Сильная сторона: если задать модели узкий вопрос про один поток («это уместно сказать этому получателю для этой цели?»), она отвечает заметно лучше. Особенно когда у неё есть заполненные поля: кто, о ком, кому, зачем. Статья это показывает: те же три формулировки критерия как инструкция почти не различаются (разброс 4 п.п.), а в аудите расходятся сильнее. Относительный критерий (контекстная целостность) работает только тогда, когда поля потока выписаны явно.

Как метод использует это: он разделяет «понять, что перед нами» и «решить, можно ли» на два шага и ставит проверку перед необратимым действием. Третий вердикт, ABSTRACT, важен: вместо отказа модель обобщает факт, и письмо остаётся полезным.

Рычаги управления: - Критерий → CI (контекст) лучше всего. DATA MIN. («нужен ли факт для задачи?») почти не уступает (разница статистически незначима) и проще. PII (только персональные данные) слабее: он почти не использует BLOCK и защищает только абстрагированием. - Вердикты → хотите строже, убирайте ABSTRACT и оставляйте PASS/BLOCK. Хотите сохранить полезность, оставляйте все три. - Когда запускать → экстрактор после каждой пачки чтений, арбитр перед каждой записью (письмо, пост, загрузка файла). - Отдельный вызов → аудитор не должен быть тем же рассуждением, что и исполнитель.

📋

Шаблон промпта


Ты — аудитор приватности. Ты не выполняешь задачу и не пишешь за исполнителя.
Ты проверяешь, какая информация уходит наружу и уместно ли это.



{инструкция_пользователя}
{всё_что_агент_прочитал}
{черновик_отправки: кому и что}



Выпиши все факты из Observations, которые могут попасть в ProposedAction.
Для каждого факта заполни:
- SENDER: откуда данные
- RECIPIENT: кому они предназначены по задаче
- SUBJECT: о ком данные
- TYPE: категория информации
- TRANSMISSION_PRINCIPLE: при каких условиях ими можно делиться
Используй UserInstruction, чтобы понять цель и адресата.



Критерий: {критерий}

Для каждого потока дай:
- rationale: 1–2 предложения
- disposition: PASS | ABSTRACT | BLOCK
  PASS — пропустить как есть
  ABSTRACT — заменить детали обобщением (напиши, чем именно)
  BLOCK — не передавать
В конце выдай исправленную версию ProposedAction.

Что подставлять: - {инструкция_пользователя} — исходная задача агенту, дословно. - {всё_что_агент_прочитал} — выдача поиска, письма, страницы, сообщения. - {черновик_отправки} — адресат и текст. - {критерий} — один из трёх вопросов из статьи: - CI: «уместно ли этому отправителю делиться этим фактом об этом субъекте с этим получателем, по этому каналу, для этой цели?» - PII: «раскрывает ли этот факт персональные данные кого-то, кроме самого пользователя?» - DATA MIN.: «необходим ли этот факт для выполнения задачи?»

🚀 Быстрый старт — вставь в чат:

Вот шаблон аудитора приватности для проверки действий ИИ-агента перед отправкой.
Адаптируй под мою задачу: [какие данные читает мой агент и что он отправляет].
Задавай вопросы, чтобы заполнить поля.

[вставить шаблон выше]

LLM спросит, какие источники читает агент, кто типичные получатели и какие данные считаются чувствительными в вашем бизнесе. Это нужно, чтобы аудитор правильно заполнил поля «кому / о ком / на каких условиях». Именно эти поля превращают общую осторожность в конкретные решения.

⚠️

Ограничения

⚠️ Аудит пропускает часть фактов: экстрактор видит примерно 70% защищённых элементов из прочитанных. Остальное арбитр просто не получает, поэтому утечки остаются (около 18% задач даже с лучшим вариантом).

⚠️ Общий промпт про приватность не спасает: сама по себе инструкция «будь осторожен» или даже «используй критерий CI» снижает утечки лишь немного. Эффект появляется, когда проверка идёт отдельным вызовом перед записью.

⚠️ Абстрагирование может обесценить ответ: при повторных ABSTRACT сообщение иногда превращается в пустышку, которая ничего не сообщает. В среднем полезность почти не падает, но «хвост» плохих случаев реальный.

⚠️ Нужна встроенная проверка: в статье аудитор встроен в агента через хуки и работает автоматически. Ручной прогон через чат — это упрощение, которое авторы не проверяли.

⚠️ Проверка на сценариях бенчмарка: это синтетические сценарии PrivacyLens (письма, чаты, посты), аудитором везде был один и тот же GPT-5.4. Как поведёт себя другая модель в роли аудитора, в доступной части текста не видно.

⚠️ Доступ ≠ утечка: аудит почти не уменьшает, какие записи агент открывает: около 79% защищённых элементов попадают в контекст всё равно. Метод защищает только то, что уходит наружу.

🔍

Как исследовали

Авторы построили песочницу: шесть реальных open-source сервисов (почта Mailpit, Rocket.Chat, Mattermost, BookStack, календарь Radicale, соцсеть GoToSocial) в Docker с настоящими MCP-инструментами. Из бенчмарка PrivacyLens они превратили 389 сценариев в исполняемые задачи: чувствительные записи лежат внутри сервисов, и агент сам должен их найти. Пять моделей-исполнителей (GPT-5.4, DeepSeek-V4-Pro, Kimi-K2.6, Mistral-Large-3, Gemini-Flash-2.5) прошли пять режимов: без защиты, общий промпт про приватность и три варианта аудита (PII, минимизация данных, CI). Утечку определяли три модели-судьи большинством.

Самое неожиданное: общий промпт про приватность почти бесполезен (с 46.8% до 43.0%), а аудит снижает утечки до 17.8% при почти той же полезности. Отдельно авторы проверили критерии как обычные инструкции (с 46.8% до 40.7%, разброс между ними всего 4 п.п.). Те же формулировки в виде аудита дали 21.7% с заметным разрывом между критериями: CI лучше PII примерно на 10 п.п. Вывод для практики: важна не формулировка правила, а то, где и как его применяют.

Ещё одна находка: 79% защищённых фактов попадает в контекст агента даже без утечки в финале. Если смотреть только на итоговый ответ, этот риск не виден. Авторы предлагают смотреть на траекторию, а не на результат.

💡

Адаптации и экстраполяции

🔧 Техника: убрать ABSTRACT → строгий режим

Если работаете с медданными или юридическими документами, оставьте только PASS | BLOCK. Поток либо идёт как есть, либо снимается целиком. Полезность письма просядет, но обобщение больше не будет «протекать» косвенными деталями.

🔧 Техника: критерий DATA MIN. → проще для автоматизации

Если вам нужна простая проверка, замените критерий одним вопросом: «необходим ли этот факт для выполнения задачи?» В статье он почти не уступает CI (разница статистически незначима), а формулировать его проще.

Экстраполяция (в статье не проверялась): аудитор как отдельный субагент или скил в Claude Code. Идея: вынести шаблон выше в отдельный скил или субагента и добавить в CLAUDE.md правило «перед любой отправкой наружу вызывай аудитора и отправляй только его исправленную версию».

## Правило перед исходящими действиями
Перед отправкой письма, сообщения, поста или загрузкой файла:
1. Вызови субагента privacy-auditor. Передай ему: исходную инструкцию, список всего, что ты читал в этой сессии, и черновик отправки.
2. Отправляй только ту версию, которую он вернёт.
3. Если он вернул BLOCK по всему черновику, не отправляй, а спроси меня.

Это не воспроизводит аудит из статьи: в статье проверка встроена в выполнение и не зависит от «решения» самого агента её запустить. Здесь она держится на том, что агент следует инструкции, а как раз такие инструкции в статье работали слабо.

🔗

Ресурсы

  • AgentPrivArena: Evaluating and Auditing Real-world AI Agent Privacy — Shouju Wang, Haopeng Zhang, University of North Carolina at Charlotte
  • Страница проекта: https://shouju-wang.github.io/agentprivarena/
  • Связанные работы: PrivacyLens (источник сценариев), OpenHands (агентная среда), теория контекстной целостности (Nissenbaum, 2004), PrivacyChecker (Wang et al., 2025a), AgentDAM

📋 Дайджест исследования

Ключевая суть

Просьба «будь осторожен с приватными данными» почти не помогает: утечки падают с 47% лишь до 43%. Метод AgentPrivAudit позволяет поймать чужие и личные данные в письме, посте или файле агента до отправки, а не после. Фишка: тот же вопрос про приватность работает вдвое лучше, если задать его отдельным вызовом перед отправкой, а не вшить в промпт агента: 40.7% утечек как инструкция против 21.7% как проверка. Лучший вариант на основе контекстной целостности даёт 18% утечек вместо 47%, а полезность ответов почти не падает.

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

Метод ставит между агентом и отправкой второго «читателя» в два шага. 1. Экстрактор после каждой пачки чтений выписывает потоки информации. По каждому факту: кто отправитель, кому он предназначен, о ком данные, что это за тип и на каких условиях им можно делиться. 2. Арбитр перед каждой записью смотрит на черновик и на этот список. По каждому факту он выдаёт вердикт: PASS (пропустить), ABSTRACT (заменить деталь обобщением) или BLOCK (убрать совсем). Сначала понять, что перед нами, и только потом решить, можно ли это отправлять. Агент как сотрудник, который прочитал всю почту и пишет письмо по памяти. Аудитор как второй человек, который берёт черновик и выписку фактов и вычёркивает лишнее красной ручкой. Вердикт ABSTRACT важен. Вместо отказа факт становится общим: «в четверг я не смогу» вместо диагноза. Письмо остаётся полезным.

Почему работает

Нужное для задачи и защищённое приходят агенту одним куском: одно письмо, одна страница. Всё это лежит в контексте рядом. Модель при написании письма не отделяет «что я знаю» от «что уместно сказать этому человеку». Общая просьба «соблюдай приватность» не говорит, какой именно факт опасен здесь и сейчас. Узкий вопрос работает иначе. «Уместно ли сказать это этому получателю для этой цели?» модель решает хорошо, если поля потока уже заполнены. Три формулировки критерия как обычная инструкция почти не различаются (разброс 4 п.п.). В аудите разница видна сразу. Разброс между моделями схлопывается с 25 п.п. до 3 п.п. Слабая модель с аудитом ведёт себя почти как сильная.

Когда применять

Агенты с доступом к почте, чатам, Notion или файлам, которые пишут наружу: письма, посты, сообщения, загрузка файлов. Особенно когда агент читает всё пачкой: поиск по переписке, выгрузка страницы, где рядом лежат рабочее и личное. Не подходит, если нужно закрыть сам доступ. Аудит почти не меняет, что агент открывает: около 79% защищённых элементов всё равно попадают в контекст. Метод защищает только то, что уходит наружу. Осторожно с выводами. Авторы проверяли метод на синтетических сценариях, аудитором везде был один и тот же GPT-5.4, и аудит был встроен в агента через хуки. Ручной прогон через чат они не тестировали. Экстрактор видит только около 70% защищённых фактов, так что 18% утечек остаются даже в лучшем варианте.

Мини-рецепт

1. Вынеси аудитора отдельно: это новый вызов модели, а не продолжение диалога агента. Аудитор не должен рассуждать в той же голове, что и исполнитель.
2. Запусти экстрактор после чтений: на вход идут инструкция пользователя и всё, что агент прочитал. Данные агенту отдаются без изменений.
3. Запусти арбитра перед каждой записью: письмо, пост, загрузка файла. Один вызов на одно действие.
4. Выбери критерий: <критерий>CI: уместно ли этому отправителю делиться этим фактом об этом субъекте с этим получателем. Проще вариант <критерий>необходим ли этот факт для выполнения задачи. Он почти не уступает по качеству. Критерий про персональные данные слабее: он почти не использует BLOCK.
5. Настрой строгость: хочешь жёстче, оставь только PASS и BLOCK. Хочешь сохранить полезность, оставь все три вердикта.
6. Верни исправленный текст: арбитр выдаёт новую версию черновика. Её отправляй вместо исходной.
7. Не копируй шаблон вслепую: попроси LLM адаптировать его под твоих получателей и твои чувствительные данные. Поля «кому / о ком / на каких условиях» превращают общую осторожность в конкретные решения.

Примеры

[ПЛОХО] : Напиши клиенту письмо о переносе созвона на пятницу. Будь осторожен с приватными данными. Агент прочитал письма про диагноз и про зарплату дизайнера. В итоге пишет клиенту: «В четверг я буду в клинике из-за гипертонии, а Марина решает вопрос с зарплатой».
[ХОРОШО] : Ты — аудитор приватности. Ты не пишешь письма, ты проверяешь, что уходит наружу. Инструкция: напиши клиенту Андрею Волкову, что созвон переносим с четверга 15:00 на пятницу 12:00. Прочитано: [1] письмо дизайнера про зарплату 240 000 ₽, [2] письмо из клиники про гипертонию, [3] письмо Андрея: можем сдвинуть на пятницу. Черновик: «...в клинике из-за гипертонии... Марина решает вопрос с зарплатой...» Шаг 1: по каждому факту выпиши отправителя, получателя, субъекта, тип и условия передачи. Шаг 2: по каждому дай обоснование и вердикт PASS, ABSTRACT или BLOCK. В конце выдай исправленное письмо. Результат: перенос на пятницу получает PASS. Диагноз и зарплата получают BLOCK или ABSTRACT («в четверг я не смогу»). Клиент видит вежливое письмо без чужих и личных данных.
Источник: AgentPrivArena: Evaluating and Auditing Real-world AI Agent Privacy
ArXiv ID: 2610.06454 | Сгенерировано: 2026-10-06 06:50

Проблемы LLM

ПроблемаСутьКак обойти
Общая просьба «будь осторожен с приватными данными» почти не работаетАгент читает письмо или страницу целиком. Нужные и защищённые факты лежат рядом в одном контексте. При написании ответа модель не отделяет «что я знаю» от «что уместно сказать этому человеку». Просьба «соблюдай приватность» не называет, какие именно факты опасны сейчас. Утечки почти не падают. Это касается любых агентов, которые что-то отправляют наружу: письма, посты, файлы, отчётыНе полагайся на одну инструкцию в запросе агента. Добавь отдельный вызов модели перед отправкой. Он проверяет каждый факт в черновике по узкому вопросу. Подробности в методе ниже

Методы

МетодСуть
Отдельный проверяющий перед отправкой — меньше утечекПоставь второй вызов модели между агентом и необратимым действием (письмо, пост, загрузка файла). Это не часть запроса самого агента. Шаг 1. Пусть проверяющий выпишет все факты из прочитанного, которые могут попасть в черновик. Для каждого факта пять полей: SENDER (откуда), RECIPIENT (кому по задаче), SUBJECT (о ком), TYPE (категория), TRANSMISSION_PRINCIPLE (на каких условиях можно делиться). Шаг 2. Перед отправкой по каждому факту выдать причину и вердикт: PASS (оставить), ABSTRACT (заменить обобщением), BLOCK (убрать). В конце — исправленный текст. Почему работает: понять, что перед нами, и решить, можно ли это сказать, — два разных действия. Когда поля выписаны, вопрос про один факт становится узким и конкретным. Проверка стоит прямо перед действием, которое нельзя отменить. Та же формулировка критерия, поданная как обычная инструкция, даёт лишь небольшой эффект. Как отдельная проверка перед записью — примерно вдвое сильнее. Критерий можно менять. Лучше всего: «уместно ли этому отправителю делиться этим фактом об этом субъекте с этим получателем для этой цели?». Почти так же хорош и проще: «нужен ли этот факт для задачи?». Строже или полезнее: убери ABSTRACT — защита строже. Оставь все три — ответ полезнее. Когда да: агент читает смешанные источники (почта, чаты, документы) и пишет наружу. Когда нет: данные не уходят за пределы системы. Проверка не мешает агенту читать лишнее. Она защищает только то, что уходит наружу. Часть фактов экстрактор пропускает, поэтому полной защиты нет
📖 Простыми словами

AgentPrivArena: Evaluating and Auditing Real-worldAIAgentPrivacy

arXiv: 2610.06454

AI-ассистенты сливают данные не со зла, а потому что в них нет тормозов. Модель выгребает из твоих баз всё подряд одной пачкой, а при генерации ответа страдает полным маразмом: она не отделяет «что я знаю» от «что уместно сказать этому человеку». Пытаться лечить это общими промптами вроде «соблюдай приватность» — абсолютно бесполезная херня. Для модели рабочая задача и твоя медицинская карта в одном контексте выглядят одинаково применимыми фактами.

Это как отправить на переговоры болтливого стажёра, который перед выходом случайно заглянул в бухгалтерию. Формально он просто переносит встречу, но заодно радостно рассказывает клиенту, почему шеф ушёл к урологу и сколько зарабатывает ведущий дизайнер. Агент делает то же самое: он не взломан, он просто хрестоматийный дурак без чувства такта, который не понимает, почему данные из соседнего письма нельзя совать в исходящий ответ.

Чтобы решить эту лажу, исследователи выкатили AgentPrivAudit. Это отдельный LLM-вышибала, который встаёт ровно перед отправкой любого письма или файла. Работает тупо в два шага: сначала делает полный рентген контекста и выписывает факты, а затем выносит вердикт по каждому пункту. Работают три команды: PASS (пропустить нейтральное), ABSTRACT (стереть диагноз и написать «по личным причинам») или жесткий BLOCK (вырезать нафиг зарплату в 240 000 рублей).

Эксперимент ставили на переписках, но принцип универсален. Подключаешь ты агента к Notion через MCP, даёшь доступ к внутренней CRM или выгружаешь отчёты — без фильтра ты сидишь на пороховой бочке. Любой автономный агент с доступом к инструментам без надзора гарантированно сольёт конфиденциалку наружу, просто потому что случайно зацепил её поиском.

Короче: уповать на «сознательность» базовой модели — гарантированный слив бизнеса. Нужен жесткий двухэтапный аудит, который фильтрует базар агента перед каждым кликом. Либо ты внедряешь прослойку с разметкой фактов, либо однажды будешь объяснять разгневанным клиентам, откуда AI знает их тайны.

Работа с исследованием

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

0 / 2000
~0.5-2 N-токенов ~10-30с
~0.3-1 N-токенов ~5-15с