13-darsda biz modelning ichki tuzilishini (kontekst oynasi, sampling, system prompt) o'rgandik, 14-darsda unga qo'l berdik (Tool Calling). Lekin bitta jiddiy muammo qoldi: model sizning hujjatlaringizni, maktabingiz qoidalarini yoki kompaniyangiz bazasini bilmaydi. Bugun biz eng keng tarqalgan sanoat yechimini quramiz — RAG (Retrieval-Augmented Generation) va uning yuragi bo'lgan vektor qidiruvni matematikasi bilan ochamiz.
Model o'qitilgan sanadan keyingi hech narsani bilmaydi. Sizning kechagi hujjatingiz, bugungi narx ro'yxatingiz — u uchun mavjud emas. Va u mavjud emasligini ham bilmaydi.
LLM — keyingi tokenning ehtimolini hisoblovchi model. Agar fakt yo'q bo'lsa, u bo'shliq qoldirmaydi — eng ehtimolli matnni generatsiya qiladi. Natija ishonchli ko'rinadi va noto'g'ri bo'ladi.
"Hamma hujjatni promptga solaylik" ishlamaydi: kontekst oynasi cheklangan, har token pul turadi va uzun kontekstda model o'rtadagi ma'lumotni yo'qotadi (lost in the middle).
Bizga kerak: so'rov paytida, faqat kerakli parchalarni topib, ularni promptga qo'shadigan tizim. Model o'sha parchalarga tayanib javob beradi — bu grounding deb ataladi. Aynan shu — RAG.
1. Hujjatlarni yuklash (PDF, HTML, DOCX) 2. Matnga aylantirish va tozalash 3. CHUNKING — parchalarga bo'lish 4. Har parcha -> EMBEDDING (vektor) 5. Vektorlarni bazaga yozish // Bu bosqich sekin va qimmat, // lekin faqat bir marta bajariladi.
1. Foydalanuvchi savoli -> EMBEDDING 2. Bazada eng yaqin K ta vektorni topish 3. Ularning matnini olish 4. Prompt yig'ish: system + [topilgan parchalar] + savol 5. LLM javob beradi + manbalar // Bu bosqich tez: 50-200 ms
LLM bu yerda faqat oxirgi qadamda qatnashadi. RAG ning sifati 90% qidiruv bosqichiga bog'liq. Agar noto'g'ri parchalar topilsa, dunyodagi eng kuchli model ham to'g'ri javob bera olmaydi — u faqat berilgan axlatni chiroyli qilib qaytaradi. Shuning uchun RAG — bu qidiruv muhandisligi, generatsiya emas.
Parcha kontekstni yo'qotadi. "U 15% ni tashkil qiladi" — nima 15%? Olmosh oldingi chunkda qolgan. Qidiruv topadi, lekin javob ma'nosiz chiqadi.
Bitta vektor bir nechta mavzuni o'z ichiga oladi va ularning o'rtachasiga aylanadi. Natijada u hech bir so'rovga aniq mos kelmaydi — semantik suyultirish (dilution).
200–500 token + 10–20% overlap. Overlap chegarada qolib ketgan jumlani qutqaradi. Va eng muhimi: ma'no chegarasi bo'yicha bo'ling — paragraf, sarlavha, bo'lim.
Bir chunk — bir tugallangan fikr. Belgi yoki token bo'yicha ko'r-ko'rona kesish (naive fixed-size splitting) — RAG tizimlaridagi muammolarning eng ko'p uchraydigan sababi. Stendda buni o'z ko'zingiz bilan ko'rasiz.
Maxsus neyron model matnni sonlar massiviga aylantiradi — odatda 384, 768 yoki 1536 o'lchov. Bu sonlar tasodifiy emas: model shunday o'qitilganki, ma'nosi yaqin matnlar fazoda yaqin joylashadi. Muhimi: taqqoslanayotgan barcha matnlar bitta model bilan vektorlanishi shart.
Savol: "Xodim kasal bo'lsa nima qilsin?" Hujjat: "Mehnatga layoqatsizlik varaqasi" Umumiy so'z: 0 ta Kalit so'z qidiruvi: TOPMAYDI Vektor qidiruv: TOPADI (0.81) // Chunki ma'no yaqin, garchi // so'zlar butunlay boshqa bo'lsa ham.
Laboratoriya brauzerda, internetsiz ishlaydi — shuning uchun unda soddalashtirilgan leksik embedding (TF-IDF uslubidagi vektor) ishlatiladi. Chunking, kosinus o'xshashlik, top-K va reranking mexanikasi aynan real tizimdagidek, lekin semantik yaqinlik real neyron embedding darajasida emas. Buni yodda tuting.
cos(A, B) = (A · B) / (|A| × |B|) A · B = a1*b1 + a2*b2 + ... + an*bn // skalyar ko'paytma |A| = sqrt(a1^2 + a2^2 + ... + an^2) // uzunlik (norma) Natija: -1 ... +1 1.0 — bir xil yo'nalish (ma'no bir xil) 0.0 — ortogonal (umuman bog'liq emas) -1.0 — qarama-qarshi yo'nalish
10 000 000 vektor x 1536 o'lcham = har so'rovga 15 milliard ko'paytirish Kutish vaqti: ~10 soniya Kerakli vaqt: ~50 millisekund // 200 barobar farq — boshqa // algoritm kerak.
SYSTEM:
Faqat quyidagi kontekstga tayanib javob ber.
Agar kontekstda javob bo'lmasa, "bilmayman" deb ayt.
Har faktdan keyin manba raqamini ko'rsat.
KONTEKST:
[1] {eng mos parcha}
[2] {ikkinchi parcha}
[3] {uchinchi parcha}
SAVOL: {foydalanuvchi savoli}
// Eng muhim qatorlar: "bilmayman" va manba.
Javob ikki chunk orasida qolib ketgan. Belgi: tizim "yarim javob" beradi. Yechim: overlap oshirish, ma'no bo'yicha bo'lish.
Savol tilidan hujjat tili juda farq qiladi (jargon, qisqartma). Yechim: gibrid qidiruv — vektor + BM25 kalit so'z.
Hujjat yangilandi, vektor yangilanmadi. Tizim ishonch bilan eski javob beradi. Yechim: hujjat o'zgarishida qayta indekslash.
Parcha to'g'ri topilgan, lekin model o'z "bilimiga" tayangan. Yechim: qattiq system prompt + manba talab qilish.
Chunk hajmini 40 ga tushiring va bir savol bering. Keyin 400 ga oshiring. Ikkala holatda ham top-1 ballni yozing.
Stend har parcha uchun kosinus ballini ko'rsatadi. Eng yuqori va eng past ballni yozing va farqni izohlang.
K ni 1 dan 8 gacha o'zgartiring. Javob qachon to'liq bo'ladi va qachon shovqin kira boshlaydi?
Bazada javobi yo'q savol bering. Qattiq system prompt bilan va usiz sinab ko'ring — farqni yozing.
4-sinovda siz RAG ning eng muhim xususiyatini ko'rasiz: "bilmayman" deb javob bera olish — bu tizimning kuchi, zaifligi emas. Gallyutsinatsiya qiladigan tizimdan "topilmadi" deydigan tizim ancha qimmatliroq.