Tayyorgarlik: PostgreSQL va pgvector
Bu bob kod yozish haqida emas. Bu bob devor haqida.
Har bir RAG loyihasi shu devorga uriladi: vektorlarni saqlash uchun maxsus
baza kerak. Oddiy PostgreSQL yetarli emas — unga pgvector kengaytmasi
kerak. Va aynan shu o'rnatish bosqichida talabalarning yarmi to'xtaydi.
Shuning uchun bu bob birinchi. Uni darsdan oldin hal qiling.
Bizga nima kerak
| Dastur | Versiya | Nima uchun |
|---|---|---|
| Python | 3.10+ | loyiha tili |
| PostgreSQL | 13+ | ma'lumot bazasi |
| pgvector | 0.5+ | vektor saqlash va qidirish |
| Ollama | oxirgi | embedding va LLM (lokal) |
PostgreSQL 13+ shart. Sababi: biz gen_random_uuid() funksiyasidan
foydalanamiz — u 13-versiyadan boshlab yadroga kiritilgan. Eski
versiyalarda uuid-ossp kengaytmasi kerak bo'ladi va u ba'zi tizimlarda
umuman mavjud emas.
Yo'l A: Windows — tavsiya etiladi
Windows'da eng ishonchli yo'l — rasmiy o'rnatuvchi.
postgresql.org/download/windowsdan o'rnatuvchini yuklab oling- O'rnatishda parolni yozib qo'ying — keyin kerak bo'ladi
- Port
5432— o'zgartirmang
Keyin pgvector. Windows uchun eng oson yo'l — tayyor build:
# StackBuilder orqali yoki: # github.com/pgvector/pgvector/releases dan Windows DLL ni oling # vector.dll -> C:\Program Files\PostgreSQL\16\lib\ # vector.control + vector--*.sql -> ...\16\share\extension\
Tekshirish:
CREATE EXTENSION vector; SELECT extversion FROM pg_extension WHERE extname = 'vector';
Agar versiya raqami chiqsa — tayyor.
Yo'l B: WSL / Linux
sudo apt update sudo apt install postgresql-16 postgresql-16-pgvector sudo service postgresql start
Parol o'rnatish:
sudo -u postgres psql -c "ALTER USER postgres PASSWORD 'parol';"
Yo'l C: sudo YO'Q bo'lsa
Bu holat universitet kompyuterlarida tez-tez uchraydi: sudo yo'q,
PostgreSQL o'rnatib bo'lmaydi.
Yechim bor — pgserver paketi. U PostgreSQL binarylarini pip orqali
o'rnatadi, administrator huquqisiz:
pip install pgserver
Ishga tushirish:
import pgserver # Ma'lumotlar shu papkada saqlanadi db = pgserver.get_server("/tmp/mening_bazam") print(db.get_uri())
Bu PostgreSQL 16 ni pgvector bilan birga beradi. Hech qanday sudo
kerak emas.
Diqqat: pgserver soket orqali ishlaydi. Loyihamiz esa TCP kutadi.
Shuning uchun konfiguratsiyaga port qo'shish kerak:
# /tmp/mening_bazam/postgresql.conf oxiriga: listen_addresses = 'localhost' port = 55432
Keyin .env faylida DB_PORT=55432 yozasiz.
Yo'l D: Docker
Agar Docker bilan tanish bo'lsangiz — bu eng tez yo'l:
docker run -d \ --name rag-postgres \ -e POSTGRES_PASSWORD=parol \ -p 5432:5432 \ pgvector/pgvector:pg16
pgvector/pgvector image'ida kengaytma allaqachon o'rnatilgan.
Hech narsa qo'shish shart emas.
Ollama o'rnatish
Embedding va javob generatsiyasi uchun. Internet kerak emas, hammasi kompyuteringizda ishlaydi.
# ollama.com/download dan oling, keyin: ollama pull bge-m3 # embedding modeli, 1024 o'lchamli ollama pull qwen2.5:7b # javob yozadigan model
Tekshirish:
curl http://localhost:11434/api/tags
Modellar ro'yxati JSON ko'rinishida chiqishi kerak.
bge-m3 nega? U ko'p tilli — o'zbek va rus matnlarini bir xil vektor fazosida joylashtiradi. Bizning bot ikkala tilda ishlaydi.
Yakuniy tekshiruv
Keyingi bobga o'tishdan oldin bu uchtasi ishlashi kerak:
python --version # 3.10+ psql -U postgres -c "SELECT version();" # PostgreSQL javob beradi curl http://localhost:11434/api/tags # Ollama javob beradi
Uchalasi ishlasa — 1-bobga o'ting.
Eng ko'p uchraydigan xatolar
extension "vector" is not available
pgvector o'rnatilmagan. Yo'l A/B ga qayting. Docker (Yo'l D) bu
muammoni butunlay yo'q qiladi.
connection refused
PostgreSQL ishlamayapti. sudo service postgresql start yoki
Windows'da Services panelidan yoqing.
password authentication failed
Parol noto'g'ri. .env faylidagi DB_PASSWORD ni tekshiring.
Ollama javob bermayapti
ollama serve buyrug'ini alohida terminalda ishga tushiring.
Bu bobni bepul o'qidingiz.
Kitob o'rgatadi, lekin sizning kodingiz nega ishlamaganini ayta olmaydi. Kursda uy vazifangiz tekshiriladi.