RAG (Retrieval-Augmented Generation) — bu modelga javob berishdan oldin kerakli ma’lumotni topib berish usuli. Model «bilmasa ham» javob bera oladi.
Muammo: model hammasini bilmaydi
LLM’lar ma’lum sanagacha o‘qitilgan va tashqi ma’lumotni bilmaydi. RAG bu muammoni hal qiladi:
- kompaniya ichki hujjatlari;
- yangi ma’lumotlar;
- maxsus bilim sohalari.
RAG oqimi
Dokumentlar → Chunking → Embeddings → Vektor bazasi
↓
So‘rov ─────────────────────────────────→ Retrieval
↓
LLM (topilgan bo‘laklar bilan)
↓
Javob
Bosqichlar
1. Tayyorlash (offline)
from langchain.text_splitter import RecursiveCharacterTextSplitter
from openai import OpenAI
client = OpenAI()
text = open("guide.md").read()
chunks = RecursiveCharacterTextSplitter(
chunk_size=500,
chunk_overlap=50,
).split_text(text)
embeddings = []
for chunk in chunks:
vec = client.embeddings.create(
model="text-embedding-3-small",
input=chunk,
)
embeddings.append(vec.data[0].embedding)
2. So‘rov vaqtida (online)
def rag_answer(question: str) -> str:
# 1. So‘rovni vektorga aylantirish
q_vec = embed(question)
# 2. Eng mos bo‘laklarni topish (semantic search)
top_chunks = vector_db.search(q_vec, limit=3)
# 3. LLM'ga kontekst sifatida berish
context = "\n\n".join(top_chunks)
prompt = f"""
Savolga faqat berilgan kontekst asosida javob ber.
Agar kontekstda javob bo‘lmasa — «bilmayman» deb yoz.
Kontekst:
{context}
Savol: {question}
"""
return client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": prompt}],
).choices[0].message.content
Amaliy maslahat
Chunk o‘lchami muhim: juda kichik — kontekst yetarli emas, juda katta — keraksiz ma'lumot aralashadi. 300–800 belgi odatda yaxshi boshlanish nuqtasi.
RAG vs Agent
| Xususiyat | RAG | Agent |
|---|---|---|
| Asosiy vazifa | Ma’lumot topish + javob | Vazifa bajarish |
| Rejalashtirish | Yo‘q | Ha |
| Tools | Qidiruv (retrieval) | Har qanday |
| Kombinatsiya | — | Agent RAG’ni tool sifatida ishlatadi |
Agent va RAG bir-birini to‘ldiradi: agent reja tuzadi, RAG esa ma’lumotni topadi.
Xulosa
RAG — modelga tashqi ma’lumot bilan javob berish usuli. Chunking → embeddings → retrieval → LLM oqimi orqali model «bilmaydigan» savollarga ham javob bera oladi.