PII-ді LLM-ге жібермес бұрын анонимдеу: қазақстандық қаржы холдингінен сабақтар
Кіріс хабарларды анонимдейтін, upstream-модельді шақыратын және мәндерді пайдаланушыға қалпына келтіретін қайтымды прокси. Не жұмыс істеді, нені бағаламадық және мұндай жоба қашан AI-практика емес, инфрақұрылым болады.
Холдингте аналитиктер мен саппортқа LLM-ге ыңғайлы интерфейс беру міндеті туындағанда, бір қабырғаға тез тірелдік: бөгде API-ға нақты ИИН, карта нөмірлері мен клиент шоттары бар жолдарды жіберуге болмайды. Тыйым «сақтық» емес, абсолютті болды — InfoSec пен комплаенс мұны қалай нақты кепілдейтінімізді көрсетуді сұрады.
Шешім скучный болып шықты, сондықтан жұмыс істейді: кіріс хабарларды анонимдейтін, upstream-модельді шақыратын, содан кейін пайдаланушы үшін бастапқы мәндерді қалпына келтіретін қайтымды прокси. Стек — Python 3.10, FastAPI, Presidio analyzer/anonymizer, қосымша қасында жеке контейнер. Сиқыр жоқ — бес жыл бұрынғы банк шлюзі жасамайтын ештеңе. Тек жаңа каналда.
Әрі қарай — публичный туториалдарда әдетте айтылмайтын төрт сәт.
Дайын кітапханалар ИИН-ді білмейді
Presidio қораптан email мен кредитканы табады. Болды. ИИН де, БИН де, жергілікті телефон форматы да жоқ. Өз танушыларымызды жазуға тура келді: kz_iin, kz_bin, kz_phone, kz_id_card, ru_inn, ru_snils, ru_passport, bank_card, iban. Әрқайсысы — паттерн плюс контекст («иин», «жеке сәйкестендіру нөмірі» т.б.).
Бірден алғашқы қате: 12-цифрлы ИИН паттерні қатарынан тапсырыс нөмірлерін, қойма артикулдарын, төлем референстерін — 12 цифрдан тұратын барлығын ұстайды. Шешім — ресми алгоритм бойынша бақылау цифрын тексеру (күннің жеті разряды, ғасыр/жыныс разряды, 1–11 салмақтары, коллизия болғанда — басқа салмақтармен екінші өту).
Сұрау бойынша vault, глобалды емес
Анонимдеу қайтара алмасаңыз пайдасыз — модель жауабы пайдаланушыға нақты ИИН мен фамилиялармен қайтуы керек. «Түпнұсқа ↔ плейсхолдер» мэппингтері TTL 3600 секундпен ағынға қауіпсіз in-memory сөздікте сақталады. Сессия request-id-ге байланған.
Маңызды деталь: бірінші нұсқа плейсхолдерлердің глобалды есептегішін пайдаланды, және параллель жүктемеде А пайдаланушысы кейде Б пайдаланушысының ИИН-імен жауап алды.
OpenAI-үйлесімдік — басты архитектуралық шешім
/v1/chat/completions-ты upstream-провайдер сияқты контрактпен ашықтық. openai-sdk-да коды бар ішкі командалар base_url-ды ауыстырды — болды. Жаңа клиент кітапханаларсыз, тренингсіз.
Кішілік сияқты естіледі, апталарды үнемдеді.
Нені бағаламадық
Анонимдеу контексті жоғалтады. «Иван Петров төлемді өткізіп алды» және «[PERSON_1] төлемді өткізіп алды» — LLM үшін ақпараттылығы жағынан әртүрлі мәтіндер. Кейбір тапсырмаларда жауап сапасы 5–10%-ға түсті. Модель өз брендтер атауларына сүйенетін аналитика үшін whitelist қажет болды.
Performance. Presidio сұрауға 50–200 мс қосады. Чатта байқалмайды, логтарды bulk-өңдеуде — ауыр.
Ең бастысы — прокси көздегі деректер классификациясын алмастырмайды. Егер CRM-де паспорт сканерлері «комментарий» өрістерінде сақталса, ешқандай Presidio мұны емдемейді.
Шынымен қашан керек
Жасау керек, егер LLM нақты клиент деректерін алса, реттеуші шығыс трафикте PII-нің дәлелді жоқтығын талап етсе. Бағаламау керек, егер команда синтетикалық деректермен жұмыс істесе.
LLM-прокси өзі бойынша «AI-практика» емес, AI-практикаға InfoSec-пен ауыртпалықсыз өмір сүруге мүмкіндік беретін инфрақұрылымдық бөлік.