Geek Partners Labs
Инсайттерге оралу
2026 ж. 14 ақпан·7 мин оқу·Geek Partners Labs

PII-ді LLM-ге жібермес бұрын анонимдеу: қазақстандық қаржы холдингінен сабақтар

Кіріс хабарларды анонимдейтін, upstream-модельді шақыратын және мәндерді пайдаланушыға қалпына келтіретін қайтымды прокси. Не жұмыс істеді, нені бағаламадық және мұндай жоба қашан AI-практика емес, инфрақұрылым болады.

LLM ProxyPIIKZ_IINFastAPIPresidio

Холдингте аналитиктер мен саппортқа 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-пен ауыртпалықсыз өмір сүруге мүмкіндік беретін инфрақұрылымдық бөлік.