Dlaczego częściowe aktualizacje plików pozostawiają nieaktualne fragmenty w lokalnym indeksie RAG?

Eva Wong jest Technicznym pisarzem i stałym majsterkowiczem w ZimaSpace. Całe życie geek z pasją do homelabów i oprogramowania open-source, specjalizuje się w tłumaczeniu skomplikowanych koncepcji technicznych na przystępne, praktyczne przewodniki. Eva wierzy, że samodzielne hostowanie powinno być zabawą, a nie czymś onieśmielającym. Poprzez swoje samouczki umożliwia społeczności rozwiewanie tajemnic konfiguracji sprzętu, od budowy pierwszego NAS po opanowanie kontenerów Docker.

Częściowe aktualizacje plików pozostawiają nieaktualne fragmenty RAG, gdy nowe fragmenty są dodawane bez unieważnienia każdego zindeksowanego fragmentu pochodzącego ze starszej wersji pliku.

Lokalna baza wiedzy rzadko przechowuje jeden wektor na plik. Wyodrębnia tekst, dzieli plik na fragmenty, generuje osadzenia, dołącza metadane i może buforować przeanalizowane lub pobrane wyniki. Edycja jednego akapitu może przesunąć granice kolejnych fragmentów, zmienić skróty, usunąć stary tekst i utworzyć nowe identyfikatory fragmentów. Jeśli ścieżka aktualizacji przetwarza tylko zmienione lub nowo wykryte elementy, stare fragmenty mogą pozostać możliwe do wyszukania obok zastępczej treści, mimo że sam plik źródłowy wygląda poprawnie.

Jeden plik źródłowy staje się wieloma niezależnymi rekordami indeksu

Aktualizacja dokumentu nie oznacza aktualizacji jednego wiersza bazy danych, gdy potok pozyskiwania danych przechowuje wiele fragmentów, rekordów stron, podsumowań i osadzeń.

OptyxStack wyjaśnia, że częściowa wymiana może pozostawić mieszane stare i nowe fragmenty z tej samej rodziny dokumentów.

Nowy fragment może zostać pomyślnie zindeksowany, podczas gdy starszy fragment o innym identyfikatorze nadal pozostaje prawidłowy z perspektywy bazy danych wektorów.

Niewielkie edycje mogą przesunąć granice wszystkich kolejnych fragmentów

Dodanie jednego akapitu na początku zmienia pozycje tokenów używane przez mechanizmy dzielenia na fragmenty o stałym rozmiarze lub z nakładaniem. Kilka kolejnych fragmentów może otrzymać nową treść, nawet jeśli ich tekst źródłowy nie był bezpośrednio edytowany.

Extend opisuje, jak pojawia się dryf pozyskiwania danych, gdy założenia dotyczące dzielenia na fragmenty i metadanych zmieniają się między dokumentami lub aktualizacjami.

Mechanizm aktualizacji, który ponownie generuje osadzenia tylko dla widocznie edytowanego obszaru, może pominąć dalsze fragmenty, których granice lub nakładanie się uległy zmianie. Same stabilne przesunięcia w źródle nie wystarczą, gdy ekstrakcja lub dzielenie na fragmenty tworzy nowy układ.

Tożsamość wersji dokumentu powinna grupować wszystkie rekordy pochodne, aby potok mógł w razie potrzeby zastąpić całą starą rodzinę.

Ścieżki dodawania są często lepiej testowane niż ścieżki usuwania

Zadania pozyskiwania danych naturalnie sprawdzają, czy nowe fragmenty zostały utworzone. Mogą jednak nie potwierdzać, że fragmenty usunięte ze źródła nie są już możliwe do wyszukania.

Analiza Ranjana Kumara dotycząca luki w aktualności indeksu traktuje zdarzenia dodania, aktualizacji i usunięcia jako odrębne zmiany, które wszystkie wymagają propagacji.

Zmieniona nazwa sekcji lub usunięty akapit może przetrwać bezterminowo, gdy proces aktualizacji wykonuje operacje upsert, ale nie ma znacznika usunięcia ani spisu starych fragmentów.

Testuj usuwanie, wyszukując charakterystyczne frazy z usuniętej treści po każdej ścieżce aktualizacji.

-15% OFF

Pomyślnie zakończone zadanie może nadal pozostawić częściowo zaktualizowany indeks

Analizowanie, dzielenie na fragmenty, generowanie osadzeń, usuwanie, dodawanie, zapisywanie metadanych i unieważnianie pamięci podręcznej mogą działać jako oddzielne kroki. Niektóre z nich mogą zakończyć się powodzeniem, zanim inny proces roboczy ulegnie awarii.

Jamie Maguire opisuje lukę operacyjną, w której zadanie pozyskiwania danych wygląda na zakończone powodzeniem lub kończy się częściowo, podczas gdy indeks wyszukiwania pozostaje nieaktualny.

Pojedynczy końcowy status może ukrywać to, która wersja pliku, liczba fragmentów i zestaw osadzeń faktycznie stały się dostępne dla zapytań. Rejestruj ukończenie poszczególnych etapów oraz ostatnią w pełni zatwierdzoną wersję dokumentu.

Fragmentacja indeksu pozwala konkurować sprzecznym wersjom

Gdy nieaktualne i świeże fragmenty mają tę samą nazwę pliku lub identyfikator dokumentu, oba mogą wydawać się istotne dla tego samego zapytania.

Lista kontrolna problemów LlamaIndex wskazuje fragmentację indeksu jako przyczynę sprzecznego pobierania danych i nieaktualnych informacji po aktualizacji źródła.

Model generujący odpowiedź może wybrać stare sformułowanie, ponieważ ma ono lepsze dopasowanie leksykalne albo krótszy, bardziej przejrzysty fragment. Metadane aktualności pomagają tylko wtedy, gdy mechanizm pobierania danych lub ponownego szeregowania faktycznie ich używa.

Eliminowanie duplikatów powinno porównywać wersję źródła i tożsamość treści, a nie tylko podobieństwo wektorów.

Uzgodnij indeks przed opublikowaniem nowej wersji dokumentu

Lokalny potok powinien okresowo porównywać pliki źródłowe z rodzinami dokumentów w indeksie, skrótami fragmentów, wersjami i znacznikami usunięcia, zamiast polegać wyłącznie na zdarzeniach obserwatora lub liczbie pomyślnych operacji upsert.

Przewodnik Oracle dotyczący dryfu indeksu zaleca uzgadnianie źródła z indeksem, aby po pozyskaniu danych zweryfikować zaktualizowaną i usuniętą treść.

Utwórz zastępcze fragmenty w ramach nowej wersji dokumentu, zweryfikuj ich liczbę, metadane i działanie podczas wyszukiwania, a następnie przełącz aktywną wersję przed wycofaniem poprzedniej rodziny. Zapobiega to sytuacji, w której niedokończone zadanie usuwania lub generowania osadzeń udostępnia dwie wersje jako równie aktualne.

Artykuł ZimaSpace o indeksowaniu w tle wyjaśnia, dlaczego wykrywanie zmian jest tylko częścią większego potoku ekstrakcji i bazy danych.

Najbezpieczniejsza aktualizacja nie zawsze jest najmniejszą aktualizacją. W przypadku krótkich plików domowych zastąpienie całej rodziny dokumentu może być prostsze i bardziej niezawodne niż próba wykonania podatnej na błędy poprawki na poziomie fragmentów.

FAQ

Czy zmiana czasu modyfikacji pliku aktualizuje każdy fragment?

Nie. Obserwator może wykryć plik, ale kod pozyskiwania danych nadal musi zidentyfikować, zastąpić i unieważnić wszystkie rekordy pochodzące ze starszej wersji.

Czy podobieństwo wektorowe może automatycznie ukrywać nieaktualne fragmenty?

Nie. Stare i nowe fragmenty mogą być jednocześnie istotne semantycznie. Podobieństwo nie określa, która wersja jest aktualna.

Czy zawsze trzeba przebudować cały indeks?

Nie. Zastępowanie rodzin dokumentów i uzgadnianie danych może zachować działanie przyrostowe, ale ścieżki usuwania i wersjonowania muszą być testowane równie dokładnie jak dodawanie.

Centrum Technologii i Sztucznej Inteligencji

Więcej do przeczytania

Get More Builds Like This

Stay in the Loop

Get updates from Zima - new products, exclusive deals, and real builds from the community.

Stay in the Loop preferences

We respect your inbox. Unsubscribe anytime.