Questa pagina mostra come collegare il corpus RAG al database Pinecone.
Puoi anche seguire la procedura utilizzando questo notebook Vertex AI RAG Engine with Pinecone.
Puoi utilizzare l'istanza del database Pinecone con il motore RAG di Vertex AI per eseguire l'indicizzazione e effettuare una ricerca di somiglianza basata su vettori. Una ricerca di similarità è un modo per trovare frammenti di testo simili a quelli che stai cercando, il che richiede l'utilizzo di un modello di embedding. Il modello di embedding produce dati vettoriali per ogni testo confrontato. La ricerca di somiglianze viene utilizzata per recuperare i contesti semantici per l'ancoraggio in modo da restituire i contenuti più accurati dell'LLM.
Con il motore RAG di Vertex AI, puoi continuare a utilizzare l'istanza del database vettoriale completamente gestita di cui sei responsabile del provisioning. Il motore RAG di Vertex AI utilizza il tuo database vettoriale per archiviazione, gestione dell'indice e ricerca.
Valuta la possibilità di utilizzare Pinecone con il motore RAG di Vertex AI
Valuta se l'utilizzo del database Pinecone è la scelta migliore per la tua applicazione RAG esaminando quanto segue:
Devi creare, configurare e gestire il ridimensionamento dell'istanza del database Pinecone.
Il motore RAG di Vertex AI 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 al motore RAG di Vertex AI di interagire con il database Pinecone. Il motore RAG di Vertex AI non archivia e gestisce la chiave API Pinecone. Devi invece:
- Archivia la chiave in Google Cloud Secret Manager.
- Concedi all'account di servizio del progetto le autorizzazioni per accedere al tuo secret.
- Fornisci a Vertex AI RAG Engine l'accesso al nome della risorsa del tuo segreto.
- Quando interagisci con il tuo corpus RAG, il motore RAG di Vertex AI accede alla risorsa segreta utilizzando il tuo account di servizio.
Il corpus RAG e l'indice Pinecone hanno una mappatura uno a uno. Questa associazione viene effettuata nell'ambito della chiamata API
CreateRagCorpus
o della chiamata APIUpdateRagCorpus
.
Creare l'indice Pinecone
Per creare l'indice Pinecone, devi seguire questi passaggi:
Consulta la guida rapida di Pinecone per conoscere le configurazioni dell'indice che devono essere specificate nell'indice per renderlo compatibile con il corpus RAG.
Devi assicurarti che la posizione dell'indice Pinecone sia uguale o simile a quella in cui utilizzi Vertex AI RAG Engine per i seguenti motivi:
- Vuoi mantenere la latenza ridotta.
- Vuoi soddisfare i requisiti di residenza dei dati stabiliti dalle legge vigenti.
Durante la creazione dell'indice Pinecone, specifica la dimensione dell'embedding da utilizzare con il motore RAG di Vertex AI. Questa tabella fornisce le dimensioni o la posizione delle dimensioni:
Modello Dimensioni delle dimensioni Gecko proprietario 768 Gecko proprietario ottimizzato 768 E5 Vedi Utilizzare i modelli di incorporamento OSS. Scegli una delle seguenti metriche di distanza supportate:
cosine
dotproduct
euclidean
(Facoltativo) Quando crei un indice basato su pod, devi specificare
file_id
nel campopod.metadata_config.indexed
. Per ulteriori informazioni, consulta Indicizzazione selettiva dei metadati.
Crea la tua chiave API Pinecone
Il motore RAG di Vertex AI può connettersi al tuo indice Pinecone solo utilizzando la tua chiave API per l'autenticazione e l'autorizzazione. Per configurare l'autenticazione basata su chiave API nel progetto Pinecone, devi seguire la guida ufficiale di Pinecone sull'autenticazione.
Memorizza la chiave API in Secret Manager
Una chiave API contiene informazioni sensibili che consentono l'identificazione personale (informazioni personali sensibili), che sono soggette a requisiti legali. Se i dati relativi alle informazioni personali sensibili vengono compromessi o utilizzati in modo improprio, un privato potrebbe essere esposto a un rischio o a un danno significativo. Per ridurre al minimo i rischi per un singolo individuo durante l'utilizzo del motore RAG di Vertex AI, non memorizzare e gestire la chiave API ed evita di condividerla non criptata.
Per proteggere le informazioni sensibili relative alla privacy, devi:
Archivia la chiave API in Secret Manager.
Concedi al account di servizio dell'Engine RAG di Vertex AI le autorizzazioni per i tuoi secret e gestisci il controllo dell'accesso a livello di risorsa secret.
Vai alle autorizzazioni del progetto.
Attiva l'opzione Includi concessioni di ruoli fornite da Google.
Trova l'account di servizio, che ha il seguente formato:
service-{project number}@gcp-sa-vertex-rag.iam.gserviceaccount.com
Modifica gli entità dell'account di servizio.
Aggiungi il ruolo
Secret Manager Secret Accessor
all'account di servizio.
Durante la creazione o l'aggiornamento del corpus RAG, passa il nome della risorsa secret al motore RAG di Vertex AI e memorizzalo.
Quando invii richieste API ai tuoi indici Pinecone, il motore RAG di Vertex AI utilizza ogni account di servizio per leggere la chiave API corrispondente alle risorse segrete in Secret Manager dai tuoi progetti.
Esegui il provisioning dell'account di servizio Vertex AI RAG Engine
Quando crei il primo corpus RAG nel tuo progetto, il motore RAG di Vertex AI crea un account di servizio dedicato. Puoi trovare il tuo account di servizio nella pagina Identity and Access Management del progetto.
L'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 il motore RAG di Vertex AI, devi associarlo
a un corpus RAG durante la fase di creazione. Una volta stabilita l'associazione, questo vincolo è 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 sul corpus RAG:
rag_vector_db_config.pinecone
: questo campo ti aiuta a impostare la scelta di un database di vettori da associare al tuo corpus RAG e deve essere impostato durante la chiamata dell'APICreateRagCorpus
. Se non è impostato, al corpus RAG viene assegnata la scelta predefinita del database di vettoriRagManagedDb
.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 chiamata aCreateRagCorpus
oppure specificarlo quando chiami l'APIUpdateRagCorpus
.rag_vector_db_config.api_auth.api_key_config.api_key_secret_version
: si tratta del nome completo della risorsa del segreto archiviato in Secret Manager, che contiene la chiave API Pinecone. Puoi impostare il nome durante la chiamata aCreateRagCorpus
oppure specificarlo quando chiami l'APIUpdateRagCorpus
. Finché non specifichi questo campo, non puoi importare i dati nel corpus RAG.
Questo campo deve avere il seguente formato:
projects/{PROJECT_NUMBER}/secrets/{SECRET_ID}/versions/{VERSION_ID}
Creare il corpus RAG
Se hai accesso al nome dell'indice Pinecone e al nome della risorsa segreta con le autorizzazioni impostate, puoi creare il tuo corpus RAG e associarlo all'indice Pinecone, come dimostrato in questo codice campione.
Se è la prima volta che crei un corpus RAG, non avrai a disposizione i dati dell'account servizio. Tuttavia, i campi sono facoltativi e possono essere associati al corpus RAG utilizzando l'API UpdateRagCorpus
.
Per un esempio su come creare il corpus RAG senza fornire i dati dell'account di servizio, consulta Creare un corpus RAG senza un nome dell'indice o una chiave API.
Python
Prima di provare questo esempio, segui le istruzioni di configurazione Python riportate nella guida rapida all'utilizzo delle librerie client di Vertex AI. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Python di Vertex AI.
Per autenticarti a Vertex AI, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configurare 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}
Creare un corpus RAG senza un nome di indice o una chiave API
Se è il tuo primo corpus RAG e non hai accesso ai dettagli del tuo account servizio o non hai completato i passaggi di provisioning per l'indice Pinecone, puoi comunque creare il tuo corpus RAG. Puoi quindi associare il corpus RAG a una configurazione di Pinecone vuota e aggiungere i dettagli in un secondo momento.
È necessario tenere conto di quanto segue:
- Se non fornisci il nome dell'indice e il nome segreto della chiave API, i file non possono essere importati nel corpus RAG.
- Se scegli Pinecone come database di vettori per il tuo corpus RAG, non potrai più passare a un altro database in un secondo momento.
Questo codice di esempio mostra come creare un corpus RAG con Pinecone senza fornire un nome dell'indice Pinecone o il nome della chiave segreta dell'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}
Aggiornare il corpus RAG
L'API UpdateRagCorpus
ti consente di aggiornare la configurazione del database di vettori.
Se il nome dell'indice Pinecone e la versione della chiave API segreta 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}