Newer
Older
AI_Lab_SCRUME_Co / skills / engineering / ai-data-perimeter / SKILL.md

name: ai-data-perimeter description: "Use when обезличивание, утечка в модель, 152-ФЗ, периметр." version: 1.0.0 author: AI_Lab_SCRUM Co license: MIT platforms: [linux, macos, windows] metadata: hermes: tags: [security, anonymization, 152-fz, privacy, ai-governance] category: engineering

related_skills: [docx, om-documentation-review, grounded-citations]

Периметр данных при работе с ИИ

When to Use

  • Разобрать папку или комплект материалов по безопасности ИИ — выжимка, каркас презентации, раздел регламента.
  • Проверить, что документ заказчика не уходит в модель необезличенным.
  • Ответить на «у нас это соблюдается?» — про организационный процесс или про агента и скилл.
  • Собрать регламент, перечень разрешённых сервисов, инструкцию по обезличиванию.
  • Решить, что можно отдать в облачную модель, а что только локально.

Исходная логика, на которой держится всё остальное: суду неважен канал (флешка, почта, чат-бот) — важен факт пересечения периметра; пересекло — отвечает компания. Поэтому вопрос не «какая модель безопаснее», а «какие данные в неё кладут».

Правило 0 — «у нас соблюдается» проверяется по файлам, не по памяти

Просьба подтвердить заявленную меру — это аудит, а не согласие. Проверяй два слоя сразу, в одном проходе:

Слой Что читать Признак, что меры нет
Организационный приказ, регламент, лист ознакомления, журнал применения всё лежит незаполненными шаблонами, ни одной записи
Технический profiles/<profile>/SOUL.md, skills/, hooks/, config.yaml правила в SOUL нет; нужный скилл не установлен; hooks/ пуст

Ответ «подтвердить нечем» без проверки технического слоя — ошибка: пользователь может иметь в виду агента и скилл, а не бумаги. И наоборот: установленный скилл не доказывает организационный процесс.

Проверять установленность, а не наличие в сборке: ls profiles/<p>/skills/ против dist/<сборка>/skills/. Скилл, лежащий только в сборке, в работе не участвует.

Обратное направление проверять так же: скилл, лежащий только в профиле (у разработчика), до получателей не доедет, и ссылка на него из SOUL.md сборки окажется битой. Правило, которое цитируется в SOUL.md, должно физически лежать в сборке — иначе порядок работы такой: сначала скилл в сборку, потом правило в SOUL.

Правило 1 — декларация в промпте ≠ контроль

Правило, записанное в SKILL.md или SOUL.md, срабатывает по триггеру в description и зависит от того, вспомнит ли модель применить его в нужный момент. Принуждение — это перехват исходящего запроса. Пока его нет, честная формулировка: «правило записано и инструментовано, механизма принуждения нет». Не называть это «соблюдается».

Перехват в Hermes делается плагином, а не каталогом hooks/. Пустой hooks/ (это наблюдатели) не доказывает, что принуждения не бывает — проверять надо зарегистрированные middleware: ctx.register_middleware("llm_request", fn) в плагине (hermes_cli/plugins.py), применяется к kwargs провайдера в agent/turn_api_request.py через apply_llm_request_middleware (hermes_cli/middleware.py). Точки: tool_request (до чтения файла), llm_request (до отправки), llm_execution (обёртка вызова, обратная подстановка). Устройство и порядок внедрения — references/hermes-intercept.md.

Правило 2 — агент сам является каналом утечки

Любое чтение файла инструментом (read_file, DOCX/PDF-парсер, OCR, vision_analyze) отправляет его в модель целиком, до всякой проверки. Порядок работы с документом заказчика:

  1. Решить, откуда берётся обезличенная копия: её даёт пользователь или агент делает копию и читает только её.
  2. Читать/разбирать только копию. Оригинал не открывать «чтобы посмотреть объект».
  3. Таблицу соответствия токенов и реальных значений не читать никогда — она и есть закрываемые данные.

Один канон процедуры, а не три редакции

Одна и та же процедура расползается по трём местам: файл anonymization.md в каталоге references/ скилла docx вместе со скриптом scan_open_pii.py, отдельный скилл ailab/anonymization-check и этот скилл. Три редакции одного правила разъезжаются и начинают противоречить друг другу.

Держать иерархию:

Место Роль
этот скилл (ai-data-perimeter) канон: правила периметра, аудит «соблюдается ли», порядок чтения документа, чек-лист и нормы в references/
файл anonymization.md в references/ скилла docx + scan_open_pii.py исполнение под каноном: техника правки DOCX-пакета и проверка полноты
отдельный скилл-обёртка того же правила либо тонкая ссылка на канон, либо убрать

