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.

🕑 8 daqiqa o‘qish 📄 737 so‘z 👁 3 marta ko‘rilgan
Ushbu bo‘lim mundarijasi
  1. Uch qadam
  2. Bilimlar bazasi
  3. Prompt qurish
  4. Ishlaydigan holat
  5. Ishlamaydigan holat
  6. Uchinchi holat: javob yo'q
  7. Qidiruvni yaxshilash
  8. Xulosa

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 #

QadamNima bo'ladiQaysi bo'limdan
1. QidirishSavolga mos hujjatlarni topish16-bo'lim
2. Prompt qurishHujjat + savolni bitta matnga yig'ishshu bo'lim
3. Javob yozishModel kontekstga tayanib javob beradi9-bo'lim
Nega fine-tuning emas

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:

Python
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)
Natija
baza: 6 ta hujjat, indeks: (6, 384)

Prompt qurish #

Python
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.

Ko'rsatmaning ikkinchi jumlasi eng muhimi

«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 #

Natija
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 #

Natija
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.

RAG ning sifati qidiruv sifati bilan cheklangan

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:

  1. Avval qidiruv nimani topganini chop eting.
  2. To'g'ri hujjat topilganmi - shuni tekshiring.
  3. Topilmagan bo'lsa, modelni emas, qidiruvni tuzating.
RAG quvuri Savol foydalanuvchidan Qidiruv eng zaif bo'g'in Prompt kontekst + savol Model javob yozadi Agar qidiruv noto'g'ri hujjat topsa kerakli ma'lumot promptga umuman tushmaydi model qanchalik kuchli bo'lsa ham javob bera olmaydi Bizning misol «Ofis soat nechada?» kerakli hujjat topilmadi Nosozlikni qidirish tartibi: avval qidiruv natijasini chop eting, keyin modelga qarang RAG ning aniqligi - qidiruv aniqligidan yuqori bo'la olmaydi
Zanjirning eng zaif bo'g'ini butun tizim sifatini belgilaydi

Uchinchi holat: javob yo'q #

Natija
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.

Chegara qo'ying

16-bo'limdagi maslahat shu yerda amalga oshadi:

Python
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:

UsulNima qiladi
Hujjatni bo'laklashUzun hujjatni 2-3 jumlalik parchalarga ajratish
Ko'proq natija olishk=2 o'rniga k=5 - kerakli hujjat tushish ehtimoli oshadi
Gibrid qidiruvKalit so'z + embedding birga (16-bo'lim)
Qayta saralashTopilgan 20 tani aniqroq model bilan qayta tartiblash
Sarlavhani takrorlashHar parchaga hujjat sarlavhasini qo'shish

Eng arzon yechim - k ni oshirish. Bizning misolda k=3 bo'lganda «Ish vaqti» hujjati promptga tushishi mumkin edi.

Lekin k ni cheksiz oshirmang

Har 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.

Amaliy topshiriq
  1. O'z sohangizdan 6-8 ta qisqa hujjatdan baza tuzing.
  2. Ularni vektorga aylantirib, indeks quring.
  3. Uchta savol yozib, qidiruv natijalarini chop eting.
  4. Prompt yasovchi funksiya yozing.
  5. Ko'rsatmaga «Ma'lumot yo'q» qatorini qo'shing va nega kerakligini tushuntiring.
  6. Qidiruv xato qiladigan bitta savol toping.
  7. O'sha savolda k ni oshirib, kerakli hujjat tushishini tekshiring.
  8. Bazada javobi yo'q savol berib, ballarni kuzating.
  9. Chegara qiymatini tanlab, «Ma'lumot yo'q» shartini yozing.
  10. 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.

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.