RAG Generatsiya bosqichi nima?
RAG tizimining eng so’nggi va asosiy bosqichi generatsiya (generation) jarayonidir. Qidiruv bosqichida topilgan kontekst bo’laklari foydalanuvchining asl so’rovi bilan birgalikda maxsus tuzilgan Prompt Template (prompt andozasi) ichiga joylashtiriladi. Biroq, zamonaviy tadqiqotlar shuni ko’rsatadiki, modelga shunchaki matnni uzatish etarli emas. Bu yerda bir nechta ilg’or konsepsiyalar mavjud:
- “Lost in the Middle” (O’rtada yo’qolish): LLM’larning kontekst oynasi katta bo’lsa-da, ular promptning boshi yoki o’rtasidagi ma’lumotlarni unutishga moyil bo’ladi (recency bias). Shu sababli, eng muhim bo’laklarni prompt oxiriga yaqinroq joylashtirish lozim.
- Corrective RAG (CRAG): Agar qidirilgan hujjatlar sifatsiz deb topilsa, tizim avtomatik ravishda web-qidiruv (Tavily/Google) orqali yangi kontekst to’playdi va shundagina generatsiyaga o’tadi.
- Active/Self-RAG (LangGraph flows): Generatsiya qilingan javobni bir necha marta tekshirish: javob berilgan hujjatlarga sodiqmi (faithfulness) va u foydalanuvchi savoliga mosmi? Agar tekshiruvdan o’tmasa, qayta qidiruv yoki qayta prompt yuboriladi.
Bu tizimli qayta tekshiruv va qayta qidiruv jarayonlari LLM tizimlarida Flow Engineering (oqim muhandisligi) deb ataladi. Ular tizimning mustahkamligini va ishlab chiqarish (production) sharoitida ishonchliligini mutlaq kafolatlaydi.
Naive Generation va RAG Generation solishtiruvi
Til modelining hech qanday qo’shimcha ma’lumotlarsiz va RAG tizimi yordamida javob berish farqlari:
| Xususiyat | Oddiy generatsiya (Naive - No RAG) | RAG orqali generatsiya (RAG Generation) |
|---|---|---|
| Bilim doirasi | Faqat model o’qitilgan (pre-training) statik ma’lumotlar | Tashqi yuklangan yangi, maxsus yoki shaxsiy hujjatlar |
| Gallyutsinatsiya darajasi | Yuqori (faktlar yetishmasa, o’zidan yolg’on ma’lumot to’qiydi) | Juda past (model qat’iy ravishda berilgan dalillarga tayanadi) |
| Kontekst boshqaruvi | Hech qanday boshqaruv yo’q, faqat savolning o’zi | Tizimli joylashtirilgan, tartiblangan va tozalangan kontekst |
Amaliy kod: Oqimli (Streaming) Generatsiya va Tizimli Instruksiya
Quyidagi kod yordamida biz kontekst va savol asosida prompt andozasini yaratib, Ollama yordamida javobni real vaqt rejimida (streaming) chiqaramiz:
import ollama
LANGUAGE_MODEL = 'hf.co/bartowski/Llama-3.2-1B-Instruct-GGUF'
def generate_stream_response(user_query: str, retrieved_chunks: list[str]):
# Kontekstni toza ro'yxat shakliga keltirish
formatted_context = "\n".join([f" - {chunk.strip()}" for chunk in retrieved_chunks])
# Qat'iy tizimli prompt andozasi
system_instruction = f"""Siz aqlli yordamchisiz.
Faqat quyidagi kontekstdan foydanib savolga javob bering.
Agar kontekstda javob bo'lmasa, 'Ma'lumot topilmadi' deb javob bering:
---
{formatted_context}
"""
# Ollama orqali oqimli javob yuborish
stream = ollama.chat(
model=LANGUAGE_MODEL,
messages=[
{'role': 'system', 'content': system_instruction},
{'role': 'user', 'content': user_query}
],
stream=True
)
return stream
Muhim
Gallyutsinatsiyalarning oldini olish uchun tizimli promptda (system prompt) model o'z bilimidan foydalanmasligi haqida qat'iy ko'rsatma berish shart. Aks holda, LLM berilgan kontekstda javob bo'lmasa, uni o'zining ichki bilimlaridan to'ldirishga harakat qiladi va bu ishonchlilikni buzadi.
Amaliy maslahat
Topilgan matn bo'laklarini andozaga joylashtirishdan oldin ularni toza ro'yxat ko'rinishida formatlang hamda bo'sh joylarni olib tashlang. Bu modelning kontekstni to'g'ri o'qib olishiga yordam beradi va matnni tahlil qilishdagi sintaksis xatoliklarni kamaytiradi.
Diagramma tavsifi
Generatsiya bosqichi “Topilgan bo’laklar” qabul qilinishi bilan boshlanadi. Tizim ularni “Prompt qurish” bosqichida foydalanuvchi savoli bilan andozaga birlashtiradi. Keyin, “LLM so’rov” orqali so’rov neyron tarmoqqa uzatiladi. Yakunda esa model berilgan hujjatlar doirasida ishonchli va gallyutsinatsiyalarsiz “Asoslangan javob” qaytaradi.