17-bo‘lim
RAG - hujjatlar asosida javob
Til modelini o'z hujjatlaringiz bilan birlashtirish, prompt qurish, qidiruv sifatining hal qiluvchi roli va «ma'lumot yo'q» javobi.
Ushbu bo‘lim mundarijasi
Til modeli ko'p narsa biladi, lekin sizning hujjatlaringizni bilmaydi. Kompaniyangizning ichki qoidalari, mahsulot qo'llanmangiz, shartnomangiz - bular hech qanday modelga o'qitilmagan.
RAG (Retrieval-Augmented Generation) shu muammoni yechadi: avval kerakli hujjatni topamiz, keyin uni savol bilan birga modelga beramiz.
Uch qadam #
| Qadam | Nima bo'ladi | Qaysi bo'limdan |
|---|---|---|
| 1. Qidirish | Savolga mos hujjatlarni topish | 16-bo'lim |
| 2. Prompt qurish | Hujjat + savolni bitta matnga yig'ish | shu bo'lim |
| 3. Javob yozish | Model kontekstga tayanib javob beradi | 9-bo'lim |
Hujjatlaringizni modelga o'qitish ham mumkin. Lekin RAG afzalroq:
- Hujjat o'zgarsa, indeksni yangilash yetarli - qayta o'qitish shart emas.
- Model javobida manbani ko'rsatish mumkin.
- Kichik hujjat to'plami uchun o'qitish baribir ishlamaydi (14-bo'lim).
- O'qitish qimmat, indeks esa arzon.
Bilimlar bazasi #
Ichki qo'llanmani misol qilamiz:
baza = [
("Ish vaqti", "Ofis dushanbadan jumagacha soat 9:00 dan 18:00 gacha ishlaydi. Tushlik 13:00-14:00."),
("Ta'til", "Yillik ta'til 24 ish kuni. Ariza kamida 14 kun oldin topshiriladi."),
("Kasallik varaqasi", "Kasallik varaqasi birinchi kuni rahbarga xabar qilinadi. Hujjat 3 kun ichida topshiriladi."),
("Masofaviy ish", "Haftasiga 2 kun masofadan ishlash mumkin. Rahbar bilan kelishiladi."),
("Kompensatsiya", "Transport xarajati oyiga 500 ming so'mgacha qoplanadi. Chek talab qilinadi."),
("O'quv kurslari", "Yiliga bitta tashqi kursga to'lov qoplanadi. Ariza HR ga yoziladi."),
]
matnlar = [f"{a}. {b}" for a, b in baza]
B = vek(matnlar)
baza: 6 ta hujjat, indeks: (6, 384)
Prompt qurish #
def prompt_yasa(savol, parchalar):
kontekst = "\n".join(f"[{i+1}] {nom}: {m}" for i, (_, nom, m) in enumerate(parchalar))
return f"""Quyidagi hujjatlarga TAYANIB javob ber. Hujjatlarda javob bo'lmasa, "Ma'lumot yo'q" deb yoz.
HUJJATLAR:
{kontekst}
SAVOL: {savol}
JAVOB:"""
Uchta qismdan iborat: ko'rsatma, kontekst, savol.
«Hujjatlarda javob bo'lmasa, "Ma'lumot yo'q" deb yoz» - bu qator bo'lmasa, model bilmagan narsasini o'ylab topadi.
Bu hodisa «gallyutsinatsiya» deb ataladi. Model ishonchli ohangda mavjud bo'lmagan qoidani aytib berishi mumkin - va foydalanuvchi unga ishonadi.
Modelga «bilmayman» deyishga ruxsat bering.
Ishlaydigan holat #
SAVOL: Ta'til uchun qancha oldin ariza berish kerak?
topilgan: [0.574] Ta'til | [0.521] Masofaviy ish
HUJJATLAR:
[1] Ta'til: Yillik ta'til 24 ish kuni. Ariza kamida 14 kun oldin topshiriladi.
[2] Masofaviy ish: Haftasiga 2 kun masofadan ishlash mumkin. Rahbar bilan kelishiladi.
SAVOL: Ta'til uchun qancha oldin ariza berish kerak?
JAVOB:
Kerakli hujjat birinchi o'rinda topildi va javob (14 kun) prompt ichida turibdi. Model uchun qolgani oson.
Ishlamaydigan holat #
SAVOL: Ofis soat nechada ochiladi?
topilgan: [0.414] Kasallik varaqasi | [0.380] Ta'til
HUJJATLAR:
[1] Kasallik varaqasi: Kasallik varaqasi birinchi kuni rahbarga xabar qilinadi...
[2] Ta'til: Yillik ta'til 24 ish kuni...
Javob «Ish vaqti» hujjatida edi - u yerda aniq yozilgan: «*soat 9:00 dan 18:00 gacha*».
Lekin qidiruv uni ikkitalikka ham kiritmadi. Promptda kerakli ma'lumot yo'q.
Bu RAG haqidagi eng muhim haqiqat.
Dunyodagi eng kuchli til modelini qo'ysangiz ham, u bu savolga javob bera olmaydi - chunki javob promptga tushmagan. Model faqat ko'rgan narsasi haqida gapira oladi.
Ko'p loyihada muammo modelda deb o'ylanadi va qimmatroq modelga o'tiladi. Aslida muammo qidiruvda bo'ladi.
RAG nosozligini qidirganda tartib shunday:
- Avval qidiruv nimani topganini chop eting.
- To'g'ri hujjat topilganmi - shuni tekshiring.
- Topilmagan bo'lsa, modelni emas, qidiruvni tuzating.
Uchinchi holat: javob yo'q #
SAVOL: Kompaniyada nechta xodim bor?
topilgan: [0.269] Ish vaqti | [0.258] Masofaviy ish
Bu savolga javob bazada umuman yo'q. Va ballar buni ko'rsatib turibdi: 0.269 va 0.258 - ikkalasi ham past.
Taqqoslang: ishlagan holatda birinchi ball 0.574 edi.
16-bo'limdagi maslahat shu yerda amalga oshadi:
if eng_yuqori_ball < 0.45:
return "Ma'lumot yo'q"
Past ballda modelga umuman murojaat qilmang. Bu uch foyda beradi: noto'g'ri javob chiqmaydi, pul tejaladi va javob tezroq qaytadi.
Chegarani o'z hujjatlaringizda o'lchab tanlang - u to'plamga bog'liq.
Qidiruvni yaxshilash #
Bizning xato aynan qidiruvda bo'lgani uchun, e'tibor o'sha yerga qaratiladi:
| Usul | Nima qiladi |
|---|---|
| Hujjatni bo'laklash | Uzun hujjatni 2-3 jumlalik parchalarga ajratish |
| Ko'proq natija olish | k=2 o'rniga k=5 - kerakli hujjat tushish ehtimoli oshadi |
| Gibrid qidiruv | Kalit so'z + embedding birga (16-bo'lim) |
| Qayta saralash | Topilgan 20 tani aniqroq model bilan qayta tartiblash |
| Sarlavhani takrorlash | Har parchaga hujjat sarlavhasini qo'shish |
Eng arzon yechim - k ni oshirish. Bizning misolda k=3 bo'lganda
«Ish vaqti» hujjati promptga tushishi mumkin edi.
k ni cheksiz oshirmangHar qo'shimcha hujjat promptni uzaytiradi. Bu uch narsani oshiradi: narx, kechikish va chalg'itish ehtimoli.
Kontekstda 20 ta hujjat bo'lsa, model kerakligini topa olmay qolishi mumkin. 2-bo'limdagi token narxi esa o'zbekcha matnda uch barobar qimmatroq.
Odatiy oraliq: 3-5 ta parcha.
- O'z sohangizdan 6-8 ta qisqa hujjatdan baza tuzing.
- Ularni vektorga aylantirib, indeks quring.
- Uchta savol yozib, qidiruv natijalarini chop eting.
- Prompt yasovchi funksiya yozing.
- Ko'rsatmaga «Ma'lumot yo'q» qatorini qo'shing va nega kerakligini tushuntiring.
- Qidiruv xato qiladigan bitta savol toping.
- O'sha savolda
kni oshirib, kerakli hujjat tushishini tekshiring. - Bazada javobi yo'q savol berib, ballarni kuzating.
- Chegara qiymatini tanlab, «Ma'lumot yo'q» shartini yozing.
- Nosozlikni qidirishda nega avval qidiruvga qarash kerakligini yozing.
Xulosa #
- RAG - hujjatni topib, uni savol bilan birga modelga berish.
- Uch qadam: qidirish, prompt qurish, javob yozish.
- Fine-tuning dan afzalroq: hujjat o'zgarsa indeksni yangilash yetarli.
- Prompt uchta qismdan iborat: ko'rsatma, kontekst, savol.
- Ko'rsatmada «javob bo'lmasa, Ma'lumot yo'q deb yoz» qatori bo'lishi shart.
- Usiz model bilmagan narsasini o'ylab topadi - gallyutsinatsiya.
- Bizning misolda bitta savolda qidiruv kerakli hujjatni topmadi.
- Shunda eng kuchli model ham javob bera olmaydi - ma'lumot promptga tushmagan.
- RAG sifati qidiruv sifati bilan cheklangan - nosozlikni qidiruvdan boshlang.
- Past ballarda («Ma'lumot yo'q») modelga umuman murojaat qilmang.
Keyingi bo'limda bunday tizimni qanday baholash kerakligini ko'ramiz.
O‘qish tarixini saqlamoqchimisiz?
Tizimga kirsangiz, tugatgan bo‘limlaringiz saqlanadi va qoldirgan joyingizdan davom etasiz.
Xatolik topdingizmi?
Imlo xatosi, ishlamaydigan kod yoki noto‘g‘ri ma‘lumotni ko‘rsangiz - bizga xabar bering. Har bir xabar administrator tomonidan ko‘rib chiqiladi.