Co tworzę

Rozwijam LocalAI-RAG, aby móc zadawać pytania dużym bazom kodu bez sprowadzania ich do anonimowych fragmentów tekstu. Łączę strukturalne dane z RoslynIndexera, zależności między symbolami i obiektami SQL oraz wyszukiwanie w Weaviate. Pipeline nie kończy pracy na pierwszych wynikach wyszukiwania: potrafi budować kontekst, śledzić relacje i kontrolować jego objętość.

Dlaczego sam retrieval nie wystarcza

W klasycznym RAG trafny fragment metody bywa bezużyteczny bez informacji, kto go wywołuje, z jakiej tabeli czyta dane i co następuje później. Dlatego korzystam z grafu zależności: wyszukiwanie wskazuje punkt zaczepienia, a kolejne akcje dobierają powiązane fragmenty. Dzięki temu buduję materiał dowodowy na podstawie struktury programu, nie tylko podobieństwa wektorowego.

Pipeline jako kontrakt, nie skrypt na sztywno

Przebieg analizy opisuję w YAML: wybór wyszukiwania, pobranie treści węzłów, kontrola budżetu, wywołanie modelu, sprawdzenie wystarczalności kontekstu i ewentualna kolejna iteracja. Pipeline’y mogą dziedziczyć ustawienia, a lockfile utrwala wersje zachowania i wartości domyślne. Zmiany silnika nie powinny po cichu zmieniać sensu istniejącego workflow.

Bezpieczeństwo ma być częścią retrieval

W projekcie rozdzielam uprawnienie do uruchomienia pipeline’u od uprawnienia do zobaczenia konkretnych dokumentów. Dane mogą mieć etykiety ACL i klasyfikację, a wybór modelu lokalnego lub zewnętrznego podlega polityce. Istotne ograniczenie: etykiety zapisane w snapshocie nie aktualizują się automatycznie, gdy źródłowy system zmieni uprawnienia.

Zakres projektu

  • Weaviate BYOV: wyszukiwanie semantyczne, BM25 i hybrydowe; embeddingi obliczane osobno
  • Graf zależności dla kodu C#, SQL i powiązań z EF
  • Pipeline’y YAML: akcje, routing, dziedziczenie, walidacja i lockfile
  • Snapshoty i SnapshotSets jako jawne, wersjonowane konteksty analizy
  • ACL, klasyfikacja danych, autoryzacja pipeline’ów oraz polityki użycia LLM
  • Trace, budżety kontekstu, diagnostyka i testy kontraktowe