LOCAL va CLOUD — ikkala rejim
Loyiha ikki rejimda ishlaydi. .env dagi bitta qator hal qiladi:
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
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:
# 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
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:
SELECT count(embedding_local) AS lokal, count(embedding_cloud) AS cloud FROM rag.chunks;
Cloud sozlamalari
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:
- Sizda LOCAL ishlaydi — demo qilasiz
- 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.