3,583 papers
arXiv:2610.39532 81 29 окт. 2026 г. FREE

TG-CI (Task-Graph Contextual Integrity): проверка «можно ли отдать этот факт» не только следующему агенту, но и всей цепочке после него

КЛЮЧЕВАЯ СУТЬ
Привычная проверка «можно ли отдать факт следующему агенту» оставляет без защиты около двух третей нарушений, даже если вести журнал выдачи. Метод TG-CI позволяет защитить личные данные в цепочке агентов с памятью: факт не уходит туда, куда его видеть нельзя, даже через три передачи. Судья видит весь запланированный маршрут факта и журнал того, что каждый агент уже знает. Он режет цепочку на первой недопустимой передаче. Итог: нарушений на 86–94% меньше, точность ответов падает лишь на 4–6%. Фишка: безобидный факт опасен не для первого получателя, а для четвёртого, и локальная проверка этого не видит.
Адаптировать под запрос
⚡

TL;DR

TG-CI — способ защиты личных данных в системах из нескольких агентов с памятью. Перед тем как отдать агенту факт из памяти, отдельная модель-судья смотрит на всю запланированную цепочку (кто получит факт дальше) и на журнал того, что каждый получатель уже знает. Если где-то в цепочке передача недопустима, факт не выдаётся совсем или выдаётся только до этого места.

Привычная проверка смотрит только на текущую передачу, и у неё три слепые зоны. Факт может быть безобидным для первого агента, но уйти дальше к тому, кому его видеть нельзя. Два безобидных факта могут вместе раскрыть то, что скрывали. Третий случай — передача допустима «в одиночку», но не с учётом того, что получатель уже знает. В исследовании такая локальная проверка с журналом оставляла около двух третей нарушений базовой системы без защиты. Основная часть остаточных утечек — «по цепочке».

Метод работает в два режима. Full-Scope: факт выдаётся, только если допустима вся цепочка после получателя, иначе блок. Auto-Region: факт идёт по цепочке, пока передачи допустимы, и останавливается на первой недопустимой, а остальные агенты работают без него. В обоих режимах нарушений на 86–94% меньше, чем у локальной проверки с журналом, а точность ответов падает лишь на 4–6%.

🔬

Схема метода

ШАГ 0: Зафиксировать граф задачи: кто кому передаёт и какую подзадачу решает
ШАГ 1: Разложить ответ памяти на отдельные факты (субъект, тип, значение)
ШАГ 2: Для каждого факта составить цепочку: кому он уйдёт дальше
ШАГ 3: Судья проверяет каждую передачу в цепочке с учётом журнала раскрытия получателя
   ├─ Full-Scope: вся цепочка допустима → ВЫДАТЬ, иначе → БЛОК
   └─ Auto-Region: идти вперёд до первой недопустимой передачи → ВЫДАТЬ до границы
ШАГ 4: Ведение журнала: записывать, что реально ушло каждому получателю
ШАГ 5 (Auto-Region): на границе стоит шлюз: убирает защищённый факт из сообщений

Шаги 1–3 — запросы к судье (LLM). Шаг 5 в исследовании сделан кодом, но его можно заменить инструкцией агенту.

🚀

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

Задача: Вы автоматизируете сеть частных клиник (в духе «СМ-Клиника» или «Медси»). Агенты работают цепочкой: Агент-регистратор → Агент-расписание → Агент-напоминания (шлёт SMS и сообщения в Telegram) → Агент-страховой партнёр. В памяти лежит: «пациент К. записан к онкологу», «К. застрахован по ДМС в компании X», «телефон К.». Агент-напоминания подключён к внешнему сервису рассылки и считается самым рискованным: его могут скомпрометировать.

Промпт для судьи (режим Auto-Region):

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

<Граф_задачи>
Регистратор → Расписание → Напоминания → Страховой_партнёр
Подзадачи:
- Регистратор: оформить запись пациента
- Расписание: подобрать слот и врача
- Напоминания: отправить пациенту напоминание о визите
- Страховой_партнёр: подтвердить покрытие по ДМС


<Журнал_раскрытия>
- Расписание уже получило: ФИО пациента К., дату визита
- Напоминания уже получило: телефон К.
- Страховой_партнёр уже получил: номер полиса


