Utiliser Vertex AI Feature Store dans LlamaIndex sur Vertex AI pour le RAG

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