Haszowanie treści zapobiega niepotrzebnemu ponownemu tworzeniu embeddingów, nadając każdemu plikowi lub fragmentowi deterministyczny odcisk palca, który zmienia się, gdy zmienia się haszowana treść.
Domowy indeks wiedzy może po ponownym uruchomieniu, zaplanowanym skanowaniu lub zdarzeniu obserwatora ponownie przetworzyć tysiące plików PDF, notatek, plików Markdown, instrukcji i wyeksportowanych rekordów. Daty modyfikacji i ścieżki mogą się zmieniać, nawet gdy tekst pozostaje identyczny. Haszowanie pozwala potokowi pozyskiwania zadać węższe pytanie, zanim poniesie koszt parsowania i tworzenia embeddingów: czy bajty lub znormalizowany tekst definiujące ten rekord rzeczywiście różnią się od wersji już zindeksowanej?
Hasz przekształca treść o zmiennej długości w stabilny odcisk palca
Funkcja haszująca przyjmuje dane wejściowe o dowolnej długości i generuje skrót o stałym rozmiarze. Potok przechowuje ten skrót obok zindeksowanego dokumentu lub fragmentu jako kompaktowy identyfikator dokładnie haszowanej reprezentacji.
skróty wiadomości o stałej długości zapewniają deterministyczne odciski palca dla reprezentacji danych wejściowych, umożliwiając systemowi pozyskiwania porównanie bieżącej treści z wcześniej zapisanym stanem przed uruchomieniem kosztownych etapów przetwarzania.
Skrót nie opisuje znaczenia pliku i nie jest embeddingiem. Jest szybkim sygnałem równości dla wybranej reprezentacji bajtowej lub tekstowej. Jeśli dwa skanowania wygenerują różny tekst OCR, ich hasze tekstowe będą się różnić, nawet gdy obrazy stron wyglądają podobnie. Jeśli plik zostanie skopiowany bez zmian do innego folderu, jego hasz treści może pozostać taki sam, mimo zmiany metadanych ścieżki.
Potok musi dokładnie określić, co trafia do hasza
Haszowanie surowych bajtów pliku wykrywa każdą zmianę binarną, w tym różnice w metadanych, kompresji lub kontenerze, które mogą nie zmieniać tekstu używanego do wyszukiwania. Haszowanie znormalizowanego wyodrębnionego tekstu ignoruje część tych zmian i skupia się dokładniej na danych wejściowych embeddingu.
adresowanie oparte na treści pokazuje, dlaczego tożsamość przechowywanej treści może pozostać niezależna od nazwy pliku lub ścieżki, co jest przydatne, gdy niezmienione pliki są przenoszone lub zmieniają nazwy.
Potok RAG może używać kilku haszy na różnych warstwach: jednego dla obiektu źródłowego, jednego dla znormalizowanego wyodrębnionego tekstu oraz jednego dla każdego końcowego fragmentu.
Właściwa warstwa zależy od pomijanego etapu pracy. Zgodność bajtów źródłowych może pozwolić całkowicie pominąć parsowanie; zgodność tekstu — pominąć ponowne dzielenie na fragmenty; a zgodność tekstu fragmentu — zachować istniejący wektor, nawet gdy zmieniły się sąsiednie fragmenty.
Przechowywane hasze zamieniają ponowne pozyskiwanie w etap porównania przed obliczeniami
Podczas nowego przebiegu pozyskiwania potok oblicza bieżący skrót i wyszukuje wcześniej zapisaną wartość pod tym samym identyfikatorem źródła lub fragmentu.
przyrostowe aktualizacje embeddingów mogą zachować niezmienione fragmenty, generując wektory ponownie tylko dla treści, której odcisk palca lub tekst pochodny rzeczywiście się różni.
Gdy hasz się zgadza, istniejący embedding, identyfikator wektora i metadane wyszukiwania mogą pozostać bez zmian. Potok może nadal aktualizować metadane niezwiązane z embeddingiem, takie jak ścieżka, uprawnienia lub znacznik czasu skanowania, jeśli te pola uległy zmianie. Gdy hasz się różni, system oznacza powiązane źródło lub fragment jako wymagający aktualizacji i przesyła tylko te dane przez kosztowne kolejne etapy.
Haszowanie na poziomie fragmentów zapobiega ponownemu przeliczaniu całego dokumentu po niewielkiej edycji
Haszowanie całego pliku odpowiada na pytanie, czy cokolwiek się zmieniło, ale nie wskazuje, który fragment uległ zmianie. Jedna poprawiona linia w 200-stronicowej instrukcji sprawia, że zmienia się skrót całego pliku.
obiekty adresowane za pomocą treści pokazują, jak mniejsze jednostki treści mogą mieć własne identyfikatory, umożliwiając ponowne wykorzystanie fragmentów na poziomie jednostkowym, nawet gdy zmienia się większy dokument nadrzędny.
Po parsowaniu i podziale na fragmenty każdy fragment może otrzymać własny hasz. Niezmienione hasze fragmentów zachowują istniejące embeddingi, a nowe, zmienione, połączone lub usunięte fragmenty otrzymują odpowiednią operację utworzenia, aktualizacji lub usunięcia.
Najwięcej pracy można w ten sposób zaoszczędzić, gdy edycje są nieliczne, a granice fragmentów pozostają stabilne. Jeśli algorytm dzielenia przesunie wszystkie granice po jednym wstawieniu, hasze wielu kolejnych fragmentów mogą się zmienić, mimo że większość zdań pozostała bez zmian.
Równość haszy nie oznacza, że wszystkie właściwości istotne dla wyszukiwania pozostały niezmienione
Hasz tekstu może się zgadzać, nawet gdy zmienią się uprawnienia dostępu, wiarygodność dokumentu, status wersji, mapowanie stron lub nazwa pliku widoczna dla użytkownika. Te pola mogą wpływać na wyszukiwanie, mimo że dane wejściowe embeddingu pozostają bez zmian.
Zapobieganie powstawaniu nieaktualnych fragmentów pochodnych wymaga uzgodnienia stanu źródła z każdym fragmentem pochodnym, ponieważ poprawny nowy wektor nie usuwa automatycznie starych rekordów z tej samej rodziny dokumentów.
Schemat pozyskiwania powinien zatem oddzielać treść wpływającą na embedding od metadanych wyszukiwania. Zmiana uprawnień może wymagać aktualizacji filtrów, ale nie musi oznaczać ponownego generowania wektora.
Podobnie zmiana modelu embeddingu, zasad normalizacji, parsera lub algorytmu dzielenia na fragmenty unieważnia stare artefakty pochodne, nawet jeśli hasze wszystkich plików źródłowych pozostają bez zmian.
Haszowanie oszczędza moc obliczeniową tylko wtedy, gdy reguły tożsamości i cyklu życia są niezawodne
Skrót jest użyteczny tylko wtedy, gdy system wie, z którym wcześniejszym rekordem powinien go porównać. Zmiany nazw, duplikaty, dowiązania twarde, przywracanie archiwów i generowane pliki tymczasowe mogą powodować problemy z tożsamością opartą na ścieżce.
strumieniowe obliczanie haszy pozwala serwerowi domowemu stopniowo tworzyć odcisk palca dużych lokalnych plików, zamiast ładować cały obiekt źródłowy do pamięci RAM przed porównaniem.
Używaj stabilnego identyfikatora źródła, przechowuj wersję hasza i zasady normalizacji oraz okresowo uzgadniaj indeks z biblioteką źródłową. Dzięki temu pominięty plik nie stanie się trwale nieaktualnym rekordem po pominięciu zdarzenia obserwatora lub bazy danych. Haszowanie treści jest zatem bramką przed etapem tworzenia embeddingów, a nie kompletnym systemem synchronizacji: zapobiega ponownym obliczeniom, gdy wiadomo, że treść jest identyczna, podczas gdy inne mechanizmy cyklu życia nadal wykrywają i usuwają zmienione lub usunięte rekordy.
Centrum Technologii i Sztucznej Inteligencji
Więcej do przeczytania

Dlaczego Home Assistant działa inaczej w sieci lokalnej i przy połączeniach zdalnych?
Sesje Home Assistant w sieci LAN i zdalne korzystają z różnych ścieżek sieciowych; opóźnienie zdalne obejmuje DNS, szyfrowanie, sieć WAN, serwer proxy lub VPN...

Czy Home Assistant działa niezawodnie za CGNAT-em lub podwójnym NAT-em?
CGNAT i podwójny NAT zazwyczaj nie wpływają na lokalne sterowanie Home Assistantem; zmieniają głównie sposób, w jaki zdalni klienci mogą utworzyć ścieżkę przychodzącą do...

Jak opóźnienie sieci wpływa na działanie Home Assistant podczas awarii Internetu?
Utrata dostępu do Internetu i opóźnienia sieciowe to różne awarie: lokalne ścieżki urządzeń mogą nadal działać szybko, podczas gdy DNS, integracje z chmurą, bramy...

