Dokümantasyon / Belgeler ve veri
Bilgi dizini
Bilgi dizini, çalışma alanındaki belgelerde ne yazdığını cevaplar: runbook'lar, postmortem'ler, sözleşmeler, sunumlar. Dizini ivralo index kurar, Librarian bu dizinde arama yapar, ivralo search de aynı sonuçları size gösterir.
Nedir
Tek bir soruyu cevaplamak için bütün belgeyi modelin bağlamına okumak yavaştır; uzun bir belge zaten sığmaz. Bunun yerine ivralo index çalışma alanındaki belgeleri parçalara böler, her parçayı embedding modeliyle bir vektöre çevirir ve hepsini pgvector eklentili PostgreSQL'e kaydeder. Bu kayıtlar diğer her şeyle aynı ivralo şemasında durur.
Librarian dizinde arama yapar ve cevabını dosyayı ve sayfayı, bölümü ya da slaytı belirterek verir. documents skill'i ona aittir.
ivralo index
ivralo search "payments servisi için rollback prosedürü"
Oturum içinde /index ve /find <sorgu> aynı işi yapar.
Dizine neler girer
| Tür | Nasıl bölünür | Sonuçta ne görünür |
|---|---|---|
.pdf | her sayfa bir parça | dosya ve sayfa |
.docx | başlık stillerine göre; tablolar düzleştirilir | dosya ve bölüm yolu |
.md | # başlıklarına göre | dosya ve bölüm yolu |
.pptx | her slayt bir parça | dosya, slayt ve slaytın başlığı |
.txt | boyuta göre | dosya |
Parçalar belgenin kendi doğal sınırlarına göre ayrılır; çünkü sabit boyutlu bir pencere, cevabı taşıyan cümleyi ortasından bölebilir. IVRALO_CHUNK_SIZE'dan uzun bir bölüm paragraf aralarından bölünür ve her parça bölümün adını korur. Metin katmanı olmayan bir PDF OCR'dan geçer; bunun için docling gerekir (ayrıntılar Belgeler ve veri sayfasında).
Gizli klasörler ve ivralo'nun kendi .ivralo/ klasörü hiçbir zaman dizine girmez. Repo'nun IVRALO.md dosyasına bir # Documents bölümü eklerseniz dizin yalnızca orada yazan yollar, klasörler ve glob'larla sınırlanır; kaç dosyanın dışarıda kaldığını ivralo index ve ivralo doctor söyler.
Güncel tutmak
Dizin içeriğe bakarak artımlı güncellenir: değişmeyen dosyalar atlanır, değişenler yeniden embed edilir, silinenler dizinden çıkarılır. Belgeler değiştikten sonra ivralo index'i elle ya da bir zamanlamayla çalıştırın.
| Komut | Ne yapar |
|---|---|
ivralo index | bu çalışma alanının dizinini dosyalarla eşitler |
ivralo index --rebuild | bu çalışma alanının dizinini sıfırdan kurar |
ivralo index --rebuild --all | bütün çalışma alanlarını sıfırdan kurar ve tabloyu yeniden oluşturur |
ivralo search <sorgu> | Librarian'ın alacağı sonuçları gösterir; --limit (-n) ve --json alır |
ivralo index'in çıkış kodu dizinin eşitlenip eşitlenmediğini gösterir. Embed edilmesi gereken her dosya embed edildiyse 0 döner. Embedding modeli hata verdiyse ya da isteği reddettiyse, yapılandırılandan farklı boyutta vektör döndürdüyse, bir dosya okunamadıysa ya da veritabanına ulaşılamadıysa 1 döner. Kullanım hatasında 2 döner. Her sorun stderr'e adıyla yazılır; böylece bir script ya da zamanlama bu koda güvenebilir.
Tek veritabanı, birçok çalışma alanı
Her parça ait olduğu çalışma alanının anahtarını taşır; bu sayede birkaç repo tek veritabanını paylaşabilir. Bir çalışma alanını dizinlemek diğerinin belgelerini asla silmez ve arama yalnızca kendi çalışma alanından sonuç döndürür. --rebuild yalnızca bu çalışma alanının satırlarını temizler. Embedding boyutu değiştiyse çalışmayı reddeder, çünkü tablo ortaktır. Bu durumda --rebuild --all kullanılır. Taşıdığınız ya da adını değiştirdiğiniz bir çalışma alanının eski yoldaki satırlarını temizlemenin yolu da budur.
Arama nasıl sıralar
Arama hibrittir. Vektör tarafı anlamca yakın ifadeleri bulur: "nasıl geri alırız" sorusu "Bir sürümü geri almak" başlıklı bölümü bulur. PostgreSQL'in metin dizini ise tam sözcüğü bulur: bir hata kodu, bir host adı ya da bir ticket numarası gibi; embedding bu tür aramalarda zayıftır. İki tarafın ağırlığını IVRALO_INDEX_VECTOR_WEIGHT belirler.
Anahtar sözcük tarafı bir metin arama yapılandırmasıyla çalışır. Varsayılan simple hiçbir sözcüğü köküne indirmez; bu yüzden E4471 her dilde E4471 ile eşleşir. turkish ya da english seçerseniz o dilin kök bulma kuralları eklenir: turkish ile rapor araması raporlar'ı da bulur. Ayarı değiştirdikten sonra ivralo index'i yeniden çalıştırın: metin dizini yeni dile göre kurulur, hiçbir şey yeniden embed edilmez.
Ayarlar
| Değişken | Varsayılan | Ne işe yarar |
|---|---|---|
IVRALO_KNOWLEDGE | true | false olursa dizin ve Librarian devreden çıkar |
IVRALO_EMBED_MODEL | nomic-embed-text | embedding modeli; değiştirirseniz ivralo index --rebuild gerekir |
IVRALO_EMBED_DIMENSIONS | 768 | vektör boyutu; modelle aynı olmalıdır |
IVRALO_KNOWLEDGE_RESULTS | 5 | arama başına dönen parça sayısı |
IVRALO_CHUNK_SIZE | 1500 | bir parçanın en fazla karakter sayısı |
IVRALO_INDEX_LANGUAGE | simple | anahtar sözcük tarafının metin arama yapılandırması |
IVRALO_INDEX_VECTOR_WEIGHT | 0.5 | vektör tarafının anahtar sözcük tarafına göre ağırlığı, 0 ile 1 arası |
Embedding modeli seçimi Embedding'ler sayfasında anlatılıyor. ivralo doctor eklentiyi denetler, gerçek bir embedding isteği gönderip dönen boyutu kontrol eder, son dizinlemeden bu yana değişen dosyaları sayar ve metin dizininin yapılandırılan dilde kurulu olduğunu doğrular.
Kod dizini değildir
Bilgi dizini belgeler içindir. Kod ayrı dizinlenir: dil sunucusundan ve git'ten alınan bilgilerle, veritabanı olmadan .ivralo/index/ içinde. Bu dizini ivralo index --code kurar. Ayrıntılar Kod analizi sayfasında.