Papka tuzilishi
Birinchi savol: qaysi papkani birinchi yaratamiz?
Javob muhim, chunki papka tuzilishi — bu loyihaning skeleti. Noto'g'ri boshlasangiz, keyin hamma narsani ko'chirishga to'g'ri keladi.
Yaratamiz
mkdir RagDemo cd RagDemo python -m venv venv source venv/bin/activate # Windows: venv\Scripts\activate
venv nega birinchi? Chunki paketlarni tizim Python'iga o'rnatmaslik kerak. Har bir loyihaning o'z paketlari bo'ladi. Buni birinchi kunda o'rganmasangiz — uchinchi loyihada versiya konflikti chiqadi.
Endi skelet:
mkdir -p app/models app/routes app/services app/templates mkdir scraper touch app/__init__.py app/models/__init__.py touch app/routes/__init__.py app/services/__init__.py touch scraper/__init__.py
Nima uchun aynan shunday
RagDemo/
├── .env <- parollar. GIT'GA TUSHMAYDI
├── .env.example <- namuna. Bu git'ga tushadi
├── requirements.txt <- paketlar ro'yxati
├── bootstrap.py <- bazani noldan quradi
├── run.py <- ilovani ishga tushiradi
├── demo_pipeline.py <- RAG ni qadam-baqadam ko'rsatadi
│
├── app/ <- WEB ILOVA
│ ├── config.py <- barcha sozlamalar bitta joyda
│ ├── database.py <- bazaga ulanish
│ ├── main.py <- FastAPI ilovasi
│ ├── models/ <- jadval ta'riflari
│ ├── routes/ <- URL manzillar
│ ├── services/ <- RAG MANTIG'I (eng muhim papka)
│ └── templates/ <- HTML sahifalar
│
└── scraper/ <- MA'LUMOT TAYYORLASH
├── pdf_parser.py <- PDF -> matn
├── web_scraper.py <- sayt -> matn
├── normalizer.py <- matnni tozalash
├── chunker.py <- matnni bo'laklash
└── embedder.py <- bo'lak -> vektor
Asosiy g'oya: app/ va scraper/ ALOHIDA.
Sababi shundaki, ular turli vaqtda ishlaydi:
scraper/— bir marta ishlaydi, ma'lumotni tayyorlaydiapp/— doim ishlaydi, foydalanuvchi savollariga javob beradi
Agar ularni aralashtirsangiz, saytni yangilash uchun butun ilovani
qayta ishga tushirishga to'g'ri keladi. Ajratilgan bo'lsa —
scraper ni alohida ishga tushirasiz, ilova esa ishlab turaveradi.
services/ nega alohida? Chunki RAG mantig'i (qidiruv, reranking,
javob yozish) HTTP dan mustaqil bo'lishi kerak. Bugun web, ertaga
Telegram bot — mantiq o'zgarmaydi, faqat routes/ o'zgaradi.
requirements.txt
fastapi uvicorn[standard] jinja2 python-multipart sqlalchemy psycopg2-binary pgvector pydantic-settings httpx PyMuPDF beautifulsoup4
O'rnatamiz:
pip install -r requirements.txt
Har biri nima uchun:
| Paket | Vazifasi |
|---|---|
fastapi + uvicorn |
web server |
jinja2 |
HTML shablonlar |
sqlalchemy |
bazaga Python orqali murojaat |
psycopg2-binary |
PostgreSQL drayveri |
pgvector |
SQLAlchemy uchun Vector ustun turi |
httpx |
Ollama ga so'rov yuborish |
PyMuPDF |
PDF o'qish |
beautifulsoup4 |
HTML dan matn ajratish |
.gitignore
venv/ __pycache__/ .env *.pyc
.env ni birinchi qatorga yozing. Parol git'ga tushsa — uni
o'chirish deyarli imkonsiz, tarixda qoladi.
Tekshiruv
python -c "import fastapi, sqlalchemy, pgvector, fitz; print('paketlar joyida')"
Bu ishlasa — 2-bobga.
Bu bobni bepul o'qidingiz.
Kitob o'rgatadi, lekin sizning kodingiz nega ishlamaganini ayta olmaydi. Kursda uy vazifangiz tekshiriladi.