<Факт>
Субъект: пациент К. | Тип: специальность врача | Значение: онколог
Источник: память. Первый получатель: Регистратор.


<Логика>
1. Для каждой передачи в цепочке, начиная с первой, проверь:
   - нужен ли этот факт получателю для его подзадачи?
   - не раскроет ли он вместе с тем, что получатель уже знает (журнал), то, что раскрывать нельзя?
2. Иди вперёд, пока передачи допустимы. Остановись на первой недопустимой.
3. Если недопустима самая первая передача — БЛОК.
4. Иначе — РЕЛИЗ с границей: до какого агента факт дойдёт и кому его нельзя передавать дальше.


<Формат_ответа>
Для каждой передачи: «получатель — допустимо/недопустимо — причина в одну строку».
Итог: РЕЛИЗ до {агент} / БЛОК.
Запрещено передавать дальше границы: {список}.

Результат: Модель пройдёт по цепочке передача за передачей и выдаст вердикт по каждой с короткой причиной. Вероятный итог: факт нужен Регистратору и Расписанию, а Напоминания получают его только в обобщённом виде или не получают совсем. Вместе с телефоном из журнала он уже раскрывал бы диагноз. В конце будет граница выдачи и список, куда факт передавать нельзя. Конкретные решения зависят от ваших правил: судья применяет то, что вы напишете в политике.

🧠

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

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

Сильная сторона LLM. Модель хорошо судит, уместна ли передача информации в контексте задачи: нужен ли факт для этой подзадачи, не раскрывает ли он лишнего вместе с уже известным. Это работа с текстом и смыслом, не с формальными метками «секретно / не секретно».

Как метод это использует. Судье дают то, чего ему не хватало: весь граф и журнал получателей. Он оценивает каждую передачу в цепочке и сводит решение к «допустима вся цепочка» (Full-Scope) или «допустима до такого-то агента» (Auto-Region). Модель по-прежнему отвечает на простой локальный вопрос, но задаёт его в нужных местах.

Рычаги управления: - Режим. Full-Scope строже: один «неудобный» получатель вдали блокирует факт, даже если ближний мог бы им воспользоваться. Auto-Region мягче: задача идёт дальше без факта. Для медицины и финансов берите Full-Scope, где важнее полезность — Auto-Region. - Состав журнала. Чем подробнее записано, что получил каждый агент, тем лучше ловится накопление. - Подзадачи агентов. Чем конкретнее описана подзадача получателя, тем точнее вердикт «нужно ли ему это». - Подозрительные агенты. Помечайте в графе, кто подключён к внешним сервисам: их стоит ставить в конец цепочки или в Full-Scope.

📋

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

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

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

<Граф_задачи>
{агенты_и_связи: A → B → C ...}
Подзадачи:
- {агент_1}: {подзадача_1}
- {агент_2}: {подзадача_2}
...
Особые агенты (внешние сервисы, повышенный риск): {список}


<Политика>
{правила: что нельзя раскрывать, какие комбинации фактов опасны}


<Журнал_раскрытия>
- {агент_1} уже получил: {список}
- {агент_2} уже получил: {список}
...


<Факт>
Субъект: {кто} | Тип: {что за данные} | Значение: {значение}
Первый получатель: {агент}


<Режим>{FULL_SCOPE или AUTO_REGION}

<Логика>
1. Составь цепочку: все агенты, до которых факт может дойти по графу после первого получателя.
2. Для каждой передачи в цепочке проверь:
   а) нужен ли факт получателю для его подзадачи?
   б) не раскроет ли он вместе с журналом получателя то, что запрещено политикой?
   в) не уйдёт ли он дальше к тому, кому нельзя?
3. Если режим FULL_SCOPE: выдай факт, только если допустима КАЖДАЯ передача в цепочке. Иначе — БЛОК.
4. Если режим AUTO_REGION: иди вперёд, пока передачи допустимы. Остановись на первой недопустимой.
   Если недопустима первая передача — БЛОК. Иначе РЕЛИЗ до границы.


<Формат_ответа>
По каждой передаче: «получатель — допустимо / недопустимо — причина в одну строку».
Итог: РЕЛИЗ (до {агент} / вся цепочка) или БЛОК.
Запрещено передавать дальше границы: {список агентов}.
Обновление журнала: {что записать каждому получателю}.

