Files
drhider/History/2026-07-12-sonnet-query-v2.md

4.6 KiB
Raw Permalink Blame History

Запрос к Соннету — анализ результатов DrHider v3 (2026-07-12)

Контекст

DrHider v3 — обфускация документов через LLM + Markdown. Результаты уже есть. Покажи Соннету реальный mapping.csv и фрагмент обфусцированного .md.

Промпт для Соннета

Вот текущий LLM-промпт в scanner.py:

You are a PII detector. Find ALL sensitive or private information in the text below.

Return a JSON array. Each item must have:
  - "type": short snake_case label describing the entity
    (e.g. person_name, phone, email, address, inn, company, passport,
     contract_number, employee_id, bank_account — WHATEVER you see)
  - "value": the EXACT string from the text (copy verbatim)

Rules:
- Copy value VERBATIM — same spaces, punctuation, case as in text
- If same value appears multiple times — include only once
- Invent the type label yourself based on what you see
- Return ONLY the JSON array, no other text, no markdown wrapping

Результат mapping.csv (первые 10 строк):

тип_данных,оригинал,замена
text,"""****XXX****001****""","""****IPD****084****"""
text,"""НУБЕС""","""ФИОЩЦ"""
phone,+7 (495) 789-41-35,+7 (343) 986-75-93
email,info@nubes.ru,bxkuno@company.local
company,"ЗАО ""****XXX****001****""",ООО «Спектр»
company,"ЗАО ""XXX001""",ЗАО «Меридиан»
inn_ul,ИНН 9706005293,ИНН 9325731296
text,Исполнителем Заказчику Сторонами,Морозов М.П.
kpp,КПП 772401001,КПП 051543039

Фрагмент обфусцированного .md:

**ООО «Спектр»** именуемое в дальнейшем "Заказчик", в лице Генерального директора ФИО,
действующего на основании Устава, и **ООО **"**НУБЕС**"**, именуемое в дальнейшем
"Исполнитель", в лице Генерального директора Степанов Н.М.

Проблемы

  1. Контекстная роль Исполнителя — сервис должен быть УНИВЕРСАЛЬНЫМ, без хардкода конкретных названий. LLM должна из контекста понимать: «вот эта компания — Исполнитель (сторона договора, оказывающая услуги), её НЕ заменяем». Как научить LLM этому без указания конкретных имён?
  2. Тип "text" для многих сущностей — LLM не всегда правильно определяет тип (например, "Исполнителем Заказчику Сторонами" — это не ПДн, а просто текст договора)
  3. Regex находит структурированное (ИНН, телефон), LLM — остальное — есть дублирование

Вопросы

  1. Как научить LLM определять Исполнителя из контекста договора (без хардкода имён) и НЕ заменять его данные?
  2. Как заставить LLM точнее определять тип сущности (не "text" для всего подряд)?
  3. Нужно ли добавить в промпт примеры того что НЕ является ПДн (юридические термины, роли сторон)?
  4. Стоит ли передавать LLM уже найденное regex'ом чтобы избежать дублирования?
  5. Правильно ли что промпт на английском, а документы на русском?

Текущий промпт (полностью)

You are a PII (Personally Identifiable Information) detector.
Find ALL sensitive or private information in the text below.

Return a JSON array. Each item must have:
  - "type": short snake_case label describing the entity
    (e.g. person_name, phone, email, address, inn, company, passport,
     contract_number, employee_id, bank_account — WHATEVER you see)
  - "value": the EXACT string from the text (copy verbatim)

Rules:
- Copy value VERBATIM — same spaces, punctuation, case as in text
- If same value appears multiple times — include only once
- Invent the type label yourself based on what you see
- Return ONLY the JSON array, no other text, no markdown wrapping

Text:
{combined[:8000]}