Maxfiylik: va'dalar va ularning isboti
Nega bu bob muhim
Tez mavjud bo'lishining sababi — maxfiylik. 1-bobda ko'rdik: bankda cloud AI taqiqlangan, chunki mijoz ma'lumoti bank tashqarisiga chiqmasligi kerak. Agar Tez bu va'dani buzsa, uning boshqa hamma afzalliklari ahamiyatsiz.
Va'da berish oson. Bu bob — va'dalarni tekshirish haqida: qaysi biri kod bilan isbotlanadi, qaysi biri hali isbotlanmagan, va qayerda haqiqiy teshik bor.
Beshta va'da
Loyihaning xavfsizlik planida (06-security-privacy.md) beshta va'da yozilgan:
reja = (TEZ.parent.parent / "06-security-privacy.md").read_text(encoding="utf-8") print(reja.split("## Promises")[1].split("##")[0].strip())
1. **No data leaves the machine.** Zero network calls at runtime. 2. **Original files are never changed.** 3. **The model never sees full data.** Only schema, column statistics and a few sample rows, all on the local machine. 4. **Nothing is trained on customer rows.** 5. **Every action is logged locally** and can be reviewed.
Ularni birma-bir tekshiramiz.
1. Ma'lumot kompyuterdan chiqmaydi
Tez ning ishlash paytidagi kodida tarmoqqa murojaat qiladigan joylar bormi? Butun kodni skanerlaymiz — har bir
http:// yoki https:// manzilini qidiramiz:
import re import glob manzillar = {} for fayl in glob.glob(str(TEZ / "**/*.py"), recursive=True): for host in re.findall(r"https?://([^/:\"'\s{}]+)", open(fayl, encoding="utf-8").read()): manzillar.setdefault(host, set()).add(str(Path(fayl).relative_to(TEZ))) for host, fayllar in manzillar.items(): print(f"{host:12s} {sorted(fayllar)}")
127.0.0.1 ['runtime/server.py']
Butun kodda bitta manzil bor — 127.0.0.1, ya'ni shu kompyuterning o'zi. Bu Tez ning model serveri bilan
gaplashadigan joy. Model serveri ham faqat shu manzilda tinglaydi — uning ishga tushirish buyrug'idan:
import json sozlama = json.load(open(TEZ / "speed/config.json", encoding="utf-8")) buyruq = sozlama["runtimes"]["llama"]["command"] print(" ".join(buyruq)) print("tinglash manzili:", buyruq[buyruq.index("--host") + 1])
{binary} -m {model} --host 127.0.0.1 --port {port} -c {context} -np 1 -ngl {gpu_layers} --jinja
tinglash manzili: 127.0.0.1
Tarmoqdagi boshqa kompyuter bu serverga ulana olmaydi. Model fayli, DuckDB, Excel loaderi — hammasi shu kompyuterda.
Bu skaner — kuchli dalil, lekin to'liq emas. U faqat bizning kodimizni ko'radi; ishlatilgan kutubxonalar (DuckDB, llama.cpp) ichini emas. To'liq isbot — xavfsizlik planida yozilganidek: kompyuterni tarmoqdan uzib ishga tushirish va tarmoq jurnalida hech qanday trafik yo'qligini ko'rsatish. Bu sinov hali bajarilmagan.
2. Model butun ma'lumotni ko'rmaydi
3-bobda ko'rdik: model faqat jadvalning tavsifini ko'radi — ustun nomlari, turlari va har bir ustundan uchta namuna (yoki kam qiymatli ustunlarda — hamma qiymatlar). Yigirma ming qatorli jadvaldan model ko'radigan prompt — bir necha ming belgi.
Lekin bir narsani aniq aytish kerak: bu namunalar haqiqiy qiymatlar. Tahlilchining faylida "Karimov Aziz" degan mijoz bo'lsa, u promptda ko'rinishi mumkin. Bu xavfli emas — prompt shu kompyuterdagi modelga boradi va hech qayoqqa chiqmaydi. Lekin bu keyingi va'da uchun muhim.
3. Mijoz qatorlarida o'qitilmaydi
Training ma'lumoti — faqat "so'rov → plan" juftliklari, va ularning jadvallari — hammasi o'ylab topilgan. Bu kitobda buni bir necha marta tekshirdik:
- o'qituvchi yozgan 31 568 ta matnning hammasi o'n sakkizta sintetik jadval uchun, haqiqiy jadval uchun — nol (12-bob);
- tez8, tez9 va tez10 ning training fayllarida real test jadvallarining birortasi ham yo'q (23-bob).
Hozircha bu va'da to'liq bajarilgan. Lekin u kelajakda sinovga duch keladi — yangilash siklida (28-bob). Plan shunday: tahlilchi noto'g'ri javobni belgilaydi, Tez faqat so'rov va planni saqlaydi, va ular keyingi trainingga kiradi. Muammo: tahlilchining so'rovi o'zi mijoz ma'lumotini o'z ichiga olishi mumkin — "Karimov Aziz ning kreditlarini ko'rsat". Bunday matn bankdan chiqsa, va'da buziladi.
Demak yangilash siklida yana bitta qadam kerak: saqlangan so'rovlardan ism, hisob raqami va boshqa qiymatlarni olib tashlash yoki almashtirish — va bu bank ichida, bank xodimi ko'zi oldida. Bu qadam hali loyihalanmagan.
4. Asl fayllar o'zgarmaydi
Bu va'da engine darajasida bajarilgan: 8-bobda ko'rdik, har bir qadam yangi jadval yaratadi va asl jadval hech qachon o'zgarmaydi. Excel fayl o'qish uchun ochiladi. Lekin "fayl xeshini yuklashdan oldin va keyin tekshirish" — planda bor, kodda yo'q. Ilova hali yo'q, demak bu tekshiruv ham yo'q.
5. Har bir harakat yoziladi
Ilova bo'lmagani uchun foydalanuvchi harakatlari jurnali ham yo'q. Bor narsa — model serverining logi. Unda nima yoziladi? 6-bobdagi saqlangan logni tekshiramiz: unda foydalanuvchi so'rovlari bormi?
log = (DATA / "accuracy_tez-tez8_cpu_all.log").read_text(encoding="utf-8") savollar = [s["text"] for f in glob.glob(str(TEZ / "accuracy/suites/real_*/questions.json")) for s in json.load(open(f, encoding="utf-8"))] print(f"log qatorlari: {len(log.splitlines())}") print(f"logda uchragan test so'rovlari: {sum(s in log for s in savollar)}")
log qatorlari: 172 logda uchragan test so'rovlari: 0
Standart sozlamada log faqat vaqt va token sonlarini yozadi — so'rov matnini emas. Bu yaxshi. Lekin bu llama.cpp ning standart xulqi, Tez ning kafolati emas: logning batafsillik darajasi oshirilsa, promptlar ham yozilishi mumkin. Mahsulotda log sozlamasi qotirilishi kerak.
Haqiqiy teshik: server himoyasiz
Endi — biz bu kitobni yozayotganda topgan haqiqiy muammo. 6-bobda server logini o'qiganimizda, uning eng boshida bitta ogohlantirish bor edi:
for qator in log.splitlines(): if "security" in qator: print(qator)
0.00.347.423 W srv server_setup: security: no API key is set and CORS allows all origins (see https://github.com/ggml-org/llama.cpp/pull/25655)
Server API kalitisiz ishlaydi va CORS hamma manbaga ruxsat beradi. Bu nima degani?
Server faqat 127.0.0.1 da tinglaydi — tarmoqdan unga ulanib bo'lmaydi. Lekin shu kompyuterdagi brauzer
127.0.0.1 ga murojaat qila oladi. CORS hamma manbaga ochiq bo'lgani uchun, tahlilchi brauzerda ochgan har
qanday veb-sahifa — internetdagi begona sayt ham — Tez serveriga so'rov yuborib, javobni o'qiy olishi mumkin.
Bunday sahifa nima qila oladi? Eng kamida — kompyuterning modelidan o'z maqsadi uchun foydalanish. Eng yomoni — agar server joriy so'rovlar yoki keshdagi promptlar haqida ma'lumot beradigan nuqtalarga ega bo'lsa (llama.cpp serverida holat haqida ma'lumot beradigan bunday nuqtalar bor), promptdagi jadval namunalari — ya'ni haqiqiy qiymatlar — begona sahifaga chiqishi mumkin. Bu b11946 versiyasida aniq qaysi nuqtalar ochiq va ular nima qaytarishi — biz hali tekshirmaganmiz. Tekshirmasdan "xavfsiz" deb ham, "ma'lumot chiqadi" deb ham ayta olmaymiz.
Tuzatish yo'li ma'lum, va u mahsulotdan oldin majburiy:
- serverga tasodifiy API kaliti berish (har bir ishga tushishda yangi), va Tez faqat shu kalit bilan murojaat qilsin;
- CORS ni yopish yoki faqat Tez ilovasining manziliga ruxsat berish;
- server holati haqida ma'lumot beradigan nuqtalarni o'chirish;
- va keyin — brauzerdan haqiqiy sinov: begona sahifa serverga ulana olmasligini ko'rsatish.
Xavfsizlik planida "mahalliy API ga boshqa dasturlar ulanishi" xavfi va uning yechimi ("tasodifiy token, qat'iy CORS") allaqachon yozilgan edi. Lekin u ilovaning o'z API si uchun yozilgan, model serveri uchun emas. Teshik ikki qatlam orasida qolgan edi.
Bankka nima aytamiz
Xavfsizlik planining oxirida bankka beriladigan bir sahifalik hujjat rejalashtirilgan. Bugungi holat bo'yicha uning halol versiyasi shunday bo'lardi:
| Va'da | Holat |
|---|---|
| Ma'lumot kompyuterdan chiqmaydi | Kodda tarmoq manzili yo'q (faqat 127.0.0.1); tarmoqsiz sinov — bajarilmagan |
| Model butun ma'lumotni ko'rmaydi | Bajarilgan: faqat tavsif va namunalar |
| Mijoz qatorlarida o'qitilmaydi | Bajarilgan; yangilash siklida so'rovlarni tozalash — loyihalanmagan |
| Asl fayllar o'zgarmaydi | Engine da bajarilgan; xesh tekshiruvi — yo'q |
| Har bir harakat yoziladi | Ilova yo'q — jurnal ham yo'q |
| Model serveri himoyalangan | Yo'q: API kaliti yo'q, CORS ochiq — tuzatilishi shart |
Xulosa
- Tez ning kodida bitta tarmoq manzili bor —
127.0.0.1; model serveri faqat shu kompyuterda tinglaydi. - Model faqat jadval tavsifini ko'radi; training faqat sintetik jadvallarda — bu kitobda bir necha marta tekshirildi.
- Yangilash siklida tahlilchining so'rovlari mijoz ma'lumotini o'z ichiga olishi mumkin — ularni bank ichida tozalash qadami kerak.
- Haqiqiy teshik: model serveri API kalitisiz va CORS ochiq. Brauzerdagi begona sahifa unga murojaat qila oladi. Mahsulotdan oldin yopilishi shart.
- Tarmoqsiz sinov, xesh tekshiruvi va harakatlar jurnali — hali yo'q.
Bu bobni bepul o'qidingiz.
Kitob o'rgatadi, lekin sizning kodingiz nega ishlamaganini ayta olmaydi. Kursda uy vazifangiz tekshiriladi.