Что подставлять. {агенты_и_связи} — реальный план вашей автоматизации. {политика} — ваши правила (например, «диагноз и специальность врача знают только регистратор и врач»). {журнал} — то, что вы реально передали каждому агенту к этому моменту. Если журнала нет, начните с пустого и вносите после каждой выдачи.

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

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

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

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

⚠️

Ограничения

⚠️ Нужна инженерная сборка: в исследовании метод встроен в код (LangChain, память Mem0, шлюз сообщений, локальные модели для проверки). В чате вы получаете только судью-промпт. Чтобы он реально блокировал передачи, нужно вставить его в оркестрацию вашей автоматизации перед каждой выдачей из памяти.

⚠️ Дороже в токенах: судья работает почти в три раза больше по токенам, чем простая локальная проверка (около 133–145 тысяч против 44 тысяч за запуск). Auto-Region экономит примерно 8% к Full-Scope. Для задач без чувствительных данных это перебор.

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

⚠️ Скрытые каналы вне защиты: метод работает, только если вся передача идёт через контролируемые каналы (память и сообщения). Если агенты кодируют данные внутри допустимых текстов или есть обходной канал, судья этого не увидит.

⚠️ Остаётся небольшой процент утечек и потеря полезности: Full-Scope иногда блокирует то, что ближнему агенту можно было бы отдать. Точность ответов в основном режиме падает на несколько процентов.

⚠️ Синтетическая проверка: все данные в бенчмарке выдуманные, графы из четырёх агентов, всего пять вопросов на кейс. На реальных данных и длинных цепочках результат может быть слабее.

🔍

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

Авторы собрали бенчмарк MAPLE-Bench: 144 кейса в четырёх сценариях (здравоохранение, финансы, HR, быт). В каждом кейсе четыре агента, три формы графа (цепочка, дерево, ветвление) и один-два скомпрометированных агента. У каждого агента 30 выдуманных записей в памяти. Из них семь нужны для ответов на пять вопросов, остальные 23 — отвлекающий шум, как в реальной памяти. Для каждой записи заранее разметили, кому её можно, а кому нельзя видеть.

Сравнили пять вариантов: без защиты; локальная проверка с журналом; проверка каждой передачи по мере выполнения; и два режима TG-CI. Среднее число неразрешённых раскрытий: без защиты 15,84, локальная проверка с журналом 10,47, проверка «по ходу» 6,11, Auto-Region 1,49, Full-Scope 0,62. Вывод сильнее всего удивляет в средней строке: даже проверка каждой передачи по мере выполнения оставляет много утечек, потому что она замечает проблему уже после того, как факт ушёл. Главное преимущество TG-CI — именно в утечках «по цепочке».

Основные результаты получены на связке «агенты на Claude Haiku 4.5, судья на GPT-5.6 Luna», остальные комбинации вынесены в приложение. Данные в статье обрезаны на сравнении режимов, поэтому детали про стоимость и разницу между режимами известны не полностью.

💡

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

🔧 Техника: добавить «журнал раскрытия» как отдельный блок → ловить накопление

Если ваша система хранит всё в одном чате или в одной памяти, заведите явный блок <Журнал_раскрытия> и обновляйте его после каждой выдачи:

<Журнал_раскрытия>
- Агент_напоминания получил: телефон К. (шаг 3)
- Агент_напоминания получил: дата визита (шаг 5)
→ Проверь: телефон + дата + тип клиники = раскрытие диагноза?

Явная запись «что уже ушло» помогает судье заметить опасную комбинацию, а не оценивать каждый факт по отдельности.

Экстраполяция: правило в инструкции для субагентов (CLAUDE.md / AGENTS.md)

Авторы не проверяли это на агентных инструментах, это перенос идеи:

## Передача данных субагентам
Перед делегированием подзадачи:
1. Выпиши, какие данные пользователя нужны субагенту именно для этой подзадачи.
2. Проверь, кому субагент передаст результат дальше. Если в цепочке есть внешний сервис
   (отправка писем, веб-запросы, сторонние API) — не передавай персональные данные,
   которые ему не нужны.
3. Передавай минимум. Если сомневаешься — спроси пользователя.

