Questa pagina mostra come collegare il corpus RAG al database Pinecone.
Puoi anche seguire le istruzioni utilizzando questo notebook Vertex AI RAG Engine con Pinecone.
Puoi utilizzare l'istanza del database Pinecone con Vertex AI RAG Engine per indicizzare ed eseguire una ricerca di somiglianza basata su vettori. Una ricerca di somiglianza è un modo per trovare parti di testo simili al testo che stai cercando, che richiede l'utilizzo di un modello di embedding. Il modello di embedding produce dati vettoriali per ogni parte di testo da confrontare. La ricerca di somiglianza viene utilizzata per recuperare i contesti semantici per il grounding al fine di restituire i contenuti più accurati dal tuo LLM.
Con Vertex AI RAG Engine, puoi continuare a utilizzare l'istanza del database vettoriale completamente gestita, di cui sei responsabile del provisioning. Vertex AI RAG Engine utilizza il database vettoriale per l'archiviazione, la gestione degli indici e la ricerca.
Valuta se utilizzare Pinecone con Vertex AI RAG Engine
Valuta se l'utilizzo del database Pinecone è la scelta migliore per la tua applicazione RAG esaminando quanto segue:
Devi creare, configurare e gestire lo scaling dell'istanza del database Pinecone.
Vertex AI RAG Engine utilizza lo spazio dei nomi predefinito nell'indice. Assicurati che questo spazio dei nomi non sia modificabile da altri elementi.
Devi fornire una chiave API Pinecone, che consente a Vertex AI RAG Engine di interagire con il database Pinecone. Vertex AI RAG Engine non archivia e gestisce la chiave API Pinecone. Devi invece eseguire le seguenti operazioni:
- Archivia la chiave in Google Cloud Secret Manager.
- Concedi al account di servizio del tuo progetto le autorizzazioni per accedere al secret.
- Fornisci a Vertex AI RAG Engine l'accesso al nome della risorsa del secret.
- Quando interagisci con il corpus RAG, Vertex AI RAG Engine accede alla risorsa secret utilizzando il tuo account di servizio.
Il corpus RAG e l'indice Pinecone hanno una mappatura uno a uno. Questa associazione viene eseguita nell'ambito della chiamata API
CreateRagCorpuso della chiamata APIUpdateRagCorpus.
Crea l'indice Pinecone
Per creare l'indice Pinecone, devi seguire questi passaggi:
Consulta la guida rapida di Pinecone per ottenere le configurazioni dell'indice che devono essere specificate nell'indice per renderlo compatibile con il corpus RAG.
Per i seguenti motivi, devi assicurarti che la località dell'indice Pinecone sia la stessa o vicina a quella in cui utilizzi Vertex AI RAG Engine:
- Vuoi mantenere una latenza ridotta.
- Vuoi soddisfare i requisiti di residenza dei dati stabiliti dalle leggi vigenti.
Durante la creazione dell'indice Pinecone, specifica la dimensione dell'embedding da utilizzare con Vertex AI RAG Engine. Questa tabella fornisce le dimensioni o la posizione delle dimensioni:
Modello Dimensione Gecko proprietario 768 Gecko proprietario ottimizzato 768 E5 Consulta Utilizzare i modelli di embedding OSS. Scegli una delle seguenti metriche di distanza supportate:
cosinedotproducteuclidean
(Facoltativo) Quando crei un indice basato su pod, devi specificare
file_idnel campopod.metadata_config.indexed. Per saperne di più, consulta Indicizzazione selettiva dei metadati.
Crea la chiave API Pinecone
Vertex AI RAG Engine può connettersi all'indice Pinecone solo utilizzando la chiave API per l'autenticazione e l'autorizzazione. Devi seguire la guida ufficiale di Pinecone per l'autenticazione per configurare l'autenticazione basata su chiave API nel tuo progetto Pinecone.
Archivia la chiave API in Secret Manager
Una chiave API contiene informazioni sensibili che consentono l'identificazione personale (SPII), soggette a requisiti legali. Se i dati SPII vengono compromessi o utilizzati in modo improprio, una persona potrebbe subire un rischio o un danno significativo. Per ridurre al minimo i rischi per una persona durante l'utilizzo di Vertex AI RAG Engine, non archiviare e gestire la chiave API ed evita di condividerla non criptata.
Per proteggere le SPII, devi:
Archivia la chiave API in Secret Manager.
Concedi al account di servizio Vertex AI RAG Engine le autorizzazioni per i tuoi secret e gestisci il controllo dell'accesso a livello di risorsa secret.
Vai alle autorizzazioni del tuo progetto.
Attiva l'opzione Includi concessioni di ruoli fornite da Google.
Trova il account di servizio, che ha il seguente formato:
service-{project number}@gcp-sa-vertex-rag.iam.gserviceaccount.comModifica le entità del account di servizio.
Aggiungi il ruolo
Secret Manager Secret Accessoral service account.
Durante la creazione o l'aggiornamento del corpus RAG, passa il nome della risorsa secret a Vertex AI RAG Engine e archivialo.
Quando effettua richieste API agli indici Pinecone, Vertex AI RAG Engine utilizza ogni account di servizio per leggere la chiave API corrispondente alle risorse secret in Secret Manager dai tuoi progetti.
Provisioning del account di servizio Vertex AI RAG Engine
Quando crei il primo corpus RAG nel tuo progetto, Vertex AI RAG Engine crea un account di servizio dedicato. Puoi trovare il tuo account di servizio nella pagina Identity and Access Management del tuo progetto.
Il account di servizio segue questo formato fisso:
service-{project number}@gcp-sa-vertex-rag.iam.gserviceaccount.com
Ad esempio,
service-123456789@gcp-sa-vertex-rag.iam.gserviceaccount.com
Prepara il corpus RAG
Per utilizzare l'indice Pinecone con Vertex AI RAG Engine, devi associarlo a un corpus RAG durante la fase di creazione. Una volta effettuata l'associazione, questo binding è permanente per tutta la durata del corpus RAG. L'associazione può essere eseguita utilizzando l'API CreateRagCorpus o UpdateRagCorpus.
Affinché l'associazione sia considerata completa, devi impostare tre campi chiave nel corpus RAG:
rag_vector_db_config.pinecone: questo campo ti consente di impostare la scelta di un database vettoriale che vuoi associare al corpus RAG e deve essere impostato durante la chiamata APICreateRagCorpus. Se non è impostato, al corpus RAG viene assegnata la scelta predefinita del database vettorialeRagManagedDb.rag_vector_db_config.pinecone.index_name: questo è il nome utilizzato per creare l'indice Pinecone utilizzato con il corpus RAG. Puoi impostare il nome durante la chiamataCreateRagCorpusoppure puoi specificarlo quando chiami l'APIUpdateRagCorpus.rag_vector_db_config.api_auth.api_key_config.api_key_secret_version: questo è il nome completo della risorsa del secret archiviato in Secret Manager, che contiene la chiave API Pinecone. Puoi impostare il nome durante la chiamataCreateRagCorpusoppure puoi specificarlo quando chiami l'APIUpdateRagCorpus. Finché non specifichi questo campo, non puoi importare dati nel corpus RAG.
Questo campo deve avere il formato:
projects/{PROJECT_NUMBER}/secrets/{SECRET_ID}/versions/{VERSION_ID}
Crea il corpus RAG
Se hai accesso al nome dell'indice Pinecone e al nome della risorsa secret con le autorizzazioni impostate, puoi creare il corpus RAG e associarlo all'indice Pinecone, come illustrato in questo codice campione.
La prima volta che crei un corpus RAG, non avrai a disposizione le informazioni del service account. Tuttavia, i campi sono facoltativi e possono essere associati al corpus RAG utilizzando l'API UpdateRagCorpus.
Per un esempio di come creare il corpus RAG senza fornire le informazioni del service account, consulta Creare un corpus RAG senza un nome di indice o una chiave API.
Python
Prima di provare questo esempio, segui le istruzioni di configurazione Python nella guida rapida di Vertex AI per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell' API Python di Vertex AI.
Per eseguire l'autenticazione in Vertex AI, configura le Credenziali predefinite dell'applicazione. Per saperne di più, consulta Configura l'autenticazione per un ambiente di sviluppo locale.
REST
# Set your project ID under which you want to create the corpus
PROJECT_ID = "YOUR_PROJECT_ID"
# Choose a display name for your corpus
CORPUS_DISPLAY_NAME=YOUR_CORPUS_DISPLAY_NAME
# Set your Pinecone index name
PINECONE_INDEX_NAME=YOUR_INDEX_NAME
# Set the full resource name of your secret. Follows the format
# projects/{PROJECT_NUMER}/secrets/{SECRET_ID}/versions/{VERSION_ID}
SECRET_RESOURCE_NAME=YOUR_SECRET_RESOURCE_NAME
# Call CreateRagCorpus API with all the Vector DB information.
# You can also add the embedding model choice or set other RAG corpus parameters on
# this call per your choice.
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://us-central1-aiplatform.googleapis.com}/v1beta1/projects/${PROJECT_ID}/locations/us-central1/ragCorpora -d '{
"display_name" : '\""${CORPUS_DISPLAY_NAME}"\"',
"rag_vector_db_config" : {
"pinecone": {"index_name": '\""${PINECONE_INDEX_NAME}"\"'},
"api_auth": {"api_key_config":
{"api_key_secret_version": '\""${SECRET_RESOURCE_NAME}"\"'}
}
}
}'
# To poll the status of your RAG corpus creation, get the operation_id returned in
# response of your CreateRagCorpus call.
OPERATION_ID="YOUR_OPERATION_ID"
# Poll Operation status until done = true in the response.
# The response to this call will contain the ID for your created RAG corpus
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://us-central1-aiplatform.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/us-central1/operations/${OPERATION_ID}
Crea un corpus RAG senza un nome di indice o una chiave API
Se questo è il tuo primo corpus RAG e non hai accesso ai dettagli del service account o non hai completato i passaggi di provisioning per l'indice Pinecone, puoi comunque creare il corpus RAG. Puoi quindi associare il corpus RAG a una configurazione Pinecone vuota e aggiungere i dettagli in un secondo momento.
Devi tenere presente quanto segue:
- Se non fornisci il nome dell'indice e il nome del secret della chiave API, non è possibile importare i file nel corpus RAG.
- Se scegli Pinecone come database vettoriale per il corpus RAG, non puoi passare a un altro database in un secondo momento.
Questo esempio di codice mostra come creare un corpus RAG con Pinecone senza fornire un nome di indice Pinecone o un nome di secret API. Utilizza l'API UpdateRagCorpus per specificare in un secondo momento le informazioni mancanti.
Python
import vertexai
from vertexai.preview import rag
# Set Project
PROJECT_ID = "YOUR_PROJECT_ID"
vertexai.init(project=PROJECT_ID, location="us-central1")
# Configure the Pinecone vector DB information
vector_db = rag.Pinecone()
# Name your corpus
DISPLAY_NAME = "YOUR_CORPUS_NAME"
rag_corpus = rag.create_corpus(display_name=DISPLAY_NAME, vector_db=vector_db)
REST
# Set your project ID under which you want to create the corpus
PROJECT_ID = "YOUR_PROJECT_ID"
# Choose a display name for your corpus
CORPUS_DISPLAY_NAME=YOUR_CORPUS_DISPLAY_NAME
# Call CreateRagCorpus API with all the Vector DB information.
# You can also add the embedding model choice or set other RAG corpus parameters on
# this call per your choice.
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://us-central1-aiplatform.googleapis.com}/v1beta1/projects/${PROJECT_ID}/locations/us-central1/ragCorpora -d '{
"display_name" : '\""${CORPUS_DISPLAY_NAME}"\"',
"rag_vector_db_config" : {
"pinecone": {}
}
}'
# To poll the status of your RAG corpus creation, get the operation_id returned in
# response of your CreateRagCorpus call.
OPERATION_ID="YOUR_OPERATION_ID"
# Poll Operation status until done = true in the response.
# The response to this call will contain the ID for your created RAG corpus
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://us-central1-aiplatform.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/us-central1/operations/${OPERATION_ID}
Aggiorna il corpus RAG
L'API UpdateRagCorpus consente di aggiornare la configurazione del database vettoriale.
Se il nome dell'indice Pinecone e la versione del secret della chiave API non sono stati impostati in precedenza, puoi utilizzare l'API Pinecone per aggiornare i campi. La scelta di un database vettoriale non può essere aggiornata. È facoltativo fornire il secret della chiave API. Tuttavia, se non specifichi il secret della chiave API, puoi importare i dati nel corpus RAG.
| Campo | Mutabilità | Obbligatorio o facoltativo |
|---|---|---|
rag_vector_db_config.vector_db |
Immutabile dopo aver effettuato una scelta. | Obbligatorio |
rag_vector_db_config.pinecone.index_name |
Immutabile dopo aver impostato il campo nel corpus RAG. | Obbligatorio |
rag_vector_db_config.api_auth.api_key_config.api_key_secret_version |
Modificabile. Dopo aver impostato la chiave API, non puoi eliminarla. | Facoltativo |
Python
import vertexai
from vertexai.preview import rag
# Set Project
PROJECT_ID = "YOUR_PROJECT_ID"
vertexai.init(project=PROJECT_ID, location="us-central1")
# Configure the Pinecone vector DB information
vector_db = rag.Pinecone(index_name=)
# Name your corpus
DISPLAY_NAME = "YOUR_CORPUS_NAME"
rag_corpus = rag.create_corpus(display_name=DISPLAY_NAME, vector_db=vector_db)
REST
# Set your project ID for the corpus that you want to create.
PROJECT_ID = "YOUR_PROJECT_ID"
# Set your Pinecone index name
PINECONE_INDEX_NAME=YOUR_INDEX_NAME
# Set the full resource name of your secret. Follows the format
# projects/{PROJECT_NUMER}/secrets/{SECRET_ID}/versions/{VERSION_ID}
SECRET_RESOURCE_NAME=YOUR_SECRET_RESOURCE_NAME
# Call UpdateRagCorpus API with the Vector DB information.
curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://us-central1-aiplatform.googleapis.com}/v1beta1/projects/${PROJECT_ID}/locations/us-central1/ragCorpora -d '{
"rag_vector_db_config" : {
"pinecone": {"index_name": '\""${PINECONE_INDEX_NAME}"\"'},
"api_auth": {"api_key_config":
{"api_key_secret_version": '\""${SECRET_RESOURCE_NAME}"\"'}
}
}
}'
# To poll the status of your RAG corpus creation, get the operation_id returned in
# response of your CreateRagCorpus call.
OPERATION_ID="YOUR_OPERATION_ID"
# Poll Operation status until done = true in the response.
# The response to this call will contain the ID for your created RAG corpus
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://us-central1-aiplatform.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/us-central1/operations/${OPERATION_ID}