Asosiy qismga o'tish

Muammo va Yechim

1-bob 12 kod bloki 1659 so'z

LLM cheklovlari: Nega oddiy ChatGPT yetarli emas?

Katta til modellari (Large Language Models) — ChatGPT, Claude, Qwen — hayratlanarli darajada kuchli. Lekin ularning uchta fundamental cheklovi bor, va bu cheklovlar biznes ilovalar uchun jiddiy muammo tug'diradi.

1. Knowledge Cutoff — Bilim chegarasi

Har bir LLM ma'lum bir sanagacha bo'lgan ma'lumotlar bilan o'qitilgan. ChatGPT-4o masalan 2024-yil oktyabrgacha biladi. Undan keyingi voqealar haqida — mutlaqo xabarsiz.

yaml3 qator
Foydalanuvchi: "Nihol kompaniyasi 2025-yilda qanday loyihalar qildi?"
ChatGPT:       "Kechirasiz, mening ma'lumotlarim 2024-yil oktyabrgacha.
                Bu haqda aniq javob bera olmayman."

Bu degani, agar kompaniyangiz yangi loyiha qilgan bo'lsa, hatto eng kuchli LLM ham bu haqda bilmaydi.

2. Private Data — Maxfiy ma'lumotlarga kirish yo'qligi

LLM lar faqat internet dagi ommaviy ma'lumotlar bilan o'qitilgan. Sizning ichki hujjatlar, korporativ bazalar, CRM ma'lumotlari, shartnomalar — bularning hech biri LLM da yo'q.

yaml3 qator
Foydalanuvchi: "Nihol kompaniyasi Ucell uchun qanday loyiha qilgan?"
ChatGPT:       "Nihol kompaniyasi haqida aniq ma'lumotim yo'q.
                Iltimos, kompaniya veb-saytini tekshiring."

ChatGPT Nihol kompaniyasi haqida hech narsa bilmaydi — chunki nihol.uz saytidagi ma'lumotlar uning training data siga kirmagan yoki juda kam kiritilgan.

3. Hallucination — Gallyutsinatsiya

Bu eng xavfli cheklov. LLM bilmagan narsani so'rasangiz, u gohida ishonchli ko'rinadigan, lekin to'liq soxta javob beradi.

yaml3 qator
Foydalanuvchi: "Nihol kompaniyasi Ucell uchun qanday loyiha qilgan?"
ChatGPT:       "Nihol kompaniyasi Ucell uchun tarmoq infratuzilmasini
                modernizatsiya qilish loyihasini amalga oshirgan."  # <-- SOXTA!

Bu javob ishonchli ko'rinadi, lekin bu to'liq uydirilgan. Haqiqatda Nihol Ucell uchun IBM Power CPU VRM modullarini yetkazib berish va Dell PowerEdge billing modernizatsiyasini amalga oshirgan. LLM buni bilmaydi, shuning uchun o'ylab topadi.


RAG bilan farq: Haqiqiy ma'lumot bazasidan javob

Endi xuddi shu savolni RAG tizimiga beraylik. Bizning Nihol loyihasidagi tizim qanday ishlaydi:

python12 qator
Foydalanuvchi: "Nihol kompaniyasi Ucell uchun qanday loyiha qilgan?"

