Weaviate è un motore di ricerca vettoriale open-source, cloud-native, modulare e in tempo reale che ti consente di archiviare oggetti di dati ed embedding vettoriali e interrogarli in base a misure di similitudine. In questo tutorial esploreremo Weaviate e i suoi concetti chiave, vedremo come configurarlo, creare uno schema, aggiungere dati e interrogarli tramite l'interfaccia GraphQL di Weaviate. Tratteremo anche come usare Weaviate con Python e discuteremo best practice e suggerimenti per il design dello schema, l'importazione dei dati e l'ottimizzazione delle query.
Che cos'è Weaviate?
Weaviate è un database vettoriale che archivia sia oggetti sia vettori, consentendo di combinare la ricerca vettoriale. È modulare, cloud-native e in tempo reale, il che rende semplice scalare i modelli di machine learning. Weaviate include moduli opzionali per testo, immagini e altri tipi di media, che puoi scegliere in base al tuo task e ai tuoi dati. Puoi anche usare più di un modulo, a seconda della varietà dei dati.
Capire gli embedding
I dati non strutturati, come testo, immagini e audio, non hanno un formato predefinito, il che li rende impegnativi per i database e i metodi tradizionali.
Per rendere questi dati utilizzabili nelle applicazioni di IA e machine learning, vengono convertiti in vettori numerici tramite embedding.
Gli embedding funzionano come dizionari specializzati che trasformano dati ad alta dimensionalità in forme numeriche compatte, facilitando l'elaborazione efficiente da parte dei modelli di IA.
Sono fondamentali per ridurre la dimensionalità dei dati e superare i limiti dei metodi di codifica tradizionali, permettendo all'IA di comprendere relazioni complesse e contesto all'interno dei dati.
I database tradizionali memorizzano i dati in tabelle, interrogabili con SQL. Tuttavia, SQL non è adatto alla ricerca su dati non strutturati, come testo o immagini. I database vettoriali, invece, memorizzano i dati come vettori, che possono essere interrogati usando misure di similitudine.
Questo li rende ideali per compiti come la ricerca semantica, il question answering e la ricerca generativa. I vettori si ottengono tramite il modello di embedding di ML. È solo la rappresentazione numerica dell'oggetto originale, come testo, immagine, audio, video, ecc.
Considera uno scenario in cui un modello linguistico viene usato per analizzare e categorizzare grandi insiemi di documenti testuali. Ogni documento può essere trasformato in un vettore ad alta dimensionalità che ne racchiude l'essenza semantica.
Archiviare questi vettori in un database tradizionale potrebbe non essere efficiente per compiti come la ricerca per similitudine o il clustering.
Qui entra in gioco un database vettoriale. È ottimizzato per memorizzare vettori ed eseguire operazioni vettoriali ad alta velocità, come trovare i vicini più prossimi o calcolare la similarità coseno tra vettori.
Per configurare Weaviate, puoi usare Docker Compose o installarlo manualmente. Docker Compose è il metodo consigliato, perché semplifica il processo di installazione. Una volta installato Weaviate, puoi verificarne l'installazione eseguendo una semplice query.
Per Docker Compose, scarica questo file yaml da Weaviate. Una volta che hai questo file, puoi semplicemente eseguire:
In Weaviate, ogni elemento di dati appartiene a un gruppo chiamato "Classe" e ha determinate caratteristiche chiamate "Proprietà". Questi elementi di dati (rappresentati come documenti JSON) sono collezioni basate su classi.
Ogni elemento di dati è rappresentato da un vettore (modello di embedding di machine learning). Ogni collezione basata su classe contiene oggetti della stessa classe, definiti da uno schema comune.
Moduli
Weaviate è costruito in modo flessibile, permettendoti di aggiungere funzionalità opzionali come la trasformazione dei dati in vettori o la creazione di backup.
Senza questi componenti aggiuntivi, la versione base di Weaviate funge da database progettato specificamente per dati vettoriali.
Weaviate è un database affidabile che salva i dati all'istante e può gestire guasti sia software sia hardware.
Quando cerchi qualcosa usando i vettori, Weaviate ti restituisce l'elemento di dati completo (a volte chiamato "documento" in altri database) invece di un semplice identificatore come un ID.
Se usi sia ricerche tradizionali sia vettoriali, i filtri vengono applicati prima della ricerca vettoriale, così ottieni esattamente il numero di risultati richiesto. Questo è diverso dal filtraggio dopo la ricerca, dove il numero di risultati può variare.
Puoi aggiornare o eliminare liberamente dati e relativi vettori, anche mentre stai leggendo dal database.
GraphQL
Puoi interagire con Weaviate tramite le sue API, che includono sia una RESTful API sia una GraphQL API. Le librerie client per tutti i linguaggi di programmazione sono compatibili con queste funzionalità API.
GraphQL è un linguaggio di query per API che ti consente di richiedere esattamente i dati di cui hai bisogno. Offre un modo più efficiente e flessibile di interagire con i database rispetto ai metodi tradizionali come REST.
L'interfaccia GraphQL è stata scelta per diversi motivi, tra cui:
Consente di collegare i dati in Weaviate tramite riferimenti incrociati, rendendo molto efficace un linguaggio di query basato su grafi come GraphQL.
GraphQL elimina l'over-fetching e l'under-fetching dei dati, restituendo solo le informazioni specifiche richieste, migliorando le prestazioni.
Semplifica il processo ed è meno soggetta a errori.
Creare una classe in Weaviate
Ogni oggetto Weaviate appartiene a una classe. Puoi creare la classe manualmente oppure usare l'Auto-schema di Weaviate per crearla. Creando una classe manualmente hai maggiore controllo sul modello dei dati.
Per creare una classe usando la libreria client di Python:
class_name ="Item description"
class_object ={"class": class_name}
client.schema.create_class(class_object)Offerto da
In genere specificherai anche configurazioni aggiuntive; un esempio più realistico tratto da Weaviate.io è il seguente:
{"class":"Article","vectorizer":"text2vec-cohere","vectorIndexConfig":{"distance":"cosine",},"moduleConfig":{"generative-openai":{}},"properties":[{"name":"title","dataType":["text"]},{"name":"chunk","dataType":["text"]},{"name":"chunk_no","dataType":["int"]},{"name":"url","dataType":["text"],"tokenization":"field"},],}Offerto da
Nota che è definito un modello per la vettorializzazione text2vec-cohere così come la metrica di distanza cosine. Osserva come le proprietà siano definite come un elenco di dizionari.
Creare un oggetto in Weaviate
L'oggetto appartiene a una classe. Gli oggetti possono omettere proprietà della classe nonché aggiungerne di nuove. Di seguito un esempio di aggiunta di un oggetto alla classe Article.
uuid = client.data_object.create({'question':'question here ...','answer':'answer here ...'},'Article')Offerto da
Puoi facoltativamente assegnare un vettore a rappresentare ciascun oggetto. Se non definisci un vettore, Weaviate userà il suo vettorializzatore predefinito.
uuid = client.data_object.create(
data_object={'question':'question here ...','answer':'answer here ...',},
class_name='Article',
vector=[0.12345]*1536Offerto da
Esempio end-to-end di creazione e utilizzo di un database vettoriale in Weaviate con il client Python
Questo è un esempio che mostra come creare una classe e poi aggiungere un oggetto alla classe usando il client Python di Weaviate. Devi prima installare il client Python con pip.
Per lavorare con Weaviate, devi avere un'istanza funzionante di Weaviate. Ci sono due modi per usarla: innanzitutto utilizzando un'istanza ospitata e completamente gestita sul servizio cloud di Weaviate. In alternativa puoi usare Weaviate Embedded, che esegue l'istanza in background della tua app.
# For using embeddedimport weaviate
from weaviate.embedded import EmbeddedOptions
import json
import os
client = weaviate.Client(
embedded_options=EmbeddedOptions(),
additional_headers ={"X-OpenAI-Api-Key":"YOUR_OPENAI_KEY"})Offerto da
Creare una classe è molto semplice:
class_obj ={"class":"Question","vectorizer":"text2vec-openai","moduleConfig":{"text2vec-openai":{},"generative-openai":{}}}
client.schema.create_class(class_obj)Offerto da
Se il vettorializzatore è impostato su None allora dovrai fornire tu stesso i vettori come elenco.
Ora possiamo aggiungere oggetti alla classe creata Question tramite il processo di importazione batch. Useremo il Q&A di Jeopardy in formato json. Si presenta così:
# Load dataimport requests
url ='https://raw.githubusercontent.com/weaviate-tutorials/quickstart/main/data/jeopardy_tiny.json'
resp = requests.get(url)
data = json.loads(resp.text)# Configure a batch processwith client.batch(
batch_size=100)as batch:# Batch import all Questionsfor i, d inenumerate(data):print(f"importing question: {i+1}")
properties ={"answer": d["Answer"],"question": d["Question"],"category": d["Category"],}
client.batch.add_data_object(
properties,"Question",)Offerto da
Questo esempio è stato riprodotto utilizzando la documentazione di Weaviate.
Best practice e suggerimenti per Weaviate
Vediamo alcuni suggerimenti utili per usare efficacemente Weaviate. Che tu stia progettando lo schema, importando dati o ottimizzando le query, queste best practice ti aiuteranno a sfruttare al meglio le capacità di Weaviate.
Progettazione dello schema
Progetta uno schema flessibile e scalabile. Ti permetterà di aggiungere nuove proprietà e modificare quelle esistenti senza dover cambiare lo schema.
Usa identificatori univoci per ogni entità e azione. Renderà più semplice interrogare i dati ed evitare duplicati.
Usa tipi semantici per definire le proprietà di entità e azioni. Faciliterà le query e garantirà coerenza in tutto lo schema.
Importazione dei dati
Usa la funzionalità di importazione batch per aggiungere dati in modo efficiente. Ti permetterà di aggiungere grandi quantità di dati in una volta sola ed evitare problemi di prestazioni.
Usa la RESTful API per aggiungere dati. Ti consentirà di automatizzare il processo di importazione e integrarlo con altri strumenti.
Usa formati dati supportati, come JSON o CSV. Garantirà che i dati vengano importati correttamente ed eviterà errori.
Ottimizzazione delle query
Usa l'interfaccia GraphQL di Weaviate per interrogare i dati. Ti permetterà di eseguire query complesse e filtrare i dati in base a criteri specifici.
Usa la paginazione per limitare la quantità di dati restituiti da ogni query. Migliorerà le prestazioni e ridurrà il carico sul server.
Usa la cache per memorizzare i dati consultati di frequente. Migliorerà le prestazioni e ridurrà il numero di query necessarie per recuperare i dati.
ChromaDB è un altro popolare database vettoriale open-source nella community data science. Con Chroma DB puoi gestire facilmente documenti testuali, convertire testo in embedding ed effettuare ricerche per similitudine. Se vuoi saperne di più su ChromaDB, dai un'occhiata al Chroma DB Tutorial.
Conclusione
Il Tutorial Weaviate fornisce una guida completa per comprendere e utilizzare Weaviate, un motore di ricerca vettoriale open-source, cloud-native e in tempo reale. L'articolo copre un'ampia gamma di argomenti, dalle basi su cos'è Weaviate e come differisce dai database tradizionali, fino ai dettagli pratici su come configurarlo e usarlo in modo efficace.
Weaviate si distingue per la capacità di gestire dati non strutturati tramite embedding vettoriali, rendendolo uno strumento potente per applicazioni di machine learning e IA. La sua architettura modulare offre flessibilità, permettendoti di scegliere moduli opzionali in base alle tue esigenze specifiche. L'articolo approfondisce anche l'importanza degli embedding, spiegando come trasformano dati ad alta dimensionalità in un formato facilmente elaborabile dai modelli di IA.
Scopri i 15 migliori server MCP remoti che stanno trasformando lo sviluppo AI nel 2026. Scopri come migliorano automazione, ragionamento, sicurezza e velocità dei workflow.
Scopri come usare l'IA generativa in modo responsabile. Scopri come si sviluppano i modelli di IA generativa e quale impatto avranno sulla società in futuro.
Scopri le basi dell'intelligenza artificiale, impara a usarla al meglio per il lavoro e immergiti in modelli come ChatGPT per orientarti nel mondo dinamico dell'IA.
Weaviate è un motore di ricerca vettoriale open-source, cloud-native, modulare e in tempo reale che ti consente di archiviare oggetti di dati ed embedding vettoriali e interrogarli in base a misure di similitudine. In questo tutorial esploreremo Weaviate e i suoi concetti chiave, vedremo come configurarlo, creare uno schema, aggiungere dati e interrogarli tramite l'interfaccia GraphQL di Weaviate. Tratteremo anche come usare Weaviate con Python e discuteremo best practice e suggerimenti per il design dello schema, l'importazione dei dati e l'ottimizzazione delle query.
Che cos'è Weaviate?
Weaviate è un database vettoriale che archivia sia oggetti sia vettori, consentendo di combinare la ricerca vettoriale. È modulare, cloud-native e in tempo reale, il che rende semplice scalare i modelli di machine learning. Weaviate include moduli opzionali per testo, immagini e altri tipi di media, che puoi scegliere in base al tuo task e ai tuoi dati. Puoi anche usare più di un modulo, a seconda della varietà dei dati.
Capire gli embedding
I dati non strutturati, come testo, immagini e audio, non hanno un formato predefinito, il che li rende impegnativi per i database e i metodi tradizionali.
Per rendere questi dati utilizzabili nelle applicazioni di IA e machine learning, vengono convertiti in vettori numerici tramite embedding.
Gli embedding funzionano come dizionari specializzati che trasformano dati ad alta dimensionalità in forme numeriche compatte, facilitando l'elaborazione efficiente da parte dei modelli di IA.
Sono fondamentali per ridurre la dimensionalità dei dati e superare i limiti dei metodi di codifica tradizionali, permettendo all'IA di comprendere relazioni complesse e contesto all'interno dei dati.
Modello di embedding testuale - Fonte immagine
Capire i database vettoriali
I database tradizionali memorizzano i dati in tabelle, interrogabili con SQL. Tuttavia, SQL non è adatto alla ricerca su dati non strutturati, come testo o immagini. I database vettoriali, invece, memorizzano i dati come vettori, che possono essere interrogati usando misure di similitudine.
Questo li rende ideali per compiti come la ricerca semantica, il question answering e la ricerca generativa. I vettori si ottengono tramite il modello di embedding di ML. È solo la rappresentazione numerica dell'oggetto originale, come testo, immagine, audio, video, ecc.
Considera uno scenario in cui un modello linguistico viene usato per analizzare e categorizzare grandi insiemi di documenti testuali. Ogni documento può essere trasformato in un vettore ad alta dimensionalità che ne racchiude l'essenza semantica.
Archiviare questi vettori in un database tradizionale potrebbe non essere efficiente per compiti come la ricerca per similitudine o il clustering.
Qui entra in gioco un database vettoriale. È ottimizzato per memorizzare vettori ed eseguire operazioni vettoriali ad alta velocità, come trovare i vicini più prossimi o calcolare la similarità coseno tra vettori.
Fonte immagine
Pinecone è un altro popolare database vettoriale ed è un'ottima alternativa a Weaviate. Se vuoi saperne di più su Pinecone, dai un'occhiata a Mastering Vector Databases with Pinecone Tutorial.
Come configurare Weaviate
Per configurare Weaviate, puoi usare Docker Compose o installarlo manualmente. Docker Compose è il metodo consigliato, perché semplifica il processo di installazione. Una volta installato Weaviate, puoi verificarne l'installazione eseguendo una semplice query.
Per Docker Compose, scarica questo file yaml da Weaviate. Una volta che hai questo file, puoi semplicemente eseguire:
Le altre opzioni per usare Weaviate sono:
Per usare Weaviate in Python puoi installare il client python di weaviate tramite pip.
Concetti fondamentali in Weaviate
Oggetto dati
In Weaviate, ogni elemento di dati appartiene a un gruppo chiamato "Classe" e ha determinate caratteristiche chiamate "Proprietà". Questi elementi di dati (rappresentati come documenti JSON) sono collezioni basate su classi.
Ogni elemento di dati è rappresentato da un vettore (modello di embedding di machine learning). Ogni collezione basata su classe contiene oggetti della stessa classe, definiti da uno schema comune.
Moduli
Weaviate è costruito in modo flessibile, permettendoti di aggiungere funzionalità opzionali come la trasformazione dei dati in vettori o la creazione di backup.
Senza questi componenti aggiuntivi, la versione base di Weaviate funge da database progettato specificamente per dati vettoriali.
Fonte immagine
Storage
Weaviate è un database affidabile che salva i dati all'istante e può gestire guasti sia software sia hardware.
Quando cerchi qualcosa usando i vettori, Weaviate ti restituisce l'elemento di dati completo (a volte chiamato "documento" in altri database) invece di un semplice identificatore come un ID.
Se usi sia ricerche tradizionali sia vettoriali, i filtri vengono applicati prima della ricerca vettoriale, così ottieni esattamente il numero di risultati richiesto. Questo è diverso dal filtraggio dopo la ricerca, dove il numero di risultati può variare.
Puoi aggiornare o eliminare liberamente dati e relativi vettori, anche mentre stai leggendo dal database.
GraphQL
Puoi interagire con Weaviate tramite le sue API, che includono sia una RESTful API sia una GraphQL API. Le librerie client per tutti i linguaggi di programmazione sono compatibili con queste funzionalità API.
GraphQL è un linguaggio di query per API che ti consente di richiedere esattamente i dati di cui hai bisogno. Offre un modo più efficiente e flessibile di interagire con i database rispetto ai metodi tradizionali come REST.
L'interfaccia GraphQL è stata scelta per diversi motivi, tra cui:
Creare una classe in Weaviate
Ogni oggetto Weaviate appartiene a una classe. Puoi creare la classe manualmente oppure usare l'
Auto-schemadi Weaviate per crearla. Creando una classe manualmente hai maggiore controllo sul modello dei dati.Per creare una classe usando la libreria client di Python:
In genere specificherai anche configurazioni aggiuntive; un esempio più realistico tratto da Weaviate.io è il seguente:
Nota che è definito un modello per la vettorializzazione
text2vec-coherecosì come la metrica di distanzacosine. Osserva come le proprietà siano definite come un elenco di dizionari.Creare un oggetto in Weaviate
L'oggetto appartiene a una classe. Gli oggetti possono omettere proprietà della classe nonché aggiungerne di nuove. Di seguito un esempio di aggiunta di un oggetto alla classe
Article.Puoi facoltativamente assegnare un vettore a rappresentare ciascun oggetto. Se non definisci un vettore, Weaviate userà il suo vettorializzatore predefinito.
Esempio end-to-end di creazione e utilizzo di un database vettoriale in Weaviate con il client Python
Questo è un esempio che mostra come creare una classe e poi aggiungere un oggetto alla classe usando il client Python di Weaviate. Devi prima installare il client Python con pip.
Per lavorare con Weaviate, devi avere un'istanza funzionante di Weaviate. Ci sono due modi per usarla: innanzitutto utilizzando un'istanza ospitata e completamente gestita sul servizio cloud di Weaviate. In alternativa puoi usare Weaviate Embedded, che esegue l'istanza in background della tua app.
Creare una classe è molto semplice:
Se il vettorializzatore è impostato su
Noneallora dovrai fornire tu stesso i vettori come elenco.Ora possiamo aggiungere oggetti alla classe creata
Questiontramite il processo di importazione batch. Useremo il Q&A di Jeopardy in formato json. Si presenta così:Fonte dei dati (Credit: Weaviate Official)
Questo esempio è stato riprodotto utilizzando la documentazione di Weaviate.
Best practice e suggerimenti per Weaviate
Vediamo alcuni suggerimenti utili per usare efficacemente Weaviate. Che tu stia progettando lo schema, importando dati o ottimizzando le query, queste best practice ti aiuteranno a sfruttare al meglio le capacità di Weaviate.
Progettazione dello schema
Importazione dei dati
Ottimizzazione delle query
ChromaDB è un altro popolare database vettoriale open-source nella community data science. Con Chroma DB puoi gestire facilmente documenti testuali, convertire testo in embedding ed effettuare ricerche per similitudine. Se vuoi saperne di più su ChromaDB, dai un'occhiata al Chroma DB Tutorial.
Conclusione
Il Tutorial Weaviate fornisce una guida completa per comprendere e utilizzare Weaviate, un motore di ricerca vettoriale open-source, cloud-native e in tempo reale. L'articolo copre un'ampia gamma di argomenti, dalle basi su cos'è Weaviate e come differisce dai database tradizionali, fino ai dettagli pratici su come configurarlo e usarlo in modo efficace.
Weaviate si distingue per la capacità di gestire dati non strutturati tramite embedding vettoriali, rendendolo uno strumento potente per applicazioni di machine learning e IA. La sua architettura modulare offre flessibilità, permettendoti di scegliere moduli opzionali in base alle tue esigenze specifiche. L'articolo approfondisce anche l'importanza degli embedding, spiegando come trasformano dati ad alta dimensionalità in un formato facilmente elaborabile dai modelli di IA.
Se vuoi continuare a imparare su Weaviate, dai un'occhiata al nostro webinar su Database vettoriali per la data science con Weaviate in Python.