Embedding e reranker di Voyage AI per la ricerca e RAG
Introduzione
In passato, l'AI veniva utilizzata principalmente per analizzare e suggerire informazioni; tuttavia, con l'avvento dell'AI generativa, ora possiamo generare contenuti nuovi e unici. Sembra interessante, ma a volte il contenuto può essere fuorviante.
Entra in gioco RAG (Retrieval Augmented Generation), che ottimizza l'output di un modello linguistico di grandi dimensioni dato il contesto della query. Zilliz e Voyage AI hanno collaborato per rendere semplice la creazione di una pipeline RAG, come vedremo più avanti nell'articolo. Voyage AI fornisce modelli di embedding personalizzati specifici per dominio e reranker per la ricerca. Ne discuteremo alcuni in questo articolo.
Creare RAG con Zilliz Cloud Pipelines e Voyage Ai.png
Modelli di embedding e Voyage AI
I computer non possono comprendere informazioni da dati come testo o immagini. Utilizziamo modelli di embedding per rendere i computer capaci di comprendere la semantica dietro i dati non strutturati. Questa sezione tratterà le basi dei modelli di embedding, la loro utilità nell'AI generativa e perché RAG è l'approccio predominante per l'AI generativa aziendale.
Una breve introduzione ai modelli di embedding
I modelli di embedding sono modelli di deep learning che creano embedding vettoriali per dati specifici. Questi modelli convertono il testo, l'immagine, la voce forniti, o qualsiasi forma di dato non numerico o persino numerico, in una rappresentazione vettoriale compatta. Questa rappresentazione, nota anche come embedding vettoriale, mappa le informazioni in uno spazio vettoriale numerico.
Codifica di dati non strutturati in embedding vettoriali
Carenze dell'AI generativa
L'uso dell'AI generativa a livello aziendale sta crescendo vertiginosamente grazie alla sua affascinante capacità di automatizzare attività gravose e produrre risultati con il minimo sforzo. Anche se la Gen AI è encomiabile nell'assisterci in vari scenari, presenta anche delle carenze. I modelli GenAI, come ChatGPT, sono modelli generici addestrati su milioni o trilioni di voci di dati provenienti da più domini. Questo fatto può essere problematico a volte. I modelli sono probabilistici e generano la parola successiva in base al contesto fornito. Quando il contesto è limitato o più recente per il modello, iniziano ad avere allucinazioni. È qui che RAG dà il meglio di sé.
RAG e come riduce le allucinazioni
La tecnica RAG richiede l'uso di modelli di embedding specifici per dominio per incorporare la query fornita. Questa query viene poi portata a un database vettoriale, dove viene applicata la ricerca semantica per recuperare embedding vettoriali contestuali simili. Tutti i documenti rilevanti dal database vettoriale e la query fornita vengono poi passati al modello. Il modello utilizza le informazioni aggiuntive e il contesto della query per formulare risultati pertinenti, aggiornati e accurati. In questo modo, l'architettura RAG riduce qualsiasi allucinazione del modello e consente un LLM più solido e affidabile.
L'architettura RAG
Ora che abbiamo discusso i modelli di embedding e il loro ruolo in RAG, discutiamo alcuni modelli di embedding di Voyage AI. Voyage AI fornisce vari modelli di embedding personalizzati in molti domini per eseguire tecniche RAG efficaci ed efficienti. Questi modelli sono collegati a database vettoriali, come Milvus di Zilliz, per archiviare e recuperare embedding vettoriali relativi alla query generata.
Modelli di embedding di Voyage AI
Voyage AI offre molti modelli di embedding efficienti ed efficaci, specifici per dominio e di uso generale. Questi modelli contribuiscono in modo significativo alla ricerca e alla RAG. Offrono una qualità di retrieval superiore rispetto alla maggior parte dei modelli di embedding.
Tra i molteplici modelli di embedding, i migliori includono voyage-code-2, voyage-law-2 e voyage-large-2-instruct. Voyage AI ha sviluppato questi modelli per specifici domini di codice, diritto, finanza e multilingue. Inoltre, possiamo personalizzare questi modelli in base ai nostri casi d’uso specifici. Diamo un’occhiata ai loro modelli più recenti:
- voyage-code-2: Un modello esperto nel fornire codice relativo alla query con precisione millimetrica. La figura seguente mostra le prestazioni di voyage-code-2 per l’attività di retrieval del codice:
analisi delle prestazioni di voyage-code-2.png
- voyage-law-2: Un modello addestrato per ottenere contesto ed embedding per documenti legali. Questo modello fornisce il miglior risultato per quanto riguarda documenti legali a contesto lungo in diversi domini e offre prestazioni migliori su corpora di uso generale in diversi domini. Le figure seguenti evidenziano le prestazioni di voyage-law-2:
analisi delle prestazioni di voyage-law-2
La figura sopra mostra le capacità prestazionali dei modelli di embedding di Voyage AI, che sono classificati ai primi posti dal Massive Text Embedding Benchmark (MTEB).
Reranker e Voyage AI
Abbiamo discusso di come la RAG migliori la qualità dell’output della GenAI riducendo le allucinazioni di tali modelli. Tuttavia, un piccolo problema è ancora legato alla finestra di contesto dei modelli GenAI. La finestra di contesto si riferisce alla quantità massima di informazioni che il modello di AI può ricevere in un dato momento per l’elaborazione. Una finestra più piccola significa che il modello riceve meno informazioni; una più grande significa un aumento dei costi e dei tempi di elaborazione.
Un reranker classifica i documenti recuperati dai database vettoriali per ottenere risultati ottimali calcolando il loro punteggio di rilevanza rispetto alla query fornita. Il ranking aiuta a filtrare i documenti più rilevanti (informativi) affinché rientrino nella finestra di contesto e generino i risultati più accurati.
Mentre le tecniche RAG recuperano embedding vettoriali per fornire informazioni contestuali e assistere nelle ricerche, questi modelli riclassificano tutti gli embedding recuperati utilizzando un punteggio di rilevanza per fornire i dati più pertinenti agli LLM.
Architettura semplice di un reranker
Reranker di Voyage AI
Voyage AI ha sviluppato un modello reranker noto come rerank-lite-1. Questo modello Voyage è un reranker generalista ottimizzato per latenza e qualità. Ha una finestra di contesto di 4000 token. La figura seguente mostra le prestazioni di questo modello.
analisi delle prestazioni di voyage:ranke-lite-1
Usare gli embedding di Voyage su Zilliz Cloud Pipelines
Zilliz e Voyage AI hanno stretto una partnership per semplificare la conversione di dati non strutturati in embedding vettoriali ricercabili su Zilliz Cloud.
Questa sezione mostrerà come integrare Zilliz Cloud e i modelli di embedding di Voyage AI per una generazione e un retrieval degli embedding semplificati. Ti mostreremo anche come utilizzare questa integrazione e Cohere (l’LLM) per creare un’applicazione RAG. Iniziamo.
Configurare Zilliz Cloud
Il primo passaggio consiste nel configurare Zilliz Cloud. Se non hai ancora un account Zilliz Cloud, registrati gratuitamente.
Al primo accesso, la seguente console verrà visualizzata sullo schermo.
Console di Zilliz cloud per creare un cluster
- Creeremo un cluster secondo necessità. Zilliz offre un piano gratuito per imparare, sperimentare e creare prototipi, che in seguito può essere migrato a diversi piani di produzione.
Creating a new Cluster in Zilliz.png
- Dopo aver creato il nuovo cluster, verranno visualizzate tutte le informazioni necessarie per connettersi.
Connection to the cluster
Il project ID può essere recuperato da Projects nella barra del menu superiore. Individua il progetto di destinazione e copia il suo ID nella colonna Project ID.
Projects Dashboard for Project ID
- Ora abbiamo tutti gli elementi necessari per la nostra connessione al cluster. È il momento di creare le nostre pipeline. Useremo Cohere come LLM per l'applicazione RAG. Per questo, installeremo
cohere.
%pip install cohere
Ecco le importazioni necessarie per questo notebook.
import os
import requests
Nel codice seguente, abbiamo configurato il nostro CLOUD_REGION, CLUSTER_ID, API_KEY e PROJECT_ID:
CLOUD_REGION = 'gcp-us-west1'
CLUSTER_ID = 'your CLUSTER_ID'
API_KEY = 'your API_KEY'
PROJECT_ID = 'your PROJECT_ID'
Zilliz Cloud Pipelines
Zilliz Cloud Pipelines converte i dati non strutturati in una raccolta vettoriale ricercabile, gestendo i processi di embedding, ingestione, ricerca ed eliminazione. Zilliz Cloud offre tre tipi di pipeline:
- Ingestion Pipeline: Converte i dati non strutturati in embedding vettoriali ricercabili e li archivia nei database vettoriali di Zilliz Cloud. Include varie funzioni per trasformare i campi di input e preservare informazioni aggiuntive per il recupero.
Search Pipeline: Questa pipeline abilita la ricerca semantica convertendo una stringa di query in un embedding vettoriale e recuperando i vettori simili Top-K insieme al testo e ai metadati corrispondenti. Consente un solo tipo di funzione.
Deletion Pipeline: Rimuove le entità specificate da una raccolta, consentendo un solo tipo di funzione.
Ingestion Pipeline
Nella pipeline di Ingestion, puoi specificare funzioni per personalizzarne il comportamento in base ai dati di input. Attualmente supporta quattro funzioni:
INDEX_DOC: Prende un documento come input, lo divide in chunk e genera un embedding vettoriale per ogni chunk. Mappa un campo di input su quattro campi di output (doc_name, chunk_id, chunk_text ed embedding) nella raccolta.PRESERVE: Memorizza l'input definito dall'utente come campo scalare aggiuntivo nella raccolta, tipicamente usato per meta-informazioni come informazioni sull'editore e tag.INDEX_TEXT: Elabora i testi convertendo ciascun testo in embedding vettoriale e mappando un campo di input (text_list) su due campi di output (text ed embedding).INDEX_IMAGE: Elabora le immagini generando un embedding dell'immagine, mappando due campi di input (image_url e image_id) su due campi di output (image_id ed embedding).
Nel frammento di codice seguente, useremo la libreria requests per inviare la richiesta a Zilliz cloud. Una richiesta post comprende URL, header e dati da inviare. Creiamo il nostro header:
headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Authorization": f"Bearer {API_KEY}"
}
Definiremo il nostro collection_name e embedding_service nel codice seguente. Il servizio di embedding utilizzerà i modelli Voyage AI, specificamente voyage-2, che hanno mostrato prestazioni eccezionali nelle attività di retrieval, nella documentazione tecnica e nelle applicazioni generali.
create_pipeline_url = f"https://controller.api.{CLOUD_REGION}.zillizcloud.com/v1/pipelines"
collection_name = 'Documents'
embedding_service = "voyageai/voyage-large-2"
Nel frammento di codice seguente, definiremo la funzione di indicizzazione per la nostra ingestion_pipeline:
data = {
"name": "ingestion_pipeline",
"description": "Una pipeline che genera embedding di testo e memorizza informazioni sul titolo.",
"type": "INGESTION",
"projectId": PROJECT_ID,
"clusterId": CLUSTER_ID,
"collectionName": collection_name,
"functions": [
{
"name": "index_doc",
"action": "INDEX_DOC",
"language": "ENGLISH",
"embedding": embedding_service
}
]
}
response = requests.post(create_pipeline_url, headers=headers, json=data)
print(response.json())
Il pipelineId verrà utilizzato in seguito per inserire i dati nel database. Dopo questo passaggio, possiamo vedere la nostra raccolta creata nel cluster, così come la nostra pipeline di ingestione:
ingestion_pipe_id = response.json()["data"]["pipelineId"]
print(ingestion_pipe_id)
>> pipe-cf…
Ecco la raccolta creata nel cloud:
Raccolta creata nel cloud
E la nostra pipeline di ingestione appare così:
Pipeline di ingestione in Zilliz Cloud
Pipeline di ricerca
Le pipeline di ricerca facilitano la ricerca semantica convertendo una stringa di query in un embedding vettoriale e recuperando i vettori Top-K dei vicini più prossimi. La pipeline di ricerca include la funzione SEARCH_DOC_CHUNK, che richiede la specifica del cluster e della raccolta da cui effettuare la ricerca.
Zilliz supporta molte funzioni. Qui useremo SEARCH_DOC_CHUNK, che prende in input una query utente e restituisce chunk di documenti pertinenti dalla knowledge base.
data = {
"projectId": PROJECT_ID,
"name": "search_pipeline",
"description": "Una pipeline che riceve testo e cerca chunk di documenti semanticamente simili",
"type": "SEARCH",
"functions": [
{
"name": "search_chunk_text",
"action": "SEARCH_DOC_CHUNK",
"inputField": "query_text",
"clusterId": f"{CLUSTER_ID}",
"collectionName": f"{collection_name}",
"embedding": embedding_service
}
]
}
response = requests.post(create_pipeline_url, headers=headers, json=data)
search_pipe_id = response.json()["data"]["pipelineId"]
Abbiamo creato le nostre pipeline di ingestione e di ricerca. È il momento di inserire questo articolo nella nostra pipeline di ingestione ed eseguire la nostra pipeline di ricerca.
Eseguire la pipeline di ingestione
La pipeline di ingestione può acquisire file da servizi di Object Storage come AWS S3 o Google Cloud Storage (GCS). I formati di file accettati includono .txt, .pdf, .md, .html, ecc. Possiamo eseguire la pipeline di ingestione dalla console Zilliz. Facciamolo passo dopo passo.
1. Vai su Pipelines dalla sinistra e naviga fino a ingestion_pipeline come mostrato di seguito:
Pipeline di ingestione creata nel cloud
2. Dopo aver fatto clic su Run, verremo indirizzati alla seguente pagina:
Allega file nella pipeline di ingestione
Allega il file di testo ed esegui la pipeline. Dopo il successo, il file di testo verrà caricato nella raccolta. Ecco l’anteprima dei dati:
Anteprima dei dati della raccolta
Eseguire la pipeline di ricerca
RAG (retrieval augmented generation) ha due componenti principali: il retriever e l’LLM. Creare un retriever è semplice quanto eseguire la pipeline di ricerca. La pipeline di ricerca prende in input la query e recupera il chunk più pertinente dal database. Nel codice sottostante, la funzione retriever prende in input la query e topk (il numero di documenti da selezionare) ed esegue la pipeline di ricerca.
def retriver(question, topk):
run_pipeline_url = f"https://controller.api.{CLOUD_REGION}.zillizcloud.com/v1/pipelines/{search_pipe_id}/run"
data = {
"data": {
"query_text": question
},
"params": {
"limit": topk,
"offset": 0,
"outputFields": [
"chunk_text",
"id",
"doc_name"
],
}
}
response = requests.post(run_pipeline_url, headers=headers, json=data)
return [result['chunk_text'] for result in response.json()['data']['result']]
## Applicazione RAG che utilizza Cohere come LLM
Dopo aver recuperato i documenti, useremo Cohere come nostro LLM. Forniremo i documenti recuperati all’API chat di Cohere racchiusi in un prompt e faremo domande al riguardo.
import cohere
co = cohere.Client(api_key="your_api_key")
def chatbot(query, topk):
chunks = retriver(query, topk)
response = co.chat(
model="command-r-plus",
message= f"Given this information: '{[chunk for chunk in chunks]}', generate a response for the following {query}"
)
return response.text
question = "I'm looking for a good model for legal retrieving tasks?" print(chatbot(question, 2))
Ecco la risposta del chatbot:
Based on the provided information, it seems you are specifically interested in a proficient model in legal retrieving tasks. In that case, the model best suits your needs is "voyage-law-2."
## Conclusione
Voyage AI fornisce modelli di embedding e reranker personalizzati specifici per dominio per la ricerca avanzata. Zilliz Cloud Pipelines integra perfettamente i modelli Voyage AI con Zilliz Cloud, rendendo lo sviluppo di [RAG](https://zilliz.com/learn/Retrieval-Augmented-Generation) molto più semplificato.
Questo articolo ha discusso i popolari modelli di embedding e reranker di Voyage AI e la loro integrazione con Zilliz Cloud. Abbiamo anche dimostrato come costruire un RAG con Voyage AI, Zilliz Cloud Pipeline e Cohere.
Per ulteriori dettagli, guarda la replica dell’intervento di Tengyu Ma al [**Unstructured Data Meetup by Zilliz**](https://www.youtube.com/watch?v=EmoWfP-78l0\&ab_channel=Zilliz)**.**
Continua a leggere

Introducing Zilliz CLI and Agent Skills for Zilliz Cloud
Manage your vector database from your terminal or AI coding agent. Zilliz CLI and Agent Skills work with Claude Code, Cursor, Codex, and Copilot.

Smarter Autoscaling in Zilliz Cloud: Always Optimized for Every Workload
With the latest upgrade, Zilliz Cloud introduces smarter autoscaling—a fully automated, more streamlined, elastic resource management system.

Vector Databases vs. Hierarchical Databases
Use a vector database for AI-powered similarity search; use a hierarchical database for organizing data in parent-child relationships with efficient top-down access patterns.