Перед тем как писать правило в третий раз — искать, где оно уже сформулировано, и расширять существующее место. Решение «свести к ссылке или удалить дубль» принимает владелец, не агент: в плане работ оно остаётся развилкой.

Проверка полноты обезличивания

Скилл docx несёт процедуру (файл anonymization.md в его каталоге references/) и скрипт:

python skills/productivity/docx/scripts/scan_open_pii.py "<файл.docx>" --summary
# --header — готовая строка для шапки отчёта, --json — машинный вывод
  • Агент читает --summary (счётчики), человек — полный отчёт. Полный прогон печатает сами находки: наименование организации, фамилию подписанта, телефон, индекс — то есть ровно то, что прячут. Их попадание в контекст агента отправляет эти данные в модель и подрывает правило изнутри.
  • Признавать оба способа маркировки: [АДРЕС-003] и «________». Чекер, знающий один, на файле, размеченном другим способом, объявит «маркеров нет» и остановится.
  • Ноль находок = «шаблоны не сработали», не «документ чист». Заказчик, названный описательно, ни под один шаблон не попадает. Так и формулировать.
  • Сканируется весь пакет: тело, ячейки таблиц, все headerN/footerN.xml, docProps/core.xml, app.xml, картинки отдельно.
  • Разделять находки, которые обязан оценить человек: ресурсоснабжающие организации и сетевые операторы стоят в любом городском ТЗ и объект не идентифицируют; заказчик, управляющая организация, адрес, кадастровый номер — идентифицируют.

Питфоллы

  • grep -i не сворачивает регистр кириллицы в Windows-шелле: поиск «ооо» не найдёт «ООО», счётчик молча выйдет нулевым. Сворачивать регистр в Python (text.lower()), шаблоны писать под нужный регистр явно.
  • Содержимое ТЗ и договоров лежит в ячейках таблиц, а не в абзацах: проверка только по абзацам даёт пустой результат, который читается как «всё чисто».
  • Метаданные DOCX — главный пропускаемый канал: dc:creator и cp:lastModifiedBy часто содержат почту и полное имя автора, <Manager> в app.xml — ещё одну почту. В теле документа их не видно.
  • Колонтитулы — отдельная часть на каждую секцию: правка document.xml оставляет название компании на всех страницах.
  • Скриншоты: реквизиты и заголовки остаются по углам и в EXIF.
  • «Локальная модель = безопасно» неверно: без отключённого внешнего доступа и без HTTPS при раздаче по сети данные всё равно уходят или ходят открытым текстом.
  • Вторичный источник не равен факту: собранные в папку методички, карточки и посты канала — чужие материалы, они не доказывают, что процесс есть у нас. Цифры (штрафы, проценты утечек) перепроверять по действующей редакции нормы; нормы в методичке обычно отсутствуют вовсе.

Как оформляется результат

  • Сначала вывод, потом обоснование. Таблица вместо абзаца, строка вместо таблицы.
  • Организационные меры «под подпись» не предлагать. В этой компании директор и владелец такие бумаги не подписывают, поэтому регламент, приказ и лист ознакомления как основной механизм нереалистичны. Опора — на технический контроль (перехват, маска, журнал) и пилот на одной задаче; бумаги возвращать в план только если владелец сам о них попросит.
  • Слайд про собственный продукт — со статусом и остаточными рисками. В надзаголовке «релиз N, в разработке», внизу честная строка о том, чего механизм не делает. Слайд без этого обещает больше, чем есть, и разваливается на первом вопросе «а оно точно не уйдёт?».
  • В выжимке по папке: инвентарь (что за файлы и чьи они) → ядро правил → рабочие инструменты → нормы → статус «что проверено / что нет».
  • Раздел статуса — отдельной таблицей «что проверял → факт», без «проверено» без доказательства.
  • Полезный артефакт помимо текста: каркас презентации по разделам выжимки. Колоду по этим материалам собирать средствами скилла powerpoint (в нём тёмная брендовая тема и каркас сборки — файл templates/brand_deck_build.py внутри скилла powerpoint) — не рисовать слайды с нуля и не тащить светлую тему.

Справочник

  • references/perimeter-rules.md — светофор данных, четыре контура, чек-лист обезличивания, ответственность и сроки инцидентов, штрафы, минимальный пакет документов, дорожная карта внедрения.
  • templates/soul-perimeter-block.md — готовый блок «Периметр данных» для вставки в SOUL.md: то, что действует до первого чтения файла, со ссылкой на этот скилл как канон. Вставлять и в сборку, и в рабочий профиль.
  • references/hermes-intercept.md — как сделать принуждение на исходящем запросе: три точки middleware, policy.yaml с ролями по типам документов, режим «маска + журнал», порядок внедрения и остаточные риски.