Eksplorowanie wyzwań związanych z pobieraniem informacji — skalowanie i dokładność

Zakończone

Wyszukiwanie rozszerzonej generacji (RAG) zależy od pobierania odpowiednich fragmentów z danych, zanim model odpowie. W miarę zwiększania się zawartości pojawiają się dwa problemy: skalowanie i dokładność. Skalowanie dotyczy sposobu zwiększania rozmiaru danych i wzorców dostępu oraz szybkiego powrotu wyników. Dokładność dotyczy tego, czy wyniki rzeczywiście odpowiadają na pytanie. Jeśli pobieranie jest powolne lub nietrafne, wrażenia pogarszają się niezależnie od siły modelu.

Scale

W narzędziu RAG każde pytanie użytkownika wyzwala wyszukiwanie wektorów najbliższego sąsiada. W miarę dodawania większej liczby wierszy i wykonywania zapytań o dane przez użytkowników jednocześnie wzorce dostępu do danych spowalniają, a ciśnienie współbieżności zwiększa opóźnienie.

Zachowaj pobieranie w usłudze Azure Database for PostgreSQL i zdecyduj, jak wyniki są przeszukiwane i klasyfikowane w bazie danych. pgvector Rozpocznij od wyszukiwania podobieństwa wektorów. Gdy zestawy danych rosną, użyj przybliżonego indeksu, aby uniknąć porównywania zapytań z każdym wierszem. Aby zwiększyć wydajność, pgvector udostępnia opcje indeksu takie jak IVFFlat lub HNSW. W przypadku bardzo dużych zestawów danych należy wziąć pod uwagę rozszerzenie DiskANN przez pg_diskann, które zostało zaprojektowane pod kątem wysokiego przywołania, wysokiej liczby zapytań (zapytań na sekundę) i małych opóźnień na dużą skalę.

Dokładność

Szybkie zapytania nie pomagają, jeśli zwracają nieprawidłowe fragmenty. Brak odpowiednich wierszy lub ich klasyfikacja źle wymusza odgadnięcie modelu.

Traktuj dokładność jako problem dwuetapowy w bazie danych. Najpierw wygeneruj dobrych kandydatów przy użyciu funkcji odległości dopasowanej do osadzeń oraz indeksu, który równoważy współczynnik przywołania i opóźnienie dla danego rozmiaru. Po drugie, popraw kolejność w razie potrzeby. Wyniki można ponownie korektować bezpośrednio w języku SQL przy użyciu operatorów semantycznych w azure_ai rozszerzeniu — na przykład azure_ai.rank w przypadku klasyfikacji istotności opartej na usłudze LLM.

Istnieje również akcelerator rozwiązań Semantic Ranker dla usługi Azure Database for PostgreSQL, jeśli potrzebujesz pełnego przykładu potoku utworzonego wokół tego wzorca. Oba podejścia są przeznaczone do uruchamiania z bazą danych PostgreSQL jako pojedynczą warstwą danych.

Gdy relacje pomagają

Niektóre domeny korzystają z modelowania sposobu nawiązywania połączenia. Krok grafu może poprawić pobieranie przy użyciu relacji i sygnałów istotności. Zapytania programu Graph są dostępne w usłudze Azure Database for PostgreSQL za pośrednictwem rozszerzenia Apache AGE . GraphRAG to metoda firmy Microsoft Research, która łączy wyszukiwanie wektorów z zapytaniami grafu w celu zwiększenia dokładności pobierania. Wyodrębnia ona graf wiedzy z danych i używa tej struktury do dostarczania lepszego kontekstu do modelu dużego języka.

Mierzenie i monitorowanie

Należy ustanowić strategię monitorowania, która przechwytuje kluczowe metryki i zapewnia wgląd w wydajność zapytań.

Utwórz punkt odniesienia wydajności zapytań RAG przy użyciu:

  • Magazyn zapytań — przechwytuje tekst zapytania, statystyki uruchomienia i oczekiwania, dzięki czemu można śledzić najważniejsze zapytania i ich trendy w czasie.
  • Query Performance Insight — wizualizuje dane magazynu zapytań dla serwera elastycznego w celu wyróżniania długotrwałych i zasobochłonnych zapytań.
  • Metryki i zeszyty robocze usługi Azure Monitor — wykresy i pulpity nawigacyjne na poziomie serwera na potrzeby opóźnień, połączeń, CPU, operacji I/O i innych.

Te narzędzia ułatwiają identyfikację wąskich gardeł i obszarów do poprawy w rurociągu RAG. Ułatwiają one określenie wydajności (skali), ale potrzebujesz innych strategii, aby zapewnić dokładność pobierania.

Pomiar dokładności:

Chociaż pomiar dokładności nie jest tak prosty, jak mierzenie skalowania, możesz skorzystać z niektórych lekcji z artykułu w Architecture Center dotyczącego fazy oceny.

  • Żądania dzienników i metryki — dla każdego pytania zapisz tekst pytania, wiersze pobrane z bazy danych PostgreSQL z ich rangą i odległością, dokładnym kontekstem wysłanym do modelu i ostateczną odpowiedzią modelu.
  • Sygnały obliczeniowe — w kodzie aplikacji oblicz trzy proste sygnały:
    • Istotność i wykorzystanie — zmierz, ile kluczowych fraz odpowiedzi pojawia się również w pobranych fragmentach i jak często te fragmenty są cytowane lub powtarzane.
    • Groundedness — sprawdź, czy każde konkretne stwierdzenie w odpowiedzi popiera co najmniej jeden pobrany wiersz.
    • Kompletność — sprawdź, czy główne części pytania są uwzględnione w odpowiedzi z użyciem tekstu pomocniczego z pobranych wierszy.
  • Wskazówki dotyczące zmian w wynikach — użyj wyników, aby poprowadzić zmiany, a następnie ponownie uruchomić ten sam mały zestaw testów:
    • Jeśli odpowiedzi pomijają części pytania, podnieś k lub dostosuj fragmentowanie.
    • Jeśli odpowiednie wiersze nie są wyświetlane, zwiększ liczbę IVFFlat sond w pgvector lub zwiększ ustawienie DiskANNl_value_is, aby wyszukiwanie uwzględniało więcej sąsiadów.
    • Jeśli kolejność jest problemem, dodaj krok ponownego szeregu w języku SQL, korzystając z rozwiązania Semantic Ranking dla usługi Azure Database for PostgreSQL.
    • Gdy relacje mają znaczenie, dodaj krótki krok grafu z Apache AGE przed ostatecznym krokiem wektora.
  • Śledzenie trendów w czasie — monitoruj, aby potwierdzić, że dokładność uległa poprawie, a nie tylko szybkości.

W miarę rozwoju aplikacji przeszacuj wydajność aplikacji i dostosuj potok RAG zgodnie z potrzebami. Ważne jest, aby monitorować zarówno szybkość pobierania, jak i dokładność w czasie.

Kluczowe wnioski

W przypadku ścieżki RAG Postgres, przechowujesz pobieranie w bazie danych, zaczynasz od pgvector, a następnie przechodzisz do odpowiedniego indeksu w miarę wzrostu zestawu danych i ruchu. Dodaj wskaźnik klasyfikacji semantycznej w języku SQL, jeśli kolejność musi być ściślejsza. Funkcja GraphRAG pozwala dodać krótki krok grafu, gdy relacje mają znaczenie. Oceniaj regularnie i monitoruj w środowisku produkcyjnym, aby system pozostał szybki i poprawny w miarę zmiany danych i użycia.