Newer
Older
AI_Lab_SCRUME_Co / skills / ailab / anonymization-check / SKILL.md

name: anonymization-check description: "Use when документ заказчика уходит во внешнюю модель. Проверка полноты обезличивания: что закрыто, а что осталось открытым." version: 1.0.0 author: AI_Lab_SCRUM Co license: MIT platforms: [linux, macos, windows] metadata: hermes: tags: [anonymization, privacy, documents, pii, docx] category: ailab

related_skills: [docx]

Правило: ни один документ заказчика не уходит в модель, пока не обезличен. Обезличивание делает человек; этот скилл — контрольный шаг перед загрузкой, он отвечает на вопрос, что осталось открытым.

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

1. Назначение

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

Обезличивание делают люди, и оно бывает неполным. В разобранном ТЗ закрыты адрес, кадастровый номер и топонимы — а наименование заказчика, управляющей организации, фамилия подписанта и номер ГПЗУ остались открытыми. Никто этого не скрывал: просто закрыли то, о чём подумали.

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

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

Применять: документ заказчика (ТЗ, договор, форма КП, переписка) перед загрузкой во внешнюю модель или перед отчётом, который увидят за пределами отдела. Проверка идёт до предметного разбора — она стоит минуты и не требует чтения документа целиком.

Не применять для самого обезличивания: скилл проверяет, а не закрывает. Заменять реальные значения токенами — работа человека, у него есть таблица соответствий, которую агент не читает.

3. Входные данные и их грабли

Что Формат Роль
Обезличенная копия документа DOCX, TXT проверяемый

В ТЗ содержимое лежит в ячейках таблиц, а не в абзацах. Проверка только по абзацам даёт пустой результат и читается как «всё чисто». Скрипт разбирает и абзацы, и таблицы; если делаешь проверку иначе — делай так же.

grep -i в этом окружении не сворачивает регистр кириллицы. Поиск grep -i "ооо" не найдёт «ООО», и счётчик молча выйдет нулевым. Поэтому шаблоны написаны явно под нужный регистр, а регистронезависимый поиск — только питоном по text.lower().

Отсутствие находок — не доказательство. Шаблоны находят то, что в них описано: организационные формы, инициалы, кадастровые номера, номера ГПЗУ, адреса. Заказчик, названный описательно («Инвестор проекта в районе станции»), под шаблон не попадёт. Ноль находок означает «шаблоны не сработали».

4. Источник правды

Эталона у этой работы нет: проверяется сам документ. Источник правды — текст обезличенной копии, и только он.

Таблица соответствия токенов и реальных значений не читается никогда: ни для проверки, ни для «уточнить, что за объект». Само наличие такой таблицы рядом не даёт права её открыть.

5. Процедура

  1. Убедись, что работаешь с копией, а не с оригиналом. Если токенов обезличивания в документе нет вообще — это, скорее всего, оригинал. Останови работу и скажи об этом.
  2. Прогони шаблоны: python <скилл>/scripts/scan_open_pii.py "<файл.docx>". Скрипт печатает, что закрыто токенами (сколько и каких видов) и что осталось открытым, по категориям, с самими находками.
  3. Просмотри найденное глазами. Не всякая организация — утечка: «ГБУ «Мосгоргеотрест»» и «АО «Мосводоканал»» это ресурсоснабжающие организации, они в любом ТЗ Москвы и объект не идентифицируют. А «ООО «Мангазея»» и «ООО «МД Проект III»» — заказчик и управляющая организация, по ним объект находится поиском за минуту. Разделять эти два случая — работа человека или агента, а не шаблона.
  4. Пройдись по тому, что шаблоны не ловят: описательные упоминания объекта, узнаваемые характеристики («единственный в районе 50-этажный»), названия смежных проектов, ссылки на переписку.
  5. Сформулируй строку для шапки отчёта: что закрыто токенами, что осталось открытым и откуда не берутся цитаты.

Самое чувствительное в этих документах — название объекта и его адрес (заказчик в ТЗ обычно прямо не назван). Если что-то идентифицирует объект или заказчика и токеном не закрыто — не переноси это в отчёт дословно и скажи пользователю.

6. Выходные данные

Строка (или короткий блок) для шапки отчёта по документу:

Обезличивание: закрыто токенами — адрес, кадастровый номер, топонимы (26 замен).
Открыто: наименование заказчика и управляющей организации, фамилия подписанта,
номер ГПЗУ. Цитаты не берутся из подписного блока и пункта «Заказчик».

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

7. Запреты

  • Не читать таблицу соответствий токенов и не пересылать её.
  • Не читать полный отчёт со значениями. Находки — это и есть закрываемые данные, поэтому их попадание в контекст агента означает отправку в модель ровно того, что мы прячем, — правило подрывается изнутри. Агент работает по --summary (счётчики без значений); полный отчёт со значениями смотрит человек. Проверено на образце: полный прогон печатает наименование организации, фамилию подписанта, телефон и индекс — то есть те самые данные.
  • Не угадывать, что стоит за токеном. [АДРЕС-003] — обычный текст, переноси как есть.
  • Не цитировать подписной блок и пункт «Заказчик».
  • Не выносить открытые находки в документы, которые уйдут наружу: назвать факт в шапке — да, перечислять реальные наименования в отчёте заказчику — нет.
  • Не докладывать «документ обезличен» по результату одного прогона шаблонов. Правильная формулировка: «шаблоны нашли столько-то, вот что осталось открытым».

8. Приёмка

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

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