Asosiy qismga o'tish

Tayyorgarlik: PostgreSQL va pgvector

0-bob 11 kod bloki 549 so'z

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.

  1. postgresql.org/download/windows dan o'rnatuvchini yuklab oling
  2. O'rnatishda parolni yozib qo'ying — keyin kerak bo'ladi
  3. Port 5432 — o'zgartirmang

Keyin pgvector. Windows uchun eng oson yo'l — tayyor build:

matn4 qator
# 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:

python2 qator
CREATE EXTENSION vector;
SELECT extversion FROM pg_extension WHERE extname = 'vector';

Agar versiya raqami chiqsa — tayyor.

Yo'l B: WSL / Linux

matn3 qator
sudo apt update
sudo apt install postgresql-16 postgresql-16-pgvector
sudo service postgresql start

Parol o'rnatish:

matn1 qator
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:

bash1 qator
pip install pgserver

Ishga tushirish:

python5 qator
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:

python3 qator
# /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:

bash5 qator
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.

matn3 qator
# ollama.com/download dan oling, keyin:
ollama pull bge-m3          # embedding modeli, 1024 o'lchamli
ollama pull qwen2.5:7b      # javob yozadigan model

Tekshirish:

bash1 qator
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:

bash3 qator
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.

Telegramda yozish Narxlar