КАК Я НАУЧИЛ СВОЙ НОУТ ХРАНИТЬ СЕКРЕТЫ
В прошлом году я рассказывал о том, как делал ИИ-бота в 1С для помощи с заполнением реквизитов документов. Бот этот работает и по сей день. Но вот только делал я его на Assistants API, которое в августе обещают снять с поддержки. Так что пришло время модернизации.
В планах:
- актуализировать данные, на которых работает бот
- перейти на использование своей RAG-системы
- перейти с Assistants API на Responses API
Начнем с данных. Сейчас у меня бот работает на промпте и файлах, загруженных в векторную базу данных ассистента. Векторная база данных позволяет искать информацию не по каким-то конкретным словам, а по смыслу текста. Наверное, напишу отдельный пост на эту тему - как по мне, это очень интересно 😊
Так вот сейчас у меня есть файл с заранее проверенными человеком соответствиями между, например, содержанием услуги и соответствующим ей статьи затрат. Это реальные данные из документов. И конечно они изначально содержали в себе и конфиденциальную информацию, которую нельзя отправлять в сторонние системы.
В прошлый раз объем этой информации был не очень большой, так что можно было сделать по-простому... почистить вручную. Муторно конечно, но реально.
В этот раз я решил подойти к вопросу более основательно и со своим братюней Клод Кодом сделать сервис для обезличивания данных полностью локально, на своем железе. Получилось довольно-таки классно, хотя и не совсем без ошибок. Что-то он пропускает, что-то определяет не совсем корректно (например, названия организаций). Поэтому после обработки текста сервисом все равно надо глянуть еще и человеку, но в целом это НАМНОГО-НАМНОГО лучше, чем обезличивать весь текст вручную.
Немного о самом сервисе, который я назвал Anonimyzer.
❗️В основе лежит три принципа:
• Необратимость замены — таблицы соответствий "метка оригинал" нет, по обезличенному тексту восстановить оригинал нельзя.
• Лучше перебдеть, чем недобдеть - Пропустить конфиденциальные данные страшнее, чем перемаскировать лишнее. При сомнении маскируем.
• Строго локально - наружу не уходит ничего.
🧩 Используются 4 детектора:
1️⃣ regex - e-mail, телефон, ИНН, СНИЛС, паспорт, IP-адреса. Всегда доступен, без зависимостей. Просто гоняет набор регулярок и отдаёт совпадения. Форматы он ловит детерминированно и надёжнее любой модели.
2️⃣ Natasha - имена, организации, адреса, даты. NER-модель + отдельные rule-based экстракторы.
3️⃣ Presidio + spaCy (ru_core_news_lg) - ИНН/СНИЛС/паспорт. Вторая NER-модель + кастомные шаблонные распознаватели.
4️⃣ Локальная LLM через LM Studio - контекстные сущности, которые пропустили предыдущие методы. Плюс финальный проход: перечитывает уже закрашенный текст и ищет оставшиеся конфиденциальные данные.
Отдельно скажу про локальную LLM. Понятно, что скорость ее работы зависит от компьютера. У меня ноут с RTX 3070 (8 Гб видеопамяти). С ней проверка выполняется в десятки раз медленнее. И главное - в некоторых случаях он еще и хуже может сделать (например, посчитать какое-то обычно слово за название организации). Поэтому модели надо тестить разные. Я пробовал qwen3.5-9b и gemma-4-e4b. Мне показалось, что gemma портила результат меньше 😆
Сервис написан на python и выложен на GitHub. Файл CLAUDE.md я тоже выложил.
@Konstantin1C
Post #107
470

- 🔥 5
- 👍 4
- ❤ 3
- 😁 2
- 🙏 1