RAG tizimi:
  1. Savolni embedding ga aylantiradi (Qwen3-embedding modeli)
  2. PostgreSQL + pgvector da eng o'xshash chunk larni qidiradi
  3. Eng tegishli chunk larni tanlaydi (top-3 + kalit so'z mosliklari)
  4. LLM ga FAQAT topilgan ma'lumotlar bilan javob berdiriladi

Javob:    "Nihol kompaniyasi Ucell uchun quyidagi loyihalarni amalga oshirgan:
           1. IBM Power CPU VRM modullarini yetkazib berish
           2. Dell PowerEdge billing modernizatsiyasi
           3. Tarmoq monitoring tizimini joriy etish"

Farqni ko'ryapsizmi? RAG tizimi o'ylab topmaydi — u bazadagi haqiqiy ma'lumotlardan javob beradi. Agar bazada ma'lumot bo'lmasa, ochiq aytadi: "Ma'lumot topilmadi."


RAG nima? Retrieval-Augmented Generation

RAG — Retrieval-Augmented Generation — bu LLM ni tashqi bilim bazasi bilan boyitish usuli. Tushunish uchun kutubxonachi analogiyasini ko'raylik.

Kutubxonachi analogiyasi

Tasavvur qiling, juda bilimdon professor bor (bu LLM). U million kitob o'qigan, lekin: - Oxirgi 2 yilning yangi kitoblarini o'qimagan (knowledge cutoff) - Sizning kompaniyangiz ichki hujjatlarini ko'rmagan (private data) - Bilmagan savolingizga ishonchli javob uydirib berishi mumkin (hallucination)

Endi professorga shaxsiy kutubxonachi biriktiramiz. Kutubxonachi: 1. Savolingizni eshitadi 2. Kutubxonaga (bilim bazasiga) boradi 3. Eng tegishli kitob va sahifalarni topadi 4. Professorga olib keladi: "Mana, shu sahifalarga qarang" 5. Professor FAQAT shu sahifalar asosida javob beradi

matn14 qator
+------------------+     +-------------------+     +------------------+
|                  |     |                   |     |                  |
|   Foydalanuvchi  | --> |   Kutubxonachi    | --> |    Professor     |
|   (Savol beradi) |     |   (Retrieval)     |     |   (Generation)  |
|                  |     |                   |     |                  |
+------------------+     +-------------------+     +------------------+
                              |                          |
                              v                          v
                         +-----------+            +-------------+
                         | Bilim     |            | Javob faqat |
                         | bazasi    |            | topilgan    |
                         | (pgvector)|            | ma'lumotlar |
                         +-----------+            | asosida     |
                                                  +-------------+

Kodda bu qanday ko'rinadi? Bizning Nihol loyihasidan haqiqiy misol:

python24 qator
# 1. Savolni embedding ga aylantirish (kutubxonachi savolni tushunishi)
def generate_query_embedding(text_input: str) -> list[float] | None:
    resp = httpx.post(
        f"{settings.OLLAMA_URL}/api/embed",
        json={"model": "qwen3-embedding:8b", "input": text_input},
    )
    return resp.json()["embeddings"][0]  # 4096 o'lchamli vektor

# 2. Bazadan eng o'xshash chunk larni qidirish (kutubxonachi kitob qidirishi)
sql = """
    SELECT chunk_text,
           1 - (embedding_local <=> :vec) AS similarity
    FROM wde.lv_content_chunks
    WHERE embedding_local IS NOT NULL
    ORDER BY embedding_local <=> :vec
    LIMIT 10
"""

# 3. LLM ga context bilan savol berish (professor javob berishi)
messages = [
    {"role": "system", "content": "FAQAT quyidagi CONTEXT asosida javob ber."},
    {"role": "system", "content": f"CONTEXT:\n\n{topilgan_chunklar}"},
    {"role": "user", "content": "Nihol Ucell uchun nima qilgan?"},
]

RAG vs Fine-tuning vs Prompt Engineering

LLM ni maxsus bilimlar bilan boyitishning uchta yo'li bor. Har birining o'z joyi bor.

Xususiyat Prompt Engineering RAG Fine-tuning
Mohiyati LLM ga prompt orqali ko'rsatma va context berish Tashqi bazadan qidirib, topilgan ma'lumotni LLM ga berish LLM ni yangi ma'lumotlar ustida qayta o'qitish
Murakkabligi Past O'rta Yuqori
Narxi Bepul (faqat API cost) O'rtacha (baza + embedding) Yuqori (GPU, vaqt, ekspert)
Ma'lumot yangilanishi Har safar prompt da yozish kerak Bazaga qo'shsangiz — darrov ishlaydi Qayta o'qitish kerak (soatlab/kunlab)
Ma'lumot hajmi 4K-128K token (context window) Millionlab hujjatlar O'qitish uchun minglab misollar
Hallucination nazorati Past (LLM o'zi hal qiladi) Yuqori (faqat bazadagi ma'lumot) O'rta (o'qitish sifatiga bog'liq)
Shaxsiylashtirish Past Yuqori Juda yuqori
Misol "Sen Nihol kompaniyasi assistentisan. Mana loyihalar ro'yxati: ..." Savol keldi -> bazadan qidirdi -> topilgan ma'lumot bilan javob berdi Qwen3 ni Nihol ma'lumotlari bilan qayta o'qitish

Prompt Engineering — eng oddiy

python9 qator
# Barcha ma'lumotni prompt ga yozib qo'yish
prompt = """Sen Nihol kompaniyasi assistentisan.
Kompaniya loyihalari:
1. Ucell — IBM Power CPU VRM modullari
2. COSCOM — billing tizimi
3. Orient Finans Bank — SWIFT integratsiya
...
Savol: {user_question}
"""

Muammo: Context window chegarasi bor. 100 ta loyihani prompt ga sig'dirsangiz bo'ladi, 10,000 ta loyihani sig'dira olmaysiz.

Fine-tuning — eng murakkab

python11 qator
# Ma'lumotlarni o'qitish formatiga tayyorlash
training_data = [
    {
        "messages": [
            {"role": "user", "content": "Ucell loyihasi haqida gapirib bering"},
            {"role": "assistant", "content": "Nihol Ucell uchun IBM Power..."}
        ]
    },
    # ... minglab bunday misollar kerak
]
# Keyin GPU da soatlab o'qitish

Muammo: Yangi loyiha qo'shilsa — qaytadan o'qitish kerak. Qimmat va sekin.

RAG — o'rtacha murakkablik, eng moslashuvchan

python7 qator
# Ma'lumotni bazaga qo'shish — bir necha soniya
chunk = "Nihol 2025-yilda Yangi Loyiha amalga oshirdi..."
embedding = generate_query_embedding(chunk)
db.execute("INSERT INTO chunks (chunk_text, embedding_local) VALUES (:t, :e)",
           {"t": chunk, "e": str(embedding)})

# Shu zahoti foydalanuvchi so'rasa — javob bera oladi

Afzallik: Ma'lumot qo'shsangiz — darrov ishlaydi. O'qitish shart emas.


Qachon RAG ishlatish kerak?

RAG mos keladigan holatlar

  1. Kompaniya bilim bazasi — Nihol loyihasimizdek. Saytdagi barcha ma'lumotlar bazada, chatbot javob beradi.
  2. Tez-tez yangilanadigan ma'lumot — yangiliklar, loyihalar, mahsulotlar. Bazaga qo'shsangiz bas.
  3. Katta hajmdagi hujjatlar — minglab sahifalar, PDF lar, shartnomalar.
  4. Aniq javob kerak — hallucination qabul qilib bo'lmaydigan holatlar (tibbiyot, huquq, moliya).
  5. Manba ko'rsatish kerak — RAG har bir javob uchun qaysi hujjatdan olgani ma'lum.

RAG mos kelmaydigan holatlar

  1. Umumiy bilim savollari — "Python nima?" degan savolga RAG kerak emas, LLM o'zi biladi.
  2. Kreativ yozish — she'r yozish, hikoya yozishga RAG keraksiz.
  3. Kod yozish — dasturlash uchun LLM ning o'z bilimi yetarli (ko'p hollarda).
  4. Real-time ma'lumot — ob-havo, valyuta kursi — buning uchun API integration kerak, RAG emas.
  5. Juda kichik ma'lumot bazasi — 10-20 ta hujjat bo'lsa, prompt engineering yetarli.

