İçeriğe geç
ivralo
Bölümler

Dokümantasyon / Kurulum

PostgreSQL

ivralo durumunu pgvector'lü bir PostgreSQL'de tutar: oturumlar, çalıştırma geçmişi, uzun süreli bellek, job'lar ve bilgi dizini. Bu sayfada veritabanını hangi yollarla edinebileceğiniz, ivralo'nun içine neler koyduğu ve nasıl yedekleneceği anlatılıyor.

İçinde neler var

Konuşmaya ait her şey PostgreSQL'de, ivralo'nun kendi ivralo şemasında tutulur: oturumlar, her çalıştırmanın eksiksiz geçmişi, uzun süreli bellek kayıtları, etkin oturumunuzu gösteren işaretçi, job'lar ve bilgi dizini. Tablolar ilk kullanımda oluşturulur. Konuşmaya ait hiçbir şey yerel diske yazılmaz; bu yüzden aynı veritabanını kullanan ikinci bir makine konuşmaya kaldığı yerden devam edebilir.

pgvector, bilgi dizininin embedding'leri için gereken eklentidir. Oturumlar ve bellek buna ihtiyaç duymaz, ama aşağıdaki bütün yollar onu sağlar; böylece dizini sonradan veritabanını değiştirmeden açabilirsiniz.

PostgreSQL'de bilerek tutulmayan tek şey, bir repo'nun kod dizinidir: .ivralo/index/index.sqlite. Bu, dil sunucusunun ve git'in kod hakkında söylediklerinin önbelleğidir; silerseniz tek bedeli yeniden oluşturulmasıdır.

Veritabanı için dört yol

YolNasılKim başlatıp durdurur
DockerAna dizindeki compose dosyasıyla docker compose up -drestart: unless-stopped ile Docker
Var olan bir veritabanı--postgres <url>, IVRALO_DB_URL olarak yazılırSiz
ivralo'nun oluşturduğu cluster<home>/pg/ altında, Docker yoksaOnu kullanan ivralo süreçleri
Yönetilen cluster--postgres managed, aynı clusterSizin servis yöneticiniz

Geliştirici makinesinde ivralo init, onay verirseniz Docker'ı kullanır. Sunucuda ivralo init --server varsayılan olarak --postgres auto ile çalışır: önce Docker'ı, sonra makinede kurulu bir PostgreSQL'i, en son ivralo[pg] extra'sıyla gelen PostgreSQL'i dener ve hangisini seçtiğini raporunda yazar.

Yeniden çalıştırmak, önceden yapılandırılmış bir veritabanını asla değiştirmez. Değiştirmek için --postgres <url> verin. Verileri bir veritabanından diğerine taşımak ivralo'nun işi değildir.

Docker

Ana dizindeki docker-compose.yml, digest ile sabitlenmiş pgvector/pgvector:pg17 imajını ivralo-postgres adlı bir container olarak, ivralo-pgdata adlı bir volume ile çalıştırır. Portu yalnızca 127.0.0.1 üzerinde açar:

cd ~/ivralo && docker compose up -d

Veritabanı, kullanıcı ve port IVRALO_PG_DB, IVRALO_PG_USER ve IVRALO_PG_PORT ile belirlenir (varsayılanları ivralo, ivralo ve 5432). Temiz bir makinede init, .env'e bir IVRALO_PG_PASSWORD üretir. Hazır gelen varsayılan parola, yalnızca port loopback'e bağlı olduğu için kabul edilebilir; portu başka bir adreste açarsanız veritabanına da kendi parolasını verin.

Compose dosyası makinenin tamamı için tek bir container ve tek bir volume tanımlar. Bu yüzden aynı makinedeki ikinci bir ana dizin aynı veritabanını kullanır ve onun parolasına ihtiyaç duyar: IVRALO_PG_PASSWORD'ü ilk ana dizinin .env'inden kopyalayın.

Var olan bir veritabanı

ivralo init --server --postgres postgresql://ivralo:secret@db.internal:5432/ivralo ...

URL .env'e IVRALO_DB_URL olarak yazılır ve hiçbir zaman ekrana basılmaz; Docker kullanılmaz. ivralo bu veritabanında kendi ivralo şemasını oluşturur, bu yüzden kullanıcının buna yetkisi olmalıdır. Bilgi dizini açıksa veritabanında vector eklentisi de bulunmalıdır: superuser olarak bir kez CREATE EXTENSION vector çalıştırın ya da bunu ivralo index'e bırakın.

