Asosiy qismga o'tish

Maxfiylik: va'dalar va ularning isboti

27-bob 5 kod bloki 1361 so'z

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:

python2 qator
reja = (TEZ.parent.parent / "06-security-privacy.md").read_text(encoding="utf-8")
print(reja.split("## Promises")[1].split("##")[0].strip())
Chiqish
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:

python9 qator
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)}")
Chiqish
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:

python6 qator
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])
Chiqish
{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?

python5 qator
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)}")
Chiqish
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:

python3 qator
for qator in log.splitlines():
    if "security" in qator:
        print(qator)
Chiqish
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.

Telegramda yozish Narxlar