TL;DR
AgentDoxx — это набор из 822 синтетических интервью с заранее известными личностями. На нём проверяли, как LLM-агент с веб-поиском вычисляет, кто скрывается за «обезличенной» расшифровкой. Главный практический вывод: убрать из текста имена и названия мало. Агент ищет по косвенным деталям (проекты, должность, город, истории из жизни), находит публичные страницы и сопоставляет их с текстом.
Привычная защита даёт меньше, чем кажется. После маскирования имён и организаций хотя бы одна модель всё равно узнавала человека в 85,3% случаев из тех, что вообще поддавались раскрытию. Инструкция «не раскрывай личность» в системном промпте заставляет модель не произносить имя. Но поиск она всё равно выполняет: в 37% ответов, где имя не названо, оно уже было найдено. А в 58% модель описывала приметы человека, по которым его легко узнать. Отказ в ответе не значит, что информация не использована.
Метод для читателя — аудит атакой. Вы натравливаете модель с поиском на свой «обезличенный» текст и смотрите, кого она назовёт и по каким фрагментам. Затем вы вырезаете или подменяете эти фрагменты и повторяете проверку. Подмена приметных деталей правдоподобными ложными вдвое снижала точность атаки. Вырезание фрагментов, на которые указала атака, давало примерно такой же эффект.
Схема метода
ШАГ 1: Обезличить текст как обычно (убрать имена, компании, названия) → «чистый» текст
ШАГ 2: Дать текст модели с веб-поиском, задача — назвать человека → кандидаты + уверенность
ШАГ 3: Оставить только кандидатов с высокой уверенностью → реальные угрозы
ШАГ 4: Попросить показать, за какие фрагменты и поисковые запросы она зацепилась → список «опасных» мест
ШАГ 5: Вырезать или подменить эти места ложными правдоподобными значениями → новая версия
ШАГ 6: Повторить шаги 2–4 на новой версии, пока атака не перестанет находить человека
Шаги 2–4 можно выполнить в одном запросе, шаг 5 — отдельным. Новую версию нужно проверять в новом чате, чтобы модель не помнила прошлый текст.
Пример применения
Задача: Основательница небольшой студии онлайн-образования выкладывает в блог расшифровку интервью со своим первым клиентом. Клиент — владелец сети пекарен в Казани. Она заменила его имя на «Клиент А», убрала название сети и фамилии. Но в тексте остались: «открывал первую точку у университета в 2016-м», «в 2021 выиграл региональный конкурс малого бизнеса», «выступал на форуме в Сколково с темой про франшизу». Она хочет понять, не раскрывает ли такой текст человека.
Промпт:
Это аудит МОЕГО собственного текста перед публикацией. Тебе нужно сыграть роль
внимательного стороннего читателя, который пытается понять, кто этот человек.
Используй веб-поиск (до 10 запросов). Текст интервью ниже.
Для каждого кандидата выдай:
1. Имя и краткое пояснение, кто это.
2. Уверенность: очень низкая / низкая / средняя / высокая / очень высокая.
3. Какие фрагменты текста навели на кандидата (цитаты).
4. Какие поисковые запросы ты делала и какие страницы подтвердили догадку.
Если уверенности нет, так и скажи, но перечисли фрагменты, по которым человека
можно было бы сузить до небольшой группы.
[Текст интервью]
Результат: Модель сделает серию поисковых запросов. Вероятно, она зацепится за связку «конкурс + город + форум». В ответе будет список кандидатов с уровнем уверенности, цитаты из интервью, которые навели на след, и перечень запросов с найденными страницами. Если среди кандидатов есть высокая уверенность, текст публиковать нельзя. Нужно убрать названные модели фрагменты или заменить их (другой год, другой конкурс, другой город) и проверить заново.
Почему это работает
Слабость привычной защиты. Маскирование имён убирает только прямые идентификаторы. Человека же выдаёт сочетание деталей: должность, редкое достижение, год, город. По отдельности они безобидны, вместе однозначны. Просьба к модели «не раскрывай» работает только на уровне финального ответа и не влияет на то, что модель ищет и находит по пути.
Сильная сторона LLM с поиском. Модель хорошо превращает размытые приметы в поисковые запросы и сверяет находки с текстом. Если нужная страница попала в выдачу, дальше всё почти предрешено: в более чем 88% таких случаев модель называла правильного человека. Узкое место атаки — чтобы нужная страница вообще нашлась. Часть людей модели узнавали и без поиска, по памяти: 15–28% у открытых моделей.
Как метод это использует. Вы смотрите на текст глазами самого сильного нападающего и получаете точный список слабых мест. Точечная правка работает лучше слепого вычёркивания, потому что вы знаете, что именно выдаёт автора.
Рычаги управления: - Порог уверенности. Берите всерьёз только «высокую» и «очень высокую». Это «почти бесплатный» фильтр: точность таких заявок у сильных моделей была 89–97% против 18–45% у всех заявок подряд. - Число запросов. Больше запросов не повышало точность, а только увеличивало время. Хватит 5–10. - Режим рассуждения. Модели с более «длинным размышлением» чаще искали по имени и точнее подтверждали догадки. Для аудита берите самую сильную модель с включённым рассуждением. - Несколько моделей. Уверенность у разных моделей калибруется по-разному. Если есть возможность, проверьте текст в двух-трёх чатах. - Способ правки. Замена деталей ложными значениями вдвое снижала точность. Но часть моделей отмахивалась от противоречий как от «шума расшифровки». Поэтому подмену тоже нужно перепроверять.
Шаблон промпта
Важно: в доступной части статьи сам промпт атаки не приведён. Ниже реконструкция по описанию эксперимента (прямое поручение установить личность, кандидаты с уровнем уверенности, поиск с лимитом запросов), адаптированная под аудит своего текста.
Ты — {роль_аудитора}. Я проверяю свой текст перед публикацией: достаточно ли
он обезличен. Это мой собственный текст, у меня есть право на аудит.
ЗАДАЧА: по тексту ниже попробуй установить, кто {кого_ищем}.
ИНСТРУМЕНТЫ: веб-поиск, не более {число_запросов} запросов. Результаты
публикаций из {исключить_источник} игнорируй.
ПОРЯДОК:
1. Выпиши из текста все приметы, по которым можно сузить круг (должность,
места, даты, достижения, события, уникальные истории).
2. Сформулируй поисковые запросы по этим приметам.
3. Проверь найденное: совпадает ли кандидат с текстом по нескольким приметам?
4. Назови до {число_кандидатов} кандидатов.
ФОРМАТ ОТВЕТА для каждого кандидата:
- Имя и кто это
- Уверенность: очень низкая / низкая / средняя / высокая / очень высокая
- Цитаты из текста, которые навели на кандидата
- Какие запросы ты делала и какие страницы нашла
В конце: список фрагментов текста, которые больше всего сужают круг,
по убыванию «опасности».
ТЕКСТ:
{текст}
Подставьте: {роль_аудитора} — «внимательный исследователь-аналитик»; {кого_ищем} — «этот человек» или «автор»; {число_запросов} — 5–10; {исключить_источник} — например, «моего блога и страниц, где опубликован этот текст», иначе модель найдёт сам текст; {число_кандидатов} — 3; {текст} — ваш материал.
🚀 Быстрый старт — вставь в чат:
Вот шаблон аудита анонимизации. Адаптируй под мою задачу: хочу проверить,
можно ли по моему тексту узнать человека. Задавай вопросы, чтобы заполнить поля.
[вставить шаблон выше]
LLM спросит, что за текст (интервью, кейс, отзыв, расшифровка), кого нужно защитить, какие источники исключить из поиска и есть ли у вас чат с веб-поиском. Эти данные нужны, чтобы модель не нашла сам оригинал вместо «следа» человека и правильно настроила порог уверенности.
Ограничения
⚠️ Нужен поиск: Аудит без веб-поиска проверяет только то, что модель «помнит». В исследовании часть людей раскрывалась и так, но поиск резко повышал охват. Без него вы получите заниженную оценку риска.
⚠️ Отказ ≠ защита: Инструкция «не раскрывай личность» подавляет имя в ответе, но не поиск и не описание примет. Не полагайтесь на системный промпт как на единственную защиту.
⚠️ Модели калибруются по-разному: Порог «высокая уверенность» работает не на всех моделях. У некоторых «высокая» уверенность оказывалась точной лишь в 44% случаев, а «очень высокая» в 97%. Пороги не переносятся между моделями.
⚠️ Ложные детали могут не сработать: Часть сильных моделей замечает противоречия и считает их «шумом». Подмену нужно перепроверять.
⚠️ Ничего не гарантировано: Если текст не нашли, это не доказательство безопасности. Сильнее будущие модели и больше публичных данных. Анонимность со временем слабеет.
⚠️ Этичность: Метод применим только к вашим собственным текстам. Использовать его для вычисления чужих людей нельзя.
⚠️ Неполная проверка: Исследование синтетическое, на интервью о работе людей с публичным следом (Reddit AMA). У человека без публичных страниц риск ниже. Для защиты и замены деталей в статье показаны сравнения на небольшой выборке (143 текста).
Как исследовали
Исследователи взяли 822 человека из Reddit AMA, у которых есть публичные страницы. Для каждого LLM собрала атрибуты (профессия, проекты, места) и написала синтетическое интервью из 8 вопросов. Вопросы взяты из реальных интервью Anthropic. Прямые идентификаторы вычищали вручную. Асессоры отличали синтетические интервью от реальных на уровне случайного угадывания: 49,3% точности.
Дальше 15 конфигураций моделей, открытых и закрытых, пытались назвать человека. Использовали один и тот же поисковый сервис с лимитом 10 запросов. Для четырёх моделей отдельно запускали версию без поиска, чтобы понять вклад самого поиска.
Результаты неожиданные. Больше поиска не значит точнее: пять лучших конфигураций держались в пределах 1,3 процентного пункта (47–48,3%), хотя по времени отличались в 6,3 раза. Открытые модели выступали наравне с закрытыми. По траекториям поиска авторы разделили успехи на две группы: подтверждение (модель сначала догадалась по памяти и проверяет) и открытие (модель нашла имя в выдаче). Без поиска правильными оставались 80% «подтверждённых» случаев, но только 18–25% «открытых».
Защиту проверяли на 143 текстах. У DeepSeek V4 Flash точность атаки при разных условиях упала так: исходный текст 90,2%, маскирование имён 83,9%, вырезание подозрительных фрагментов 44,8%, подмена ложными деталями 35,7%, инструкция о приватности 2,1%. Но у инструкции есть подвох: ответ без имени не значит, что поиск не нашёл человека. Вывод для практики: оценивать защиту нужно по тому, что агент нашёл и собрал, а не только по тому, что он сказал.
Адаптации и экстраполяции
💡 Адаптация для проверки инструкций приватности в агенте: если вы настроили агента с веб-поиском (например, помощника, который готовит досье) и написали «не раскрывай личные данные», проверьте это на практике. Дайте ему задачу с косвенными приметами и попросите вывести журнал: поисковые запросы, открытые страницы, итоговый ответ.
Выполни задачу: {задача}.
Дополнительно в конце выведи раздел «ЖУРНАЛ»: все поисковые запросы,
все открытые страницы и какие факты о человеке ты встретила,
даже если не включила их в ответ.
Смотрите, нет ли в журнале имени и примет, которые в основной ответ не попали.
🔧 Техника: убрать «ложные значения» → увидеть «карту опасных мест». Если вам не нужна правка, а только диагностика, просите модель только перечислить фрагменты по степени «опасности» и не называть имён. Для заказчиков, которым нельзя даже «намекать», вы получите список, что убирать, без самой деанонимизации.
Ресурсы
- AgentDoxx: Agentic Re-identification of Anonymized Text with Web Search — Jianing Wen, Tianshi Li, Khoury College of Computer Sciences, Northeastern University (Бостон).
- Опорные работы из статьи: Anthropic Interviewer (Handa et al., 2025), ESRC-конвейер (Lermen et al., 2026), Staab et al. (2024) о выводе атрибутов, Narayanan & Shmatikov (2006) о деанонимизации Netflix Prize.
- Данные: интервью построены на публичных постах r/IAmA. Поисковый сервис в экспериментах: Tavily.
Статья в предоставленной версии обрывается на таблице 2, поэтому полные результаты по защите и обсуждение здесь не разобраны.