Nihol loyihasining umumiy ko'rinishi

Bizning real loyiha qanday ishlaydi — yuqori darajada:

matn44 qator
nihol.uz sayti                    Foydalanuvchi (Telegram)
     |                                    |
     v                                    v
+-----------+                    +------------------+
| Scraper   |                    | FastAPI endpoint |
| (Extract) |                    | /api/chat        |
+-----+-----+                    +--------+---------+
      |                                    |
      v                                    v
+-----------+                    +------------------+
| Chunker   |                    | expand_query()   |
| (Split)   |                    | LLM so'rovni     |
+-----+-----+                    | kengaytiradi:    |
      |                                  | sinonim, termin |
      v                                  | qo'shadi        |
+-----------+                    +--------+---------+
| Embedding |                             |
| Qwen3-emb |                            v
| 4096 dim  |                    +------------------+
+-----+-----+                    | retrieve_chunks()|
      |                          | pgvector search  |
      v                          | cosine distance  |
+-----------+                    +--------+---------+
| PostgreSQL|                             |
| pgvector  | <---------qidirish----------+
| wde schema|                             |
+-----------+                             v
                                 +----------------------+
                                 |select_context_chunks()|
                                 | Top 3 + kalit so'z   |
                                 | mosliklari, max 8    |
                                 +--------+-------------+
                                          |
                                          v
                                 +------------------+
                                 | build_prompt()   |
                                 | CONTEXT + Savol  |
                                 +--------+---------+
                                          |
                                          v
                                 +------------------+
                                 | Qwen3:8b LLM    |
                                 | Javob generatsiya|
                                 +------------------+

Texnologiyalar: - Backend: FastAPI (Python) - Ma'lumotlar bazasi: PostgreSQL + pgvector extension - Embedding modeli: Qwen3-embedding:8b (4096 dimension) - Chat modeli: Qwen3:8b (Ollama orqali local) - Chunk tanlash: Heuristik -- top-3 + kalit so'z mosliklari (reranker modelsiz) - Til aniqlash: Kirill vs Lotin harf soni orqali (RU/UZ)


Xulosa

RAG — bu LLM ning eng katta kamchiliklarini hal qiluvchi arxitektura. U: - Knowledge cutoff muammosini hal qiladi (bazaga yangi ma'lumot qo'shing — darrov ishlaydi) - Private data muammosini hal qiladi (o'z hujjatlaringizni bazaga yuklang) - Hallucination ni kamaytiradi (LLM faqat topilgan ma'lumotlar asosida javob beradi)

Keyingi bobda RAG ning turli xillarini ko'rib chiqamiz — Naive RAG dan Agentic RAG gacha.


</> Loyihaning haqiqiy kodi — bu bob amalda qanday ishlaydi

app/config.py — barcha sozlamalar

python42 qator
from functools import lru_cache
from os import getenv
from dotenv import load_dotenv

load_dotenv()


class Settings:
    DB_HOST: str = getenv("DB_HOST", "localhost")
    DB_PORT: str = getenv("DB_PORT", "5432")
    DB_USER: str = getenv("DB_USER", "postgres")
    DB_PASSWORD: str = getenv("DB_PASSWORD", "")
    DB_NAME: str = getenv("DB_NAME", "web_data_extractor")

    SESSION_SECRET: str = getenv("SESSION_SECRET", "")

    OLLAMA_URL: str = getenv("OLLAMA_URL", "http://127.0.0.1:11434")
    EMBED_OLLAMA_URL: str = getenv("EMBED_OLLAMA_URL") or getenv("OLLAMA_URL", "http://127.0.0.1:11434")
    EMBED_MODEL: str = getenv("EMBED_MODEL", "qwen3-embedding:8b")
    EMBED_DIMENSIONS: int = int(getenv("EMBED_DIMENSIONS", "4096"))
    #CHAT_MODEL: str = getenv("CHAT_MODEL", "qwen3.5:9b")
    CHAT_MODEL: str = getenv("CHAT_MODEL", "qwen3:8b")
    RERANK_MODEL: str = getenv("RERANK_MODEL", "dengcao/Qwen3-Reranker-8B:Q5_K_M")

    RAG_TOP_K: int = int(getenv("RAG_TOP_K", "15"))
    RAG_RERANK_TOP: int = int(getenv("RAG_RERANK_TOP", "8"))
    RAG_TEMPERATURE: float = float(getenv("RAG_TEMPERATURE", "0.0"))
    RAG_SIMILARITY_THRESHOLD: float = float(getenv("RAG_SIMILARITY_THRESHOLD", "0.0"))

    PUBLIC_RATE_LIMIT_PER_MIN: int = int(getenv("PUBLIC_RATE_LIMIT_PER_MIN", "10"))

    @property
    def DATABASE_URL(self) -> str:
        return (
            f"postgresql://{self.DB_USER}:{self.DB_PASSWORD}"
            f"@{self.DB_HOST}:{self.DB_PORT}/{self.DB_NAME}"
        )


@lru_cache
def get_settings() -> Settings:
    return Settings()

app/services/chat.py — til aniqlash

python6 qator
def detect_lang(text_input: str) -> str:
    if any(c in _UZ_CYRILLIC for c in text_input):
        return "UZ"
    if any("\u0400" <= c <= "\u04ff" for c in text_input):
        return "RU"
    return "UZ"

Bu bobni bepul o'qidingiz.

Kitob o'rgatadi, lekin sizning kodingiz nega ishlamaganini ayta olmaydi. Kursda uy vazifangiz tekshiriladi.

Telegramda yozish Narxlar