Это упрощённая версия Auto-Region: остановись на границе, где начинается внешний или рискованный получатель.

🔗

Ресурсы

  • Judging Before Propagation: Task-Graph Contextual Integrity for Multi-Agent Privacy (препринт).
  • Авторы: Hengyu Wu, Blaise Delattre, Yang Cao — Institute of Science Tokyo.
  • Бенчмарк: MAPLE-Bench (Multi-Agent Privacy Leakage Evaluation Benchmark).
  • Опорные работы: теория контекстной целостности (Nissenbaum, 2004; Barth et al., 2006); AgentSCOPE; AirGapAgent; AgentLeak; The Sum Leaks More Than Its Parts.

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

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

Привычная проверка «можно ли отдать факт следующему агенту» оставляет без защиты около двух третей нарушений, даже если вести журнал выдачи. Метод TG-CI позволяет защитить личные данные в цепочке агентов с памятью: факт не уходит туда, куда его видеть нельзя, даже через три передачи. Судья видит весь запланированный маршрут факта и журнал того, что каждый агент уже знает. Он режет цепочку на первой недопустимой передаче. Итог: нарушений на 86–94% меньше, точность ответов падает лишь на 4–6%. Фишка: безобидный факт опасен не для первого получателя, а для четвёртого, и локальная проверка этого не видит.

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

Ты не проверяешь одну передачу. Ты проверяешь всю цепочку после получателя, и режима два. Full-Scope: факт выдаётся, только если допустима каждая передача по маршруту. Иначе блок. Auto-Region: факт идёт вперёд, пока передачи допустимы. На первой недопустимой он останавливается, а остальные агенты работают без него. Решение на первом шаге определяет судьбу факта на всех следующих. Раньше это замечали, когда факт уже ушёл. Это как охранник, который проверяет пропуск у первой двери, не зная, что за пятой дверью сидит чужой. На границе стоит шлюз: он вырезает защищённый факт из сообщений. В исследовании это сделано кодом, но можно заменить инструкцией агенту.

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

У локальной проверки три слепые зоны. Первая: факт безобиден для соседа, но уходит дальше к тому, кому нельзя. Вторая: два безобидных факта вместе раскрывают секрет. Третья: передача допустима сама по себе, но не с учётом того, что получатель уже знает. Журнал закрывает только накопление. Основная часть остаточных утечек у такой защиты идёт «по цепочке». LLM хорошо судит, уместна ли передача в контексте задачи: нужен ли факт этой подзадаче и не раскроет ли он лишнего вместе с уже известным. Это работа со смыслом, а не с метками «секретно / не секретно». Модель отвечает на тот же простой вопрос, что и раньше. Просто теперь ей дали то, чего не хватало: весь маршрут и память каждого получателя.

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

Автоматизация с несколькими агентами и памятью о людях → медицина, финансы, клиентские данные, особенно когда один из агентов подключён к внешней рассылке или стороннему сервису. Для медицины и финансов берите Full-Scope. Если важнее, чтобы задача дошла до конца, берите Auto-Region. НЕ подходит, если данных чувствительных нет: судья тратит почти втрое больше токенов (133–145 тысяч против 44 тысяч за запуск), это перебор. Не подходит и тогда, когда агенты на ходу меняют маршрут: цепочка в проверке устареет. Наконец, судья не видит данных, которые агенты прячут внутри допустимых текстов. Чтобы он реально блокировал передачи, его нужно встроить в код, который управляет агентами. В одном чате защиты не будет.

Мини-рецепт

1. Нарисуй маршрут: кто кому передаёт данные и какую подзадачу решает каждый агент. Чем конкретнее подзадача, тем точнее вердикт «а нужно ли ему это».
2. Отметь рискованных: пометь агентов, которые подключены к внешним сервисам. Ставь их в конец цепочки или включай для них Full-Scope.
3. Напиши политику: что нельзя раскрывать и какие сочетания фактов опасны. Судья применяет только то, что ты написал.
4. Заведи журнал: пустой на старте. После каждой выдачи записывай, что именно ушло каждому получателю.
5. Разбей ответ памяти на факты: субъект, тип, значение. Проверяй каждый факт отдельно, не пачкой.
6. Вставь судью перед выдачей: дай ему шаблон: граф, политика, журнал, факт, режим. Требуй вердикт по каждой передаче и границу выдачи.
7. Поставь шлюз на границе: код или инструкция агенту, которая убирает защищённый факт из сообщений дальше границы.

