Cette page explique comment configurer Vertex AI Feature Store en tant que base de données vectorielle à utiliser avec LlamaIndex sur Vertex AI pour le RAG.
LlamaIndex sur Vertex AI pour le RAG utilise une base de données vectorielle intégrée alimentée par Spanner pour stocker et gérer les représentations vectorielles de documents textuels. La base de données vectorielle récupère les documents pertinents en fonction de leur similarité sémantique avec une requête donnée.
En intégrant Vertex AI Feature Store en tant que base de données vectorielle supplémentaire, LlamaIndex sur Vertex AI pour le RAG peut utiliser Vertex AI Feature Store pour gérer de gros volumes de données avec une faible latence, ce qui permet d'améliorer les performances et l'évolutivité de vos applications RAG.
Configurer un Vertex AI Feature Store
Vertex AI Feature Store, un service cloud natif géré, est un composant essentiel de Vertex AI. Il simplifie la gestion des caractéristiques de machine learning (ML) et la livraison en ligne en vous permettant de gérer les données de caractéristiques dans une table ou une vue BigQuery. Cela permet la livraison de caractéristiques en ligne à faible latence.
Pour les instances FeatureOnlineStore
créées avec la livraison en ligne optimisée, vous pouvez utiliser une recherche de similarité vectorielle pour récupérer une liste d'entités sémantiquement similaires ou associées, également appelées voisins approximatifs les plus proches.
Les sections suivantes vous expliquent comment configurer une instance Vertex AI Feature Store pour votre application RAG.
Créer un schéma de table BigQuery
Utilisez la console Google Cloud pour créer un schéma de table BigQuery. Il doit contenir les champs suivants pour servir de source de données.
Nom du champ | Type de données | État |
---|---|---|
corpus_id |
String |
Obligatoire |
file_id |
String |
Obligatoire |
chunk_id |
String |
Obligatoire |
chunk_data_type |
String |
Nullable |
chunk_data |
String |
Nullable |
file_original_uri |
String |
Nullable |
embeddings |
Float |
Répété |
Cet exemple de code montre comment définir le schéma de votre table BigQuery.
# Use this sql query as reference for creating the table
CREATE TABLE `your-project-id.input_us_central1.rag_source_new` (
`corpus_id` STRING ,
`file_id` STRING,
`chunk_id` STRING,
`chunk_data_type` STRING,
`chunk_data` STRING,
`embeddings` ARRAY<FLOAT64>,
`file_original_uri` STRING,
);
Provisionner une instance FeatureOnlineStore
Pour activer la livraison en ligne des caractéristiques, utilisez l'API CreateFeatureOnlineStore
de Vertex AI Feature Store pour configurer une instance FeatureOnlineStore
. Si vous provisionnez un FeatureOnlineStore
pour la première fois, l'opération peut prendre environ cinq minutes.
# TODO(developer): Update and uncomment the following lines:
# PROJECT_ID = "your-project-id"
#
# Set feature_online_store_id.
# Example: "rag_fos_test"
# FEATURE_ONLINE_STORE_ID="your-feature-online-store-id"
# Call CreateFeatureOnlineStore to create a FeatureOnlineStore instance
curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://us-central1-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/us-central1/featureOnlineStores?feature_online_store_id=${FEATURE_ONLINE_STORE_ID} -d '{
"optimized": {},
}'
# TODO(developer): Update and uncomment the following lines:
# Get operation_id returned in CreateFeatureOnlineStore
# OPERATION_ID="your-operation-id"
# Poll Operation status until done = true in the response
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}
Créer une ressource FeatureView
Pour connecter la table BigQuery, qui stocke la source de données de fonctionnalité, à l'instance FeatureOnlineStore
, appelez l'API CreateFeatureView
pour créer une ressource FeatureView
. Lorsque vous créez une ressource FeatureView
, choisissez la métrique de distance par défaut DOT_PRODUCT_DISTANCE
, qui est définie comme la valeur négative du produit scalaire (une valeur DOT_PRODUCT_DISTANCE
plus faible indique une similitude plus élevée).
Cet exemple de code montre comment créer une ressource FeatureView
.
# TODO(developer): Update and uncomment the following lines:
# Set feature_view_id
# Example: "feature_view_test"
# FEATURE_VIEW_ID = "your-feature-view-id"
#
# The big_query_uri generated in the above BigQuery table schema creation step
# The format should be "bq://" + BigQuery table ID
# Example: "bq://tester.ragtest1.rag_testdata"
# BIG_QUERY_URI=YOUR_BIG_QUERY_URI
# Call CreateFeatureView API to create a FeatureView
curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" \
https://us-central1-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/us-central1/featureOnlineStores/${FEATURE_ONLINE_STORE_ID}/featureViews?feature_view_id=${FEATURE_VIEW_ID} \
-d '{
"vertex_rag_source": {
"uri": '\""${BIG_QUERY_URI}"\"'
}
}'
# Call ListFeatureViews API to verify the FeatureView is created successfully
curl -X GET -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" -H "Content-Type: application/json" https://us-central1-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/us-central1/featureOnlineStores/${FEATURE_ONLINE_STORE_ID}/featureViews
Importer des données et livraison en ligne
L'API RAG gère l'importation des données et la livraison en ligne.
Utiliser Vertex AI Feature Store dans LlamaIndex sur Vertex AI pour le RAG
Une fois l'instance Vertex AI Feature Store configurée, les sections suivantes vous expliquent comment la configurer en tant que base de données vectorielle à utiliser avec l'application RAG.
Utiliser l'instance Vertex AI Feature Store comme base de données vectorielle pour créer un corpus RAG
Pour créer le corpus RAG, vous devez utiliser FEATURE_VIEW_RESOURCE_NAME
. Le corpus RAG est créé et automatiquement associé à l'instance Vertex AI Feature Store. Les API RAG utilisent le rag_corpus_id
généré pour gérer l'importation des données dans l'instance Vertex AI Feature Store et pour récupérer les contextes pertinents à partir de rag_corpus_id
.
Cet exemple de code montre comment utiliser l'instance Vertex AI Feature Store comme base de données vectorielle pour créer un corpus RAG.
# TODO(developer): Update and uncomment the following lines:
# CORPUS_DISPLAY_NAME = "your-corpus-display-name"
#
# Full feature view resource name
# Format: projects/${PROJECT_ID}/locations/us-central1/featureOnlineStores/${FEATURE_ONLINE_STORE_ID}/featureViews/${FEATURE_VIEW_ID}
# FEATURE_VIEW_RESOURCE_NAME = "your-feature-view-resource-name"
# Call CreateRagCorpus API to create a new RAG corpus
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" : {
"vertex_feature_store": {
"feature_view_resource_name":'\""${FEATURE_VIEW_RESOURCE_NAME}"\"'
}
}
}'
# Call ListRagCorpora API to verify the RAG corpus is created successfully
curl -sS -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://us-central1-aiplatform.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/us-central1/ragCorpora"
Importer des fichiers dans la table BigQuery à l'aide de l'API RAG
Utilisez l'API ImportRagFiles
pour importer des fichiers depuis Google Cloud Storage ou Google Drive dans la table BigQuery de l'instance Vertex AI Feature Store. Les fichiers sont intégrés et stockés dans la table BigQuery.
Cet exemple de code montre comment importer des fichiers dans la table BigQuery à l'aide de l'API RAG.
# TODO(developer): Update and uncomment the following lines:
# RAG_CORPUS_ID = "your-rag-corpus-id"
#
# Google Cloud Storage bucket/file location.
# For example, "gs://rag-fos-test/"
# GCS_URIS= "your-gcs-uris"
# Call ImportRagFiles API to embed files and store in the BigQuery table
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/${RAG_CORPUS_ID}/ragFiles:import \
-d '{
"import_rag_files_config": {
"gcs_source": {
"uris": '\""${GCS_URIS}"\"'
},
"rag_file_chunking_config": {
"chunk_size": 512
}
}
}'
# Call ListRagFiles API to verify the files are imported successfully
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
https://us-central1-aiplatform.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/us-central1/ragCorpora/${RAG_CORPUS_ID}/ragFiles
Exécuter un processus de synchronisation pour créer un index FeatureOnlineStore
Après avoir importé vos données dans la table BigQuery, exécutez un processus de synchronisation pour les rendre disponibles pour la livraison en ligne. Vous devez générer un index FeatureOnlineStore
à l'aide de FeatureView
. Le processus de synchronisation peut prendre 20 minutes.
Cet exemple de code montre comment exécuter un processus de synchronisation pour créer un index FeatureOnlineStore
.
# Call Feature Store SyncFeatureView API to run the synchronization process
curl "https://us-central1-aiplatform.googleapis.com/v1/${FEATURE_VIEW_RESOURCE_NAME}:sync" \
-X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8"
# TODO(developer): Update and uncomment the following lines:
# Call Vertex AI Feature Store GetFeatureViewSync API to check the running synchronization // status
# FEATURE_VIEW_SYNC_ID = "your-feature-view-sync-id" returned in SyncFeatureView
curl "https://us-central1-aiplatform.googleapis.com/v1/${FEATURE_VIEW_RESOURCE_NAME}/featureViewSyncs/${FEATURE_VIEW_SYNC_ID}" \
-X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8"
Récupérer des contextes pertinents à l'aide de l'API RAG
Une fois le processus de synchronisation terminé, vous pouvez récupérer les contextes pertinents de l'index FeatureOnlineStore
via l'API RetrieveContexts
.
# TODO(developer): Update and uncomment the following lines:
# RETRIEVAL_QUERY="your-retrieval-query"
#
# Full RAG corpus resource name
# Format:
# "projects/${PROJECT_ID}/locations/us-central1/ragCorpora/${RAG_CORPUS_ID}"
# RAG_CORPUS_RESOURCE="your-rag-corpus-resource"
# Call RetrieveContexts API to retrieve relevant contexts
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
https://us-central1-aiplatform.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/us-central1:retrieveContexts \
-d '{
"vertex_rag_store": {
"rag_resources": {
"rag_corpus": '\""${RAG_CORPUS_RESOURCE}"\"',
},
},
"query": {
"text": '\""${RETRIEVAL_QUERY}"\"',
"similarity_top_k": 10
}
}'
Générer du contenu à l'aide de l'API Vertex AI Gemini
Appelez l'API Vertex AI GenerateContent
pour utiliser les modèles Gemini afin de générer du contenu, et spécifiez RAG_CORPUS_RESOURCE
dans la requête pour récupérer les données de l'index FeatureOnlineStore
.
# TODO(developer): Update and uncomment the following lines:
# MODEL_ID=gemini-pro
# GENERATE_CONTENT_PROMPT="your-generate-content-prompt"
# GenerateContent with contexts retrieved from the FeatureStoreOnline index
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/publishers/google/models/${MODEL_ID}:generateContent \
-d '{
"contents": {
"role": "user",
"parts": {
"text": '\""${GENERATE_CONTENT_PROMPT}"\"'
}
},
"tools": {
"retrieval": {
"vertex_rag_store": {
"rag_resources": {
"rag_corpus": '\""${RAG_CORPUS_RESOURCE}"\"',
},
"similarity_top_k": 8,
}
}
}
}'
Étape suivante
- Pour en savoir plus sur l'ancrage, consultez la section Présentation de l'ancrage.
- Pour en savoir plus sur LlamaIndex sur Vertex AI pour le RAG, consultez la section Utiliser LlamaIndex sur Vertex AI pour le RAG.
- Pour en savoir plus sur l'ancrage et le RAG, consultez la section Ancrer les réponses à l'aide du RAG.