Aggiornare ed eliminare i vettori
Mantenga l'indice sincronizzato con la fonte: esegua l'upsert quando cambia un documento, lo elimini quando viene rimosso e gestisca i nuovi embedding.
Aggiornare ed eliminare i vettori è una lezione AI Agents gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento AI Agents, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso AI Agents include 4 lezioni in totale.
Parti di questa lezione non sono ancora state tradotte e vengono mostrate in inglese.
L'indice non è immutabile
I documenti reali cambiano. L'indice deve tenere il passo:
- Vengono aggiunti nuovi documenti
- I documenti esistenti vengono modificati
- I documenti obsoleti vengono eliminati o archiviati
Upsert (inserimento o aggiornamento)
La maggior parte dei DB vettoriali supporta l'upsert: scrive il vettore con un determinato ID, sostituendo quello precedente se esiste:
index.upsert([
('doc-42', new_vector, {'source': 'a.pdf', 'updated_at': now})
])
# If doc-42 already exists, it is overwritten.ID deterministici
Se usa ID basati sull'hash del contenuto, l'"aggiornamento" avviene automaticamente: stesso contenuto = stesso ID = stesso slot.
Se usa UUID, deve tenere traccia dell'UUID associato a ogni documento sorgente.
Rilevamento delle modifiche
Per confrontare un corpus, memorizzi un hash di ogni chunk:
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-embeddingEliminazione tramite filtro
La maggior parte dei DB supporta l'eliminazione tramite filtro, utile per "eliminare tutto ciò che proviene da questa sorgente":
index.delete(filter={'source': '/old/file.pdf'})Delete by ID
index.delete(ids=['doc-1', 'doc-2', 'doc-3'])Eliminazione logica
A volte desidera "nascondere" un elemento senza rimuoverlo: imposti un flag deleted_at ed escluda l'elemento al momento della query:
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}})Compattazione
Le eliminazioni frequenti lasciano l'indice poco denso. Lo ricostruisca periodicamente per migliorarne le prestazioni: la maggior parte dei DB lo fa automaticamente; consulti la documentazione del provider.
Ricalcolo degli embedding al cambio di modello
Se aggiorna il modello di embedding, ogni vettore esistente diventa incompatibile. Strategie:
- Scrivere contemporaneamente nelle raccolte vecchia e nuova durante la migrazione
- Spostare il traffico di lettura sulla nuova raccolta al termine
- Eliminare la vecchia raccolta
Pipeline incrementale
Una pipeline di ingestion robusta:
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])Verifica del drift
Verifichi periodicamente che l'indice corrisponda alla fonte di verità. Conteggi le righe per sorgente sia nel DB sia nell'indice vettoriale e generi un avviso in caso di differenze.
Aggiornamenti tramite webhook
Per i sistemi di gestione dei documenti (Notion, Confluence, GDrive), utilizzi i webhook per attivare la sincronizzazione incrementale a ogni modifica: è molto più economico che eseguire nuovamente la scansione di tutto.
Tombstone per le eliminazioni distribuite
Negli indici distribuiti, l'"eliminazione" spesso scrive un marcatore tombstone. Finché non viene eseguita la compattazione, le query potrebbero ancora vedere il tombstone: mantenga attivi i filtri.
Aggiornamenti idempotenti
Qual è il modo più semplice per rendere l'ingestion sicura da rieseguire?
Riepilogo
Preveda gli aggiornamenti fin dal primo giorno: ID basati su hash, ingestion basata sul confronto delle differenze e un percorso per sostituire i modelli di embedding senza downtime.
Domande Frequenti
La lezione «Aggiornare ed eliminare i vettori» è gratuita?
Sì — il testo completo di «Aggiornare ed eliminare i vettori» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso AI Agents, passa a CoddyKit PRO. Il corso AI Agents include 4 lezioni in totale.
Cosa imparerò in «Aggiornare ed eliminare i vettori»?
Mantenga l'indice sincronizzato con la fonte: esegua l'upsert quando cambia un documento, lo elimini quando viene rimosso e gestisca i nuovi embedding. Eserciti AI Agents con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare AI Agents?
Non è richiesta alcuna esperienza precedente. AI Agents su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.
Quanto tempo richiede la lezione «Aggiornare ed eliminare i vettori»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione AI Agents?
Sì. Ogni lezione AI Agents include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Pinecone, Weaviate e Qdrant: confronto
- Filtraggio dei metadati per la ricerca ibrida
- Aggiornare ed eliminare i vettori
- Scegliere le metriche di distanza (coseno, L2, prodotto scalare)