Database e Indici di Vettori in Python Progettazione di App LLM

Database e Indici di Vettori in Python

 

A causa delle applicazioni di IA generativa create con il loro hardware, Nvidia ha avuto una crescita significativa. Un’altra innovazione software, il database vettoriale, sta cavalcando l’onda dell’IA generativa.

Gli sviluppatori stanno costruendo applicazioni alimentate da IA in Python su database vettoriali. Codificando i dati come vettori, possono sfruttare le proprietà matematiche degli spazi vettoriali per ottenere una rapida ricerca di similarità su set di dati molto grandi.

Iniziamo con le basi!

 

Nozioni di base sui database vettoriali

 

Un database vettoriale archivia i dati come vettori numerici in uno spazio di coordinate. Questo consente di calcolare le similarità tra vettori tramite operazioni come la similarità coseno. 

I vettori più vicini rappresentano i punti dati più simili. A differenza dei database scalari, i database vettoriali sono ottimizzati per le ricerche di similarità anziché per le interrogazioni complesse o le transazioni. 

Ricavare vettori simili richiede millisecondi anziché minuti, anche su miliardi di punti dati. 

I database vettoriali costruiscono indici per interrogare efficientemente i vettori per prossimità. Questo è in qualche modo analogo a come i motori di ricerca di testo indicizzano i documenti per una ricerca full-text veloce.

 

Vantaggi della ricerca vettoriale rispetto ai database tradizionali per gli sviluppatori

 

Per gli sviluppatori, i database vettoriali offrono:

  • Ricerca di similarità rapida – Trova vettori simili in millisecondi
  • Supporto per dati dinamici – Aggiorna continuamente i vettori con nuovi dati
  • Scalabilità – Espandi la ricerca vettoriale su più macchine
  • Architetture flessibili – I vettori possono essere archiviati localmente, in archivi di oggetti cloud o in database gestiti
  • Alta dimensionalità – Indicizza migliaia di dimensioni per vettore
  • API – Se scegli un database vettoriale gestito, di solito offre API di interrogazione pulite e integrazioni con alcuni toolkit o piattaforme esistenti di data science.

Gli esempi di casi d’uso popolari supportati dalle ricerche vettoriali (la caratteristica chiave offerta da un database vettoriale) sono:

  • Ricerca visuale – Trova immagini di prodotti simili
  • Raccomandazioni – Suggerisci contenuti 
  • Chatbot – Corrispondi le query all’intento 
  • Ricerca – Evidenzia documenti rilevanti da vettori di testo

I casi d’uso in cui le ricerche vettoriali stanno cominciando a ottenere un seguito sono:

  • Rilevamento di anomalie – Identifica vettori anomali
  • Scoperta di farmaci – Relaziona molecole mediante vettori di proprietà

 

Cos’è un database vettoriale in Python?

 

Un database vettoriale che include librerie Python che supportano l’intero ciclo di vita di un database vettoriale è un database vettoriale in Python. Il database stesso non ha bisogno di essere costruito in Python.

 

Cosa dovrebbero supportare queste librerie di database vettoriali in Python?

 

Le chiamate a un database vettoriale possono essere suddivise in due categorie – funzioni relative ai dati e funzioni relative alla gestione. La buona notizia è che seguono schemi simili a quelli di un database tradizionale.

Funzioni relative ai dati che le librerie dovrebbero supportare

   

Funzioni standard relative alla gestione che le librerie dovrebbero supportare

   

Passiamo ora a un concetto leggermente più avanzato in cui parliamo di come costruire app LLM su questi database

 

Progettazione di app LLM

 

Capire cosa è coinvolto da una prospettiva di flusso di lavoro prima di approfondire l’architettura delle app LLM alimentate dalla ricerca vettoriale.

Un tipico flusso di lavoro prevede:

  1. Arricchimento o pulizia dei dati. Questo è un passaggio leggero di trasformazione dei dati per migliorare la qualità dei dati e la formattazione coerente del contenuto. È anche il punto in cui potrebbe essere necessario arricchire i dati. 
  2. Codificare i dati come vettori tramite modelli. I modelli includono alcuni trasformatori (ad esempio, trasformatori di frasi)
  3. Inserire i vettori in un database vettoriale o in un indice vettoriale (cosa che spiegheremo a breve)
  4. Esporre la ricerca tramite un’API Python
  5. Coordinare il flusso di documenti 
  6. Testare e visualizzare i risultati in app e interfacce utente (ad esempio, interfaccia utente di chat)

Ora vediamo come abilitare diverse parti di questo flusso di lavoro utilizzando diversi componenti di architettura.

Per 1) potresti aver bisogno di iniziare a ottenere metadati da altri sistemi di origine (incluse basi di dati relazionali o sistemi di gestione dei contenuti).

I modelli preaddestrati sono quasi sempre preferiti per il passaggio 2) sopra. I modelli OpenAI sono i modelli più apprezzati offerti attraverso offerte ospitate. Potresti ospitare i modelli locali per motivi di privacy e sicurezza.

Per 3), hai bisogno di un database vettoriale o di un indice vettoriale se devi eseguire ricerche di similarità di grandi dimensioni, ad esempio in set di dati con più di un miliardo di record. Dal punto di vista aziendale, di solito hai un po’ più di contesto prima di effettuare la “ricerca”.

Per il punto 4) sopra, la buona notizia è che la ricerca esposta segue tipicamente un modello simile. Qualcosa del genere:

Da Pinecone

index = pinecone.Index("indice-esempio")