ivralo'nun oluşturduğu cluster

Docker yoksa ivralo <home>/pg/ altında kendi PostgreSQL cluster'ını oluşturur:

  • PATH'teki ya da pg_config --bindir'in gösterdiği dizindeki initdb ve pg_ctl ile; bunlar yoksa ivralo[pg] extra'sıyla gelen pgvector'lü PostgreSQL 18 ile (yaklaşık 25 MB'lık bir wheel);
  • üretilmiş bir parola ve 127.0.0.1 üzerinde boş bir port ile; soket ve sudo kullanılmaz;
  • .env'e IVRALO_DB_URL yazılır ve CREATE EXTENSION vector çalıştırılır. pgvector'süz bir PostgreSQL, neyin kurulması gerektiğini söyleyen tek bir satırla reddedilir.

Bu cluster ne bir daemon ne de bir servistir. Veritabanına ihtiyaç duyan her ivralo süreci (bir komut, bir oturum, ivralo serve, zamanlanmış bir çalıştırma) cluster'ı tutar; ilk gelen başlatır, en son çıkan durdurur. Öldürülen bir süreç tuttuğu kaydı geride bırakır; bir sonraki ivralo süreci onu temizler.

Yönetilen

--postgres managed aynı cluster'ı oluşturur, başlatıp durdurmayı sizin servis yöneticinize bırakır. init, cluster'ı başlatan ve durduran pg_ctl satırlarını basar; ivralo bu cluster'ı asla durdurmaz. Programlar extra'dan geliyorsa bu satırlar aracın ortamının içini gösterir; başka bir Python üzerine yeniden kurulum yapılırsa o yol da değişir. Bu yüzden satırları servis dosyasına kurulum oturduktan sonra yazın ve her yükseltmeden sonra ivralo doctor'dan yeniden okuyun.

Kontrol etmek

ivralo doctor'ın postgres bölümü veritabanının nereden geldiğini, cevap verip vermediğini ve portunun hangi adreste açık olduğunu gösterir. ivralo'nun oluşturduğu bir cluster için çıktı şöyledir:

postgres
    ok  postgres from  made by ivralo under /home/ops/ivralo/pg (PostgreSQL <major> programs in <bindir>) - stopped; it starts with the next ivralo
    ok  data directory  /home/ops/ivralo/pg/data · port <port> (loopback only) · pgvector <version>
        back it up with: PGPASSWORD=<the password in IVRALO_DB_URL> <bindir>/pg_dump -h 127.0.0.1 -p <port> -U ivralo ivralo > ivralo-backup.sql
    ok  reachable  PostgreSQL <version> on <platform>

Cevap vermeyen bir veritabanı için bir düzeltme satırı verilir: Docker'daki için start it with: docker compose up -d, sizin URL'sini verdiğiniz bir veritabanı için de URL'yi kontrol etmeniz. Veritabanı parolayı reddettiyse rapor tam olarak bunu söyler. Parola hâlâ varsayılanken Docker'ın portu loopback dışında açıksa satır başarısız olur. knowledge bölümü vector eklentisini kontrol eder; session bölümü de parolası gizlenmiş veritabanı URL'sini ve şemayı gösterir.

Yedekleme

ivralo'nun oluşturduğu bir cluster için doctor, portu ve programın tam yolunu içeren pg_dump satırını eksiksiz basar; parola, ana dizinin .env'indeki IVRALO_DB_URL'de yazan paroladır. Docker'daki veritabanını ya da kendi veritabanınızı, herhangi bir PostgreSQL'i nasıl yedekliyorsanız öyle yedekleyin; ivralo'nun bütün tabloları ivralo şemasındadır:

pg_dump -h 127.0.0.1 -p 5432 -U ivralo ivralo > ivralo-backup.sql

Ayarlar

AyarVarsayılanNe belirler
IVRALO_DB_URLayarlı değilVeritabanı URL'sinin tamamı; host, port, kullanıcı, parola ve veritabanı ayarlarını geçersiz kılar
IVRALO_PG_HOST127.0.0.1Host. localhost değil, çünkü Windows önce ::1'i dener ve her bağlantıda yaklaşık iki saniye kaybeder
IVRALO_PG_PORT5432Port
IVRALO_PG_USERivraloKullanıcı
IVRALO_PG_PASSWORDivraloParola; init bir tane üretir
IVRALO_PG_DBivraloVeritabanı
IVRALO_PG_SCHEMAivraloivralo'nun tablolarının bulunduğu şema