Примеры

[ПЛОХО] : Можно ли передать агенту-напоминаниям, что пациент К. записан к онкологу?
[ХОРОШО] : Ты — судья приватности. Маршрут: Регистратор → Расписание → Напоминания → Страховой_партнёр. Журнал: Напоминания уже получили телефон К. Факт: пациент К., специальность врача — онколог. Первый получатель: Регистратор. Режим: AUTO_REGION. Проверь каждую передачу по цепочке: нужен ли факт получателю и что он раскроет вместе с журналом. Ответь: «получатель — допустимо/недопустимо — причина». Итог: РЕЛИЗ до {агент} или БЛОК. Запрещено передавать дальше границы: {список}. В первом случае судья видит только одну передачу и пропускает факт. Во втором он замечает, что телефон плюс «онколог» у внешней рассылки раскрывают диагноз, и останавливает факт до неё.
Источник: Judging Before Propagation: Task-Graph Contextual Integrity for Multi-Agent Privacy
ArXiv ID: 2610.39532 | Сгенерировано: 2026-10-30 17:20

Проблемы LLM

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

Методы

МетодСуть
Судья по всей цепочке с журналом — закрывает утечки вперёд и накоплениеЧто делать. Перед выдачей факта из памяти запусти отдельный запрос-судью. Дай ему четыре блока: <Граф_задачи> (агенты, связи, подзадача каждого), <Политика> (что нельзя раскрывать, какие сочетания фактов опасны), <Журнал_раскрытия> (что уже получил каждый агент), <Факт>. Попроси вердикт по каждой передаче: «получатель — допустимо/недопустимо — причина в одну строку». После выдачи обнови журнал. Два режима. «Вся цепочка»: факт выдаётся, только если допустима каждая передача, иначе блок. «До границы»: факт идёт вперёд, пока передачи допустимы. На первой недопустимой он останавливается, дальше агенты работают без него. Если недопустима первая передача, это блок. Почему работает. Решение на первом шаге определяет судьбу факта на всех следующих. Судья видит эти шаги заранее. Журнал показывает, что получатель уже знает, поэтому ловится накопление. Модель по-прежнему решает простой локальный вопрос, но задаёт его в каждом нужном месте. Как выбрать режим. Медицина, финансы: «вся цепочка», она строже. Важна полезность: «до границы», задача идёт дальше без факта. Агентов с выходом во внешние сервисы помечай в графе и ставь ближе к концу цепочки. Когда нет. Данных без чувствительности нет: судья примерно втрое дороже по токенам. Маршрут агентов меняется на ходу: цепочка устареет. Агенты могут прятать данные внутри допустимых текстов: судья этого не увидит. Важно: чтобы блок реально работал, вставь судью в код оркестрации перед каждой выдачей из памяти. Одного чата мало.
📖 Простыми словами

Judging Before Propagation: Task-Graph Contextual Integrity for Multi-Agent Privacy

arXiv: 2610.39532

Когда несколько AI-агентов передают данные по цепочке, стандартная безопасность летит к чертям. Системы обычно проверяют только следующий шаг: можно ли отдать факт агенту номер один? Тот забирает инфу, а через три шага пересылает её во внешний сервис. Локальная проверка слепа к финалу, поэтому мультиагентные системы стабильно сливают приватность.

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

Что реально решает проблему — метод TG-CI (Task-Graph Contextual Integrity). Перед выдачей факта из памяти отдельный AI-судья смотрит не на соседа, а на весь граф передачи данных. Он чекает будущий маршрут, сверяет журнал раскрытия (что агент уже успел узнать раньше) и блокирует факт на старте, если хоть где-то на пути маячит риск утечки.

Тестировали на клиниках — где бот-регистратор рисковал слить диагноз пациента через SMS-шлюз, но принцип универсален. Логика работает в любых связках: CRM, саппорт, бухгалтерские боты или парсеры. Везде, где агенты делятся памятью, одно дырявое звено компрометирует всю базу.

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

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

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

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