index.upsert([
    ("A", [0.1, 0.1, 0.1, 0.1], {"genere": "commedia", "anno": 2020}),
)


index.query( 
vector=[0.1, 0.1, 0.1, 0.1], 
filter={ 
"genere": {"$eq": "documentario"}, 
"anno": 2019 
}, 
top_k=1,
)

 

Una linea interessante qui è questa:

filter={ 
"genere": {"$eq": "documentario"}, 
"anno": 2019 
},

 

Filtra realmente i risultati ai vettori vicini al ‘genere’ e all”anno’. Puoi anche filtrare i vettori per concetti o temi.

La sfida ora, in un contesto aziendale, è che include altri filtri aziendali. È importante affrontare la mancanza di modellazione per i dati provenienti da fonti di dati (pensa alla struttura della tabella e ai metadati). Sarebbe importante migliorare la fedeltà del testo con meno espressioni errate che contraddicono i dati strutturati. È richiesta una strategia di “data pipelining” in questa situazione, e inizia a essere importante il “content matching” aziendale.

Per 5) Oltre alle solite sfide di scalabilità dell’ingestione, un corpus in continua evoluzione presenta le sue sfide. I nuovi documenti potrebbero richiedere la ricodifica e il reindicizzazione dell’intero corpus per mantenere i vettori rilevanti.

Per 6) Questa è un’area completamente nuova e richiede un approccio umano nel processo di verifica dei livelli di similarità per garantire la qualità in tutto lo spettro della ricerca.

Il punteggio di ricerca automatizzato insieme a diversi tipi di punteggio di contesto non è un compito facile da realizzare.

 

Indice vettoriale Python: un’alternativa di ricerca vettoriale più semplice per il tuo database esistente.

 

Un database vettoriale è un sistema complesso che consente la ricerca contestuale come negli esempi precedenti oltre a tutte le funzionalità aggiuntive del database (creazione, inserimento, aggiornamento, eliminazione, gestione, …).

Esempi di database vettoriali includono Weaviate e Pinecone. Entrambi espongono le API di Python.

A volte, una configurazione più semplice è sufficiente. Come alternativa più leggera, puoi utilizzare lo stesso archivio che stavi già utilizzando e aggiungere un indice vettoriale basato su di esso. Questo indice vettoriale viene utilizzato per recuperare solo le tue interrogazioni di ricerca con contesto, ad esempio, per il tuo uso di intelligenza artificiale generativa.

In una configurazione di indice vettoriale, hai:

  • Il tuo archivio dati di uso comune (ad es. PostgreSQL o directory su disco con file) fornisce le operazioni di base di cui hai bisogno: creazione, inserimento, aggiornamento, eliminazione.
  • Il tuo indice vettoriale che consente una rapida ricerca basata sul contesto sui tuoi dati.

Le librerie Python autonome che implementano gli indici vettoriali per te includono FAISS, Pathway LLM, Annoy.

La buona notizia è che il flusso di lavoro dell’applicazione LLM per database vettoriali e indici vettoriali è lo stesso. La differenza principale è che, oltre alla libreria Python Vector Index, continui a utilizzare anche la tua libreria dati esistente per le operazioni di dati “normali” e per la gestione dei dati. Ad esempio, potrebbe essere Psycopg se stai utilizzando PostgreSQL o il modulo Python standard “fs” se stai archiviando dati in file.

I sostenitori degli indici vettoriali si concentrano sui seguenti vantaggi:

  • Privacy dei dati: mantiene i dati originali sicuri e intatti, riducendo al minimo il rischio di esposizione dei dati.
  • Economicità: riduce i costi associati all’archiviazione aggiuntiva, alla potenza di calcolo e alle licenze.
  • Scalabilità: semplifica la scalabilità riducendo il numero di componenti da gestire.

 

Quando usare i database vettoriali rispetto agli indici vettoriali?

 

I database vettoriali sono utili quando uno o più dei seguenti sono veri

  • Hai una necessità specializzata per lavorare con dati vettoriali su larga scala
  • Stai creando un’applicazione appositamente progettata per i vettori
  • Non ti aspetti altri tipi di utilizzo per i tuoi dati archiviati in altri tipi di applicazioni.

Gli indici vettoriali sono utili quando uno o più dei seguenti sono veri

  • Non vuoi fidarti di una nuova tecnologia per l’archiviazione dei tuoi dati
  • Il tuo archivio esistente è facile da accedere da Python.
  • La ricerca di similarità è solo una delle capacità tra le altre esigenze più ampie di business intelligence e database aziendali
  • Hai bisogno della capacità di collegare vettori a record scalari esistenti
  • Hai bisogno di un modo unificato per gestire le pipeline per il tuo team di ingegneria dei dati
  • Hai bisogno di strutture di indice e grafo sui dati per aiutare le tue app o attività di LLM
  • Hai bisogno di output o contesto aumentato proveniente da altre fonti
  • Vuoi creare regole dal tuo corpus che possono essere applicate ai tuoi dati transazionali

 

Il futuro della ricerca vettoriale aziendale

 

La ricerca vettoriale sblocca capacità che cambiano il gioco per gli sviluppatori. Man mano che i modelli e le tecniche migliorano, è lecito aspettarsi che i database vettoriali o gli indici vettoriali diventino una parte integrante dello stack di applicazioni.

Spero che questa panoramica fornisca un punto di partenza solido per esplorare i database vettoriali e gli indici vettoriali in Python. Se sei curioso riguardo a un indice vettoriale recentemente sviluppato, ti prego di controllare questo progetto open source.     Anup Surendran è un VP di Prodotto e Marketing Prodotto specializzato nel portare prodotti AI sul mercato. Ha lavorato con startup che hanno avuto due uscite di successo (a SAP e Kroll) e ama insegnare agli altri come i prodotti AI possono migliorare la produttività all’interno di un’organizzazione.