Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Utilizzo degli indici vettoriali in DynamoDB
Gli indici vettoriali sono un tipo di indice in Amazon DynamoDB che consente la ricerca di similarità sugli incorporamenti vettoriali memorizzati negli elementi della tabella. A differenza degli indici secondari globali e degli indici secondari locali, che supportano le query con corrispondenza esatta e intervallo utilizzando Query e Scan operazioni, gli indici vettoriali utilizzano la ricerca ANN (Approximate Nearest Neighbor) per trovare gli elementi i cui vettori sono più simili a un vettore di interrogazione fornito. Queste ricerche di somiglianza vengono eseguite chiamando il SearchVectors API, che restituisce gli elementi più simili classificati in base a un punteggio di somiglianza.
Con gli indici vettoriali, puoi archiviare incorporamenti vettoriali insieme ai tuoi dati operativi in DynamoDB ed eseguire ricerche di similarità senza bisogno di un database vettoriale separato. Ciò elimina la necessità di complesse pipeline di replica dei dati tra DynamoDB e archivi vettoriali esterni.
Gli indici vettoriali vengono gestiti tramite lo stesso CreateTable e UpdateTable API che già utilizzi, con VectorIndexes parametro (per CreateTable) e il VectorIndexUpdates parametro (per UpdateTable).
Argomenti
Casi d'uso per gli indici vettoriali
Gli indici vettoriali supportano una varietà di casi d'uso che prevedono la ricerca di elementi simili sulla base di rappresentazioni vettoriali:
-
Ricerca semantica — Costruisci motori di ricerca che comprendano il significato delle query piuttosto che le parole chiave corrispondenti. Archivia gli incorporamenti di testo generati da modelli di apprendimento automatico e trova contenuti semanticamente simili.
-
Retrieval Augmented Generation (RAG) — Collega i modelli linguistici di grandi dimensioni (LLM) con le basi di conoscenza pertinenti. Archivia gli incorporamenti dei documenti in DynamoDB e recupera il contesto più pertinente per i prompt LLM.
-
Sistemi di raccomandazione — Trova prodotti, contenuti o utenti simili in base a rappresentazioni vettoriali delle loro caratteristiche o comportamenti.
-
Memoria per agenti AI — Archivia gli incorporamenti delle conversazioni per mantenere il contesto tra le sessioni e migliorare le prestazioni degli agenti di intelligenza artificiale.
-
Rilevamento di anomalie e frodi — Confronta i nuovi eventi con gli incorporamenti di comportamenti normali noti per segnalare i valori anomali, come transazioni insolite o attività fraudolente.
Confronto tra indici vettoriali e indici secondari
La tabella seguente confronta gli indici vettoriali con gli indici secondari globali e gli indici secondari locali.
| Funzionalità | Indice vettoriale | Indice secondario globale | Indice secondario locale |
|---|---|---|---|
| Tipo di query | Ricerca per similarità | Corrispondenza e intervallo esatti | Corrispondenza e intervallo esatti |
| Leggi l'API | SearchVectors |
Query, Scan |
Query, Scan |
| Schema | Attributo vettoriale, più opzionale SearchSchema (chiave di partizione, filtri in linea) | Chiavi di partizione e chiavi di ordinamento opzionali | Stessa chiave di partizione, chiave di ordinamento diversa |
| Numero massimo per tabella | 5 (regolabile fino a 20) | 20 | 5 |
| modalità Capacità | On-demand solo | On-demand o accantonato | On-demand o accantonato |
Funzioni di distanza
Quando si crea un indice vettoriale, si sceglie una funzione di distanza. La funzione di distanza determina il modo in cui DynamoDB misura la somiglianza tra i vettori. La tua scelta influisce sulla qualità del ranking e sulla precisione della ricerca. Amazon DynamoDB supporta tre funzioni di distanza.
| Funzione di distanza | Interpretazione del punteggio | Miglior partita |
|---|---|---|
COSINE |
I punteggi più bassi indicano una maggiore somiglianza. Misura la distanza del coseno (1 meno la somiglianza del coseno) tra due vettori. I valori vanno da 0 (direzione identica) a 2 (direzione opposta). | Punteggi più bassi |
DOT_PRODUCT |
I punteggi più alti indicano una maggiore somiglianza. Misura il prodotto scalare tra due vettori. | I punteggi più alti |
EUCLIDEAN |
I punteggi più bassi indicano una maggiore somiglianza. Misura la distanza in linea retta tra due vettori. | Punteggi più bassi |
Per confrontare il modo in cui le funzioni di distanza classificano lo stesso vettore di interrogazione, vedi In che modo le funzioni di distanza classificano i risultati.
La seguente guida ti aiuta a scegliere la giusta funzione di distanza per il tuo carico di lavoro.
COSINE-
Confronta la direzione e ignora la magnitudine. Usa
COSINEper la somiglianza semantica con i modelli di incorporamento del testo. Questi modelli codificano il significato in direzione e la lunghezza del vettore può variare. Gli esempi includono Amazon Titan Text Embeddings e Cohere Embed.COSINEè adatto per i seguenti casi d'uso:-
Ricerca semantica sulle descrizioni o sui documenti dei prodotti
-
Retrieval Augmented Generation (RAG)
-
Rispetto delle domande frequenti
COSINEè l'impostazione predefinita sicura quando non si è sicuri della funzione da utilizzare. -
DOT_PRODUCT-
DOT_PRODUCTè sensibile sia alla direzione che alla magnitudine (la lunghezza di un vettore). ScegliDOT_PRODUCTquando la documentazione del modello di incorporamento consiglia dot product come misura di somiglianza o quando desideri che la lunghezza del vettore influenzi il ranking.DOT_PRODUCTè adatto per i seguenti casi d'uso:-
Sistemi di raccomandazione che utilizzano i punteggi di popolarità o di confidenza per scalare gli incorporamenti e influenzare il posizionamento
-
Modelli la cui documentazione raccomanda specificamente il dot product come misura di somiglianza
-
Magnitude-sensitive classifica in cui la lunghezza del vettore trasporta un segnale significativo
Ti consigliamo di normalizzare gli incorporamenti alla lunghezza unitaria. Una volta normalizzato,
DOT_PRODUCTclassifica i risultati allo stesso modo diCOSINE. Salta la normalizzazione solo se desideri che la magnitudo influenzi la classifica.Esempio di caso d'uso: un sistema di consigli sui prodotti in cui si ridimensiona ogni prodotto incorporato in base al relativo punteggio di popolarità. I prodotti più popolari ottengono vettori più lunghi e si posizionano più in alto nei risultati di ricerca.
-
EUCLIDEAN-
Misura la distanza in linea retta tra due vettori.
EUCLIDEANè sensibile alla magnitudo. Usalo quando è importante la posizione assoluta nello spazio di incorporamento.EUCLIDEANè adatto per i seguenti casi d'uso:-
Incorporamenti di immagini o audio in cui la distanza spaziale è importante
-
Near-duplicate scoperta
-
Clustering e rilevamento delle anomalie
Esempio di caso d'uso: ricerca di immagini quasi duplicate da incorporamenti di immagini.
-
Scegli una funzione di distanza che corrisponda al tuo modello di incorporamento
Se non siete sicuri della funzione da utilizzare, consultate la documentazione del modello di incorporamento. Convalida la tua scelta rispetto a un set di dati rappresentativo. Non è possibile modificare la funzione di distanza dopo la creazione dell'indice. Per ulteriori informazioni, consulta Abbina la funzione di distanza ai tuoi incorporamenti.
In che modo le funzioni di distanza classificano i risultati
La funzione di distanza scelta al momento della creazione dell'indice determina sia il Score il valore e l'ordinamento dei risultati. La stessa query può classificare gli stessi elementi in modo diverso in diverse funzioni di distanza. L'esempio seguente utilizza il vettore di interrogazione [1, 0, 0, 0] rispetto a quattro vettori memorizzati.
| Vettore memorizzato | COSINE (più basso è più simile) |
EUCLIDEAN (più basso è più simile) |
DOT_PRODUCT (più alto è più simile) |
|---|---|---|---|
[1, 0, 0, 0] |
0,0 | 0,0 | 1.0 |
[10, 0, 0, 0] |
0,0 | 9.0 | 10.0 |
[0.7071, 0.7071, 0, 0] |
0,29 | 0,77 | 0,71 |
[-1, 0, 0, 0] |
2.0 | 2.0 | -1,0 |
Vale la pena notare due comportamenti:
-
COSINEignora la magnitudo. Segna[1, 0, 0, 0]e[10, 0, 0, 0]identicamente (entrambi0.0) perché puntano nella stessa direzione.EUCLIDEANranghi[10, 0, 0, 0]è ultimo per la stessa query perché misura la distanza assoluta, che aumenta con la grandezza di un vettore. -
DOT_PRODUCTi punteggi possono essere negativi. Un vettore che punta nella direzione opposta ([-1, 0, 0, 0]) segna-1.0. Non date per scontato che i punteggi siano sempre non negativi quando ordinate o applicate soglie ai risultati.
SearchSchema
Quando si crea un indice vettoriale, è possibile definire facoltativamente un SearchSchema che specifica le chiavi di partizione dell'indice vettoriale e gli attributi del filtro in linea.
HASH(chiave di partizione dell'indice vettoriale)-
Una chiave di partizione dell'indice vettoriale assegna ogni ricerca ai vettori che condividono lo stesso valore per un attributo scelto. Gli elementi con lo stesso valore di chiave di partizione vengono memorizzati insieme, quindi la ricerca legge solo quel sottoinsieme invece di scansionare l'intero indice. Su scala elevata, una chiave di partizione con indice vettoriale riduce la latenza di ricerca perché la ricerca esamina solo un sottoinsieme dello spazio vettoriale. Utilizzate attributi con cardinalità da bassa a media, ad esempio
CategoryoCountry. È possibile specificare al massimo una chiave di partizione dell'indice vettoriale.Se si definisce una chiave di partizione dell'indice vettoriale nel SearchSchema, è necessario fornire il suo valore in
SearchConditionExpressionquando chiamiSearchVectors.Usa una chiave di partizione per scalare il throughput di ricerca
Definisci una chiave di partizione dell'indice vettoriale quando prevedi un indice ampio o un volume di ricerca elevato. Perché ognuno
SearchVectorsLa chiamata è limitata a un singolo valore di chiave di partizione, la distribuzione dei dati su più valori di chiave di partizione consente di eseguire più operazioni di ricerca al secondo e riduce la quantità di dati esaminati da ogni ricerca. Consulta Scegli una chiave di partizione che corrisponda ai tuoi schemi di interrogazione. INLINE_FILTER-
Un attributo di filtro in linea è un normale attributo non vettoriale il cui valore DynamoDB memorizza nell'indice vettoriale accanto a ciascun vettore. Poiché il valore è associato al vettore, DynamoDB ignora i vettori che non corrispondono al filtro durante la ricerca nell'indice. Questo evita di cercare prima l'intero indice e poi di scartare i risultati che non corrispondono.
Ad esempio, se si definisce un
Languageattributo come filtro in linea, una ricerca che filtra suLanguageconsidera solo i vettori di cuiLanguageil valore corrisponde.I filtri in linea supportano l'operatore di uguaglianza (
=) inSearchConditionExpression. Operatori di confronto, intervallo e appartenenza ai set (<>,<,<=,>,>=,IN) non sono ancora disponibili. A differenza delle chiavi di partizione degli indici vettoriali, i filtri in linea sono opzionali durante la ricerca.
È possibile creare un indice vettoriale senza definire una chiave di partizione in SearchSchema. In questo caso, ogni SearchVectors call esegue una ricerca nell'intero indice. Questo è più semplice perché non è necessario un SearchConditionExpression. Tuttavia, poiché ogni ricerca esamina l'intero indice, il lavoro svolto da ciascuna ricerca, e quindi la latenza e il costo, aumenta con la crescita dell'indice. Inoltre, non è possibile distribuire il throughput di ricerca su più valori di chiave di partizione. Se il carico di lavoro richiede un throughput elevato o l'indice contiene un numero elevato di vettori, definisci una chiave di partizione per distribuire i dati tra le partizioni e scalarli in modo indipendente. Consulta Scegli una chiave di partizione che corrisponda ai tuoi schemi di interrogazione.
Proiezioni
Come gli indici secondari globali, gli indici vettoriali supportano proiezioni che controllano quali attributi della tabella di base vengono copiati nell'indice. La proiezione viene specificata quando si crea l'indice vettoriale.
-
KEYS_ONLY— Solo gli attributi della chiave primaria della tabella di base, l'attributo vettoriale e tutti gli attributi del filtro in linea definiti in SearchSchema vengono proiettati nell'indice. -
INCLUDE— Oltre aKEYS_ONLYattributi, si specificano altri attributi non chiave per il progetto. Non è possibile modificare il set di attributi inclusi dopo la creazione dell'indice vettoriale. Per proiettare un diverso set di attributi, eliminate l'indice e ricreatelo con la proiezione desiderata. -
ALL— Tutti gli attributi della tabella di base vengono proiettati nell'indice.
La proiezione limita cosa SearchVectors può tornare
Gli attributi che non sono proiettati nell'indice vettoriale non possono essere restituiti in SearchVectors risposte. Se hai bisogno di attributi specifici nei risultati della ricerca, includili nella proiezione o utilizzali ALL.
Utilizzo di indici vettoriali con altre funzionalità di DynamoDB
- DynamoDB Streams
-
Puoi abilitare DynamoDB Streams su una tabella con un indice vettoriale, sia con
StreamSpecificationparametro quando crei la tabella o tramiteUpdateTable. Lo stream acquisisce le modifiche a livello di elemento nella tabella di base e opera indipendentemente dall'indice vettoriale. - Tabelle globali
-
È possibile aggiungere un indice vettoriale a una tabella globale e convertire una tabella con un indice vettoriale in una tabella globale aggiungendo una replica con
UpdateTable. La definizione dell'indice vettoriale, comprese le sue dimensioni, la funzione di distanza, SearchSchemae la proiezione, viene replicata automaticamente in ogni nuova regione di replica. L'indice vettoriale non viene creato separatamente nella regione di replica.Gli elementi scritti in qualsiasi regione di replica vengono replicati nelle altre regioni e indicizzati lì. Al termine della replica,
SearchVectorsin ogni regione cerca lo stesso set di vettori. Poiché la ricerca vettoriale utilizza il vicino più prossimo approssimativo (ANN), ricerche separate in regioni diverse potrebbero restituire risultati o ordini leggermente diversi per la stessa query, anche su dati identici. La replica delle tabelle tra le regioni segue la garanzia di coerenza della tabella globale, inclusa una forte coerenza per le tabelle globali MRSC (Multi-region Strong Consistency). L'indicizzazione vettoriale, tuttavia, avviene sempre in modo asincrono dopo l'applicazione di una scrittura alla tabella, in ogni regione, inclusa la regione in cui hai scritto. La garanzia MRSC copre la tabella, non l'indice vettoriale. Di conseguenza, si verifica un ritardo tra il momento in cui viene riconosciuta una scrittura e il momento in cui il vettore diventa ricercabileSearchVectors. Questo ritardo si applica a livello locale e in tutte le regioni.On-demand capacità richiesta
Gli indici vettoriali utilizzano solo la modalità di capacità su richiesta e richiedono una tabella che utilizzi anche la modalità di capacità su richiesta. Non è possibile combinare le due modalità di capacità. Le tabelle globali supportano la modalità di capacità su richiesta. Crea l'indice vettoriale e la replica su una tabella che utilizza già la capacità su richiesta.
- Point-in-time ripristino (PITR) e backup
-
Quando ripristini una tabella da un ripristino point-in-time o da un backup su richiesta, DynamoDB ripristina i dati della tabella di base e la definizione dell'indice vettoriale. Come per gli indici secondari globali, DynamoDB ricostruisce l'indice vettoriale dai dati della tabella di base ripristinati anziché copiarli byte per byte, in modo che l'indice venga riempito prima di essere pronto per la ricerca. Attendi
IndexStatusèACTIVEeBackfillingnon ètruesull'indice ripristinato prima dell'esecuzioneSearchVectors. - Time to Live (TTL)
-
È possibile utilizzare DynamoDB TTL su una tabella con un indice vettoriale. Quando il TTL elimina un elemento scaduto dalla tabella di base, DynamoDB rimuove la voce corrispondente dall'indice vettoriale, allo stesso modo di un'eliminazione manuale. Gli elementi scaduti non vengono quindi visualizzati in
SearchVectorsi risultati dopo l'eliminazione si propagano all'indice. - Importazione ed esportazione dei dati della tabella
-
Puoi esportare una tabella con un indice vettoriale in Amazon S3; l'esportazione contiene gli elementi della tabella di base, inclusi gli attributi vettoriali in essi memorizzati. Quando importi dati da Amazon S3 in una nuova tabella, definisci l'indice vettoriale nella richiesta di importazione nello stesso modo in cui faresti con
CreateTable. DynamoDB indicizza gli elementi importati man mano che vengono scritti e l'indice vettoriale diventa disponibile al termine dell'importazione. - DAX
-
DynamoDB Accelerator (DAX) non supporta
SearchVectorsoperazione. InviareSearchVectorsrichieste direttamente a DynamoDB, anche quando l'applicazione utilizza DAX per altre operazioni di lettura. La memorizzazione nella cache DAX delle letture della tabella di base non è influenzata dalla presenza di un indice vettoriale. Se è necessario un livello di memorizzazione nella cache per i risultati della ricerca vettoriale, è possibile memorizzare nella cacheSearchVectorsrisposte in una cache esterna, come Amazon ElastiCache per Valkey. Sei responsabile della compilazione e dell'invalidazione di tale cache.