Asosiy qismga o'tish

LOCAL va CLOUD — ikkala rejim

10-bob 6 kod bloki 399 so'z

Loyiha ikki rejimda ishlaydi. .env dagi bitta qator hal qiladi:

python2 qator
BACKEND_MODE=local     # kompyuterda (Ollama)
BACKEND_MODE=cloud     # internet orqali (OpenRouter + Jina)

Farqi

LOCAL CLOUD
Embedding Ollama bge-m3 Jina AI
LLM Ollama qwen3:8b OpenRouter
O'lcham 1024 1536
GPU kerak kerak emas
Internet kerak emas kerak
Narx bepul so'rov boshiga to'lov
Maxfiylik ma'lumot chiqmaydi ma'lumot API ga ketadi

Maxfiylik qatoriga alohida e'tibor bering. Agar hujjatlar maxfiy bo'lsa (shartnoma, shaxsiy ma'lumot), cloud rejim ularni tashqi serverga yuboradi. Ba'zi tashkilotlarda bu taqiqlangan.

ENG MUHIM: ikki xil ustun

python2 qator
embedding_local vector(1024)    -- Ollama bge-m3
embedding_cloud vector(1536)    -- Jina

Nega ikkita? Chunki o'lchamlar har xil va vektorlarni aralashtirib bo'lmaydi.

bge-m3 yaratgan vektor va Jina yaratgan vektor — butunlay boshqa fazolarda. Ularni solishtirish ma'nosiz, xuddi kilogrammni metr bilan taqqoslagandek.

Amaliy natija: rejimni almashtirsangiz, hamma narsani qaytadan embedding qilish kerak:

bash10 qator
# local -> cloud almashtirdingiz
BACKEND_MODE=cloud

# endi embedding_cloud ustuni BO'SH — to'ldirish kerak
python -c "
from app.database import SessionLocal
from scraper.embedder import embed_all_chunks
db = SessionLocal()
print(embed_all_chunks(db))
db.close()"

Yaxshi tomoni: embedding_local o'chmaydi. Orqaga qaytsangiz, qayta hisoblash shart emas.

Qidiruv qaysi ustunni tanlaydi

python1 qator
ustun = "embedding_local" if settings.is_local else "embedding_cloud"

Bitta qator. BACKEND_MODE o'zgarsa — qidiruv avtomatik boshqa ustunga o'tadi.

Agar o'sha ustun bo'sh bo'lsa — qidiruv HECH NARSA topmaydi va xato ham bermaydi. Shunchaki bo'sh natija. Buni bilmasangiz, sababini topish qiyin.

Shuning uchun tekshiring:

sql3 qator
SELECT count(embedding_local) AS lokal,
       count(embedding_cloud) AS cloud
FROM rag.chunks;

Cloud sozlamalari

python7 qator
BACKEND_MODE=cloud

OPENROUTER_API_KEY=sk-or-...
OPENROUTER_MODEL=qwen/qwen3-8b

JINA_API_KEY=jina_...
JINA_EMBED_MODEL=jina-embeddings-v3

API kalitlar .env da, kodda EMAS. .env esa .gitignore da. Kalit git'ga tushsa — uni darhol bekor qiling, tarixdan o'chirish deyarli imkonsiz.

Qaysi birini tanlash

LOCAL tanlang, agar: - GPU bor (8 GB dan yuqori) - ma'lumot maxfiy - so'rov ko'p (cloud qimmatga tushadi) - internet ishonchsiz

CLOUD tanlang, agar: - GPU yo'q yoki zaif - ma'lumot ochiq - so'rov kam - eng kuchli modellar kerak

Darsda ikkalasini ko'rsating

Talabalarning hammasida GPU bo'lmaydi. Shuning uchun:

  1. Sizda LOCAL ishlaydi — demo qilasiz
  2. GPU siz talabalar CLOUD bilan ishlaydi

Kod bir xil. Faqat .env farq qiladi. Bu yaxshi arxitektura belgisi: ishlash tafsiloti sozlamada, kodda emas.


Bu bobni bepul o'qidingiz.

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

Telegramda yozish Narxlar