trelix v1.0'dan v2.7'ye: "Çalışıyor" ile "Ölçekleniyor" Arasındaki İnce Çizgi Yazılım

trelix v1.0'dan v2.7'ye: "Çalışıyor" ile "Ölçekleniyor" Arasındaki İnce Çizgi

trelix v1.0'dan v2.7'ye 13 günde ulaştı: bilgi grafiği, 7 bacaklı füzyon, ajan döngüsü ve daha fazlası. İşte teknik detaylar.

trelix v1.0.0'ı yayınladıktan tam 12 gün sonra, ekranda birbiriyle çelişen iki farklı RetrievalConfig değeri setiyle karşı karşıyaydım ve hangisinin gerçekten çalıştığına dair en ufak bir fikrim yoktu. AdaptiveRouter'a bir retrieval_config parametresi eklemiştim, böylece çağıranlar ortam değişkenleriyle belirlenen varsayılanları programlı olarak geçersiz kılabilecekti. Ama olmadı. Kurucu metot parametreyi aldı, sonra sessizce yok saydı ve kendi örneğini yine ortam değişkenlerinden oluşturdu. Hiç kimse Retriever'dan QueryPlanner'a, oradan da AdaptiveRouter.__init__'e giden boru hattını döşememişti. Bu, hata fırlatmayan ama dikkatlice ayarladığınız konfigürasyonu bir yem haline getiren türden bir hataydı.

Bu düzeltme v2.7.0 ile, PR #55 ile, lansmandan 13 gün ve 7 küçük sürüm sonra geldi. Bu arada trelix, 'depomu iyi ara' olmaktan çıkıp bir platforma dönüştü: bir bilgi grafiği, yedi füzyon bacağı, bir ajan döngüsü, federatif çoklu-depo arama ve PR'larınızı inceleyen bir GitHub Actions botu. İşte gerçekte yayınlananlar, sürüm numarasına göre değil, çözmeye çalıştıkları soruna göre gruplandırılmış halde.

Düz aramadan bilgi grafiğine geçiş: v1.0 zaten hibrit BM25 + vektör + çağrı grafiği aramasına sahipti. Eksik olan, kod tabanını bir sistem olarak ele alma fikriydi. v2.0.0 ve v2.1.0 bu sorunu çözdü. Yeni trelix/graph/ modülü, NetworkX MultiDiGraph ile bir CodeGraph oluşturuyor; çağrı, içe aktarma ve tür kenarlarını tek bir gezilebilir yapıda birleştiriyor. Bunun üzerine Louvain topluluk tespiti, grafiği mimari modüllere ayırıyor. ConceptExtractor, sembol gruplarının üzerine bir LLM yerleştirerek bu toplulukları düz İngilizce ile adlandırıyor ve sessizce başarısız olacak şekilde tasarlanmış: herhangi bir çıkarma hatası [] döndürüyor. GraphVisualizer.export_html() ise her şeyi etkileşimli bir Pyvis HTML sayfası olarak render ediyor.

Detaylar ve Etkileri

Grafik arama, birinci sınıf bir erişim bacağı haline geldi. pagerank_boost_enabled ise ithalat grafiği merkeziliğini kullanarak mimari darboğazlardaki sembolleri öne çıkarıyor. Bunların hiçbiri statik değil: GraphUpdater.update_file() trelix watch'a bağlı, böylece grafik ve toplulukları dosyalar değiştikçe artımlı olarak güncelleniyor. Bu sürümle birlikte bilinçli bir kırılma değişikliği de geldi: trelix graph komutu artık 'bana bu sembolün çağıranlarını ve çağrılanlarını göster' anlamına gelen trelix call-graph olarak yeniden adlandırıldı. Artık trelix graph, 'bilgi grafiğini oluştur' anlamına geliyor.

Önemli Gelişmeler

Yedi bacak, tek füzyon fonksiyonu: v1.0'da üç erişim bacağı vardı. v2.2.0 itibarıyla bu sayı yediye çıktı ve her biri bir sezgiye değil, belirli bir makaleye dayanıyor. Dördüncü bacak yukarıdaki grafik BFS'si. Beşincisi RAPTOR tarzı dosya düzeyinde özetleme. Altıncısı HyDE: ham doğal dil sorgunuzu gömmek yerine, sentetik bir kod parçası oluşturup onu gömüyor. Yedincisi çoklu sorgu genişletme: bir sorguyu N varyanta ayırıp bağımsız erişimleri RRF ile birleştiriyor. Tüm bunların üzerinde FLARE yer alıyor: belirsizlik ifadeleri için sentez çıktısını izleyen ve gerekirse yeniden erişim tetikleyen bir döngü.

Teknik Analiz

Bunların hiçbiri, gerçekten daha iyi olup olmadığını ölçmenin bir yolu olmadan yayınlanmaya değmez. Bu yüzden v2.1.0, CoIR formatında bir değerlendirme düzeneği ekledi. Her sorgu artık bir query_telemetry SQLite tablosuna bir satır yazıyor. Burada önemli detay: v2.1.0'da MultiQueryExpander bir sınıf olarak vardı ama onu çağıran yoktu. v2.3.0'a kadar _retrieve_standard'e bağlanmadı ve o zaman bile dikkatli olmak gerekiyordu: variants[1:] kullanılıyor, variants[:] değil, böylece orijinal sorgu füzyondan iki kez geçmiyor.

Harekete geçmeyi öğretmek: v2.2.0, trelix'in salt bir erişim sistemi olmaktan çıktığı sürüm. Ajan döngüsü (trelix/agent/), CodeAct tarzı ReAct: tek bir erişim-sonra-sentez geçişi yerine, ajan başka bir arama yapmaya karar verebiliyor, onu çalıştırıp sonucu muhakemesine dahil edebiliyor. Bunun yanında, trelix/analysis/taint.py ve defuse.py gerçek veri akışı ve leke analizi ekledi. Diğer iki dal erişim kalitesi üzerineydi: SPLADE-Code seyrek erişim ve seyrek depolama.

Gelecekte Ne Bekleniyor?

Federatif arama ve PR botu: v2.4.0, trelix'in birden fazla depoda arama yapmasını sağlayan federatif aramayı getirdi. v2.5.0, PR'ları otomatik olarak inceleyen bir GitHub Actions botu ekledi. Hata düzeltmeleri de geldi: v2.6.0'da bir bellek sızıntısı giderildi. 13 günlük bu yolculuk, 'çalışıyor'dan 'ölçekleniyor'a geçişin hızlı ama kontrollü bir örneği. Her özellik bir makaleye dayanıyor, her değişiklik bir PR ile belgeleniyor. trelix'in hikayesi, bir yazılım projesinin nasıl hızla büyüyebileceğini ve aynı anda nasıl sağlam kalabileceğini gösteriyor.

Kaynak: dev.to

Paylaş: