# Ответ Соннета — универсальная архитектура DrHider (2026-07-12) Кратко: 6 вопросов → 6 ответов → карта изменений. --- ## Q1. Как сделать обнаружение универсальным? Промпт должен звучать не «найди вот эти типы», а «найди ВСЁ, что выглядит как приватная информация, и сам назови тип». Затрагивает: `scanner.py` (промпт), `builder.py` (тип для mapping.csv). --- ## Q2. Regex или LLM? **Гибрид — правильный выбор:** - **Regex = pre-pass** для структурированных данных (телефон, email, ИНН, БИК). Экономит токены LLM. - **LLM = post-pass** для неструктурированного (имена, адреса, нестандартные ID). - Дублирования не страшны — mapping dict сам отсеет. --- ## Q3. Генерация фиктивных значений — универсальная? Два уровня: 1. **Известные типы** — специализированные генераторы (оставить как есть). 2. **Неизвестные типы** — fallback-генератор: character-class preserving замена (цифры→цифры, буквы→буквы той же длины). Дополнительно: в промпт добавить `"category": "person|org|contact|id|financial|other"` — 6 категорий вместо 10+ типов. --- ## Q4. Двухпроходная или однопроходная? **Двухпроходная — обязательно.** Причина: «Иванов» в 5 документах должен заменяться одинаково. Однопроход не может этого гарантировать. Текущий `TwoPassObfuscator` — правильный, не трогать. --- ## Q5. Новый промпт ``` You are a PII detector. Find ALL sensitive or private information. Return JSON array: [{"type": "short_label", "value": "exact_string"}] Rules: - Copy "value" VERBATIM from text - "type" is snake_case label you invent - Same value → include once - Return ONLY JSON ``` Ключевое: нет ограничения на типы, value verbatim. --- ## Q6. DOCX или Markdown? - **Внутренняя обработка:** Markdown проще парсить, LLM понимает лучше. - **На выходе:** опция `output_format: "docx" | "md"`. По умолчанию `"docx"`. --- ## Итоговая карта изменений ``` scanner.py — новый промпт (убрать список типов, LLM сама называет типы) generators/ — добавить fallback-генератор для неизвестных типов obfuscator.py — вызывать fallback если тип неизвестен api_bp.py — принять параметр output_format replacer.py — добавить replace_to_markdown() builder.py — упаковывать .md если output_format=md ``` **Не трогать:** двухпроходная схема, checksum-генераторы, ZIP-безопасность.