Aktualizowanie i usuwanie wektorów
Utrzymuj zgodność indeksu ze źródłem: wykonuj upsert po zmianie dokumentu, usuwaj wektor po jego usunięciu i obsługuj ponowne tworzenie embeddingów.
Aktualizowanie i usuwanie wektorów to bezpłatna lekcja AI Agents na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej AI Agents, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs AI Agents zawiera 4 lekcji w sumie.
Części tej lekcji nie zostały jeszcze przetłumaczone i są wyświetlane po angielsku.
Indeks nie jest niezmienny
Rzeczywiste dokumenty się zmieniają. Indeks musi za nimi nadążać:
- Dodawane są nowe dokumenty
- Istniejące dokumenty są edytowane
- Stare dokumenty są usuwane lub archiwizowane
Upsert (wstawianie lub aktualizacja)
Większość wektorowych baz danych obsługuje operację upsert — zapisuje wektor z określonym identyfikatorem, zastępując poprzedni, jeśli już istnieje:
index.upsert([
('doc-42', new_vector, {'source': 'a.pdf', 'updated_at': now})
])
# If doc-42 already exists, it is overwritten.Deterministyczne identyfikatory
Jeśli używają Państwo identyfikatorów opartych na haszu treści, „aktualizacja” zachodzi automatycznie — ta sama treść = ten sam identyfikator = to samo miejsce.
Jeśli używają Państwo UUID, muszą Państwo śledzić, który UUID należy do którego dokumentu źródłowego.
Wykrywanie zmian
Aby porównać korpus, należy przechowywać hasz każdego fragmentu:
old_chunks = load_existing_chunks(source)
new_chunks = chunk_doc(source)
old_hashes = {c.id for c in old_chunks}
new_hashes = {c.id for c in new_chunks}
to_delete = old_hashes - new_hashes
to_add = new_hashes - old_hashes
# Skip unchanged — saves re-embeddingUsuwanie według filtra
Większość baz danych obsługuje usuwanie według filtra, co jest przydatne przy operacji „usuń wszystko z tego źródła”:
index.delete(filter={'source': '/old/file.pdf'})Delete by ID
index.delete(ids=['doc-1', 'doc-2', 'doc-3'])Usuwanie logiczne
Czasami chcą Państwo coś „ukryć” bez usuwania — należy ustawić flagę deleted_at i odfiltrować ten element podczas wykonywania zapytania:
index.upsert([('doc-42', vec, {'deleted_at': now})])
# At query time:
results = index.query(vector=query_vec, top_k=5, filter={'deleted_at': {'$exists': False}})Kompaktowanie
Częste usuwanie pozostawia indeks rzadki. Należy okresowo go przebudowywać w celu zachowania wydajności — większość baz danych robi to automatycznie; warto sprawdzić dokumentację dostawcy.
Ponowne tworzenie embeddingów po zmianie modelu
Po aktualizacji modelu embeddingów każdy istniejący wektor staje się niezgodny. Możliwe strategie:
- Podwójny zapis do starych i nowych kolekcji podczas migracji
- Przełączenie ruchu odczytu na nową kolekcję po zakończeniu migracji
- Usunięcie starej kolekcji
Pipeline przyrostowy
Solidny pipeline ingestii:
def sync_doc(source_path):
new_chunks = chunk_and_hash(load(source_path))
existing_ids = index.fetch_ids_by_source(source_path)
new_ids = {c.id for c in new_chunks}
to_add = [c for c in new_chunks if c.id not in existing_ids]
to_remove = existing_ids - new_ids
if to_remove:
index.delete(ids=list(to_remove))
if to_add:
index.upsert([(c.id, embed(c.text), c.metadata) for c in to_add])Audytowanie rozbieżności
Należy okresowo sprawdzać, czy indeks jest zgodny ze źródłem prawdy. Należy policzyć wiersze dla każdego źródła zarówno w bazie danych, jak i w indeksie wektorowym, a następnie zgłaszać alerty w przypadku niezgodności.
Aktualizacje sterowane webhookami
W przypadku systemów zarządzania dokumentami (Notion, Confluence, GDrive) należy używać webhooków do uruchamiania przyrostowej synchronizacji po zmianie — jest to znacznie tańsze niż ponowne przeszukiwanie wszystkiego.
Znaczniki usunięcia w rozproszonych indeksach
W rozproszonych indeksach operacja „usunięcia” często zapisuje znacznik usunięcia. Do czasu wykonania kompaktowania zapytania mogą nadal widzieć ten znacznik — należy pozostawić filtry na swoim miejscu.
Idempotentne aktualizacje
Jaki jest najprostszy sposób na zapewnienie bezpieczeństwa ponownego uruchamiania ingestii?
Podsumowanie
Od pierwszego dnia należy uwzględnić aktualizacje: identyfikatory oparte na haszach, ingestia oparta na porównywaniu zmian oraz możliwość wymiany modeli embeddingów bez przestoju.
Często zadawane pytania
Czy lekcja „Aktualizowanie i usuwanie wektorów” jest bezpłatna?
Tak — pełny tekst „Aktualizowanie i usuwanie wektorów” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu AI Agents, przejdź na CoddyKit PRO. Kurs AI Agents zawiera 4 lekcji w sumie.
Co nauczysz się w „Aktualizowanie i usuwanie wektorów”?
Utrzymuj zgodność indeksu ze źródłem: wykonuj upsert po zmianie dokumentu, usuwaj wektor po jego usunięciu i obsługuj ponowne tworzenie embeddingów. Ćwiczysz AI Agents z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć AI Agents?
Nie wymagamy żadnego doświadczenia. AI Agents w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Aktualizowanie i usuwanie wektorów”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji AI Agents?
Tak. Każda lekcja AI Agents zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Pinecone, Weaviate, Qdrant: porównanie
- Filtrowanie metadanych w wyszukiwaniu hybrydowym
- Aktualizowanie i usuwanie wektorów
- Wybór miar odległości (cosinusowa, L2, iloczyn skalarny)