Utiliser des modèles d'embedding avec LlamaIndex sur Vertex AI pour le RAG

Cette page décrit les modèles d'embedding que vous pouvez choisir et vous explique comment créer un corpus RAG à l'aide de votre choix. L'association entre votre modèle et le corpus RAG reste fixe pendant toute la durée de vie de votre corpus RAG.

Les embeddings sont des représentations numériques des entrées. Vous pouvez utiliser des embeddings dans vos applications pour reconnaître des significations complexes et des relations sémantiques, et pour traiter et produire du langage.

Les embeddings permettent de convertir du texte, des images et des vidéos en tableaux de nombres à virgule flottante appelés vecteurs. Plus deux vecteurs sont proches dans leur espace d'embedding, plus leurs entrées sont similaires.

Les modèles d'embeddings sont un composant important des systèmes de récupération sémantique. Les performances d'un système de récupération dépendent de la qualité avec laquelle le modèle d'intégration mappe les relations dans vos données.

LlamaIndex sur Vertex AI pour le RAG implémente la génération augmentée de récupération (RAG) et vous propose les modèles d'intégration suivants à utiliser dans un corpus RAG :

  • Modèles d'embedding textuel Vertex AI : modèles entraînés par l'éditeur, tel que Google. Les modèles sont entraînés sur un grand ensemble de données textuelles et fournissent une référence solide pour de nombreuses tâches.
  • Modèles d'embedding textuel Vertex AI affinés : modèles entraînés pour disposer de connaissances spécialisées ou de performances très personnalisées.
  • Modèles d'intégration OSS : modèles d'intégration Open Source tiers en anglais uniquement et en variantes multilingues.

Utiliser des modèles d'embedding textuel Vertex AI

L'API Vertex AI d'embedding textuel utilise les modèles d'embedding Gecko, qui produisent un vecteur d'embedding dense à 768 dimensions. Les embeddings denses stockent le sens du texte, contrairement aux vecteurs clairsemés, qui ont tendance à mapper directement les mots sur des nombres. L'utilisation d'embeddings denses dans l'IA générative fait qu'au lieu de rechercher des correspondances directes de mots ou de syntaxe, vous pouvez mieux rechercher des passages correspondant au sens de la requête, même si les passages n'utilisent pas la même langue.

Les modèles Gecko sont disponibles en anglais uniquement et en versions multilingues. Contrairement aux modèles Gecko affinés, les modèles Gecko de l'éditeur ne doivent pas être déployés, ce qui en fait l'ensemble de modèles le plus facile à utiliser avec LlamaIndex sur Vertex AI pour le RAG. Les modèles Gecko suivants sont recommandés pour un corpus RAG :

  • text-embedding-004
  • text-multilingual-embedding-002
  • textembedding-gecko@003
  • textembedding-gecko-multilingual@001

Si vous ne spécifiez pas de modèle d'embedding lorsque vous créez votre corpus RAG, LlamaIndex sur Vertex AI pour le RAG attribue par défaut le modèle text-embedding-004 à votre corpus RAG.

Les modèles Gecko de l'éditeur peuvent être obsolètes. Dans ce cas, les modèles Gecko de l'éditeur ne peuvent pas être utilisés avec LlamaIndex sur Vertex AI pour le RAG, même pour un corpus RAG créé avant l'abandon. Lorsque votre modèle Gecko est obsolète, vous devez migrer le corpus RAG, ce qui signifie que vous devez créer un corpus RAG et importer les données. Vous pouvez également utiliser un modèle Gecko affiné ou un modèle d'intégration OSS auto-déployé, qui est compatible après la mise au rebut du modèle.

Ces exemples de code montrent comment créer un corpus RAG avec un modèle Gecko d'éditeur.

curl

  ENDPOINT=us-central1-aiplatform.googleapis.com
  PROJECT_ID=YOUR_PROJECT_ID

  // Set this to your choice of publisher Gecko model. Note that the full resource name of the publisher model is required.
  // Example: projects/${PROJECT_ID}/locations/us-central1/publishers/google/models/text-embedding-004
  ENDPOINT_NAME=YOUR_ENDPOINT_NAME

  // Set a display name for your corpus.
  // For example, "my test corpus"
  CORPUS_DISPLAY_NAME=YOUR_CORPUS_DISPLAY_NAME

  // CreateRagCorpus
  // Input: ENDPOINT, PROJECT_ID, ENDPOINT_NAME, CORPUS_DISPLAY_NAME
  curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  https://${ENDPOINT}/v1beta1/projects/${PROJECT_ID}/locations/us-central1/ragCorpora \
  -d '{
        "display_name" : '\""${CORPUS_DISPLAY_NAME}"\"',
        "rag_embedding_model_config" : {
              "vertex_prediction_endpoint": {
                    "endpoint": '\""${ENDPOINT_NAME}"\"'
              }
        }
  }'

SDK Vertex AI pour Python

  import vertexai
  from vertexai.preview import rag

  # Set Project
  PROJECT_ID = "YOUR_PROJECT_ID"
  vertexai.init(project=${PROJECT_ID}, location="us-central1")

  # Configure a Google first-party embedding model
  embedding_model_config = rag.EmbeddingModelConfig(
        publisher_model="publishers/google/models/text-embedding-004"
  )

  # Name your corpus
  DISPLAY_NAME = "YOUR_CORPUS_DISPLAY_NAME"

  rag_corpus = rag.create_corpus(
        display_name=DISPLAY_NAME, embedding_model_config=embedding_model_config
  )

Utiliser des modèles d'embedding textuel Vertex AI affinés

Bien que les modèles de fondation de l'éditeur soient entraînés sur un grand ensemble de données textuelles et fournissent une référence solide pour de nombreuses tâches, il peut arriver que vous ayez besoin de modèles ayant des connaissances spécialisées ou des performances très personnalisées. Dans ce cas, le réglage du modèle vous permet d'affiner les représentations du modèle à l'aide de vos données pertinentes. Un autre avantage de cette approche est que, lorsque le modèle est affiné, l'image obtenue vous appartient et n'est pas affectée par l'abandon du modèle Gecko. Tous les modèles d'embedding Gecko affinés produisent des embeddings avec des vecteurs à 768 dimensions. Pour en savoir plus sur ces modèles, consultez la section Obtenir des embeddings textuels.

Pour affiner un modèle Gecko, consultez la section Régler les embeddings textuels.

Ces exemples de code montrent comment créer un corpus RAG avec votre modèle Gecko déployé et affiné.

curl

  ENDPOINT=us-central1-aiplatform.googleapis.com
  PROJECT_ID=YOUR_PROJECT_ID

  // Your Vertex AI endpoint resource with the deployed fine-tuned Gecko model
  // Example: projects/${PROJECT_ID}/locations/${LOCATION}/endpoints/${ENDPOINT_ID}
  ENDPOINT_NAME=YOUR_ENDPOINT_NAME

  // Set a display name for your corpus.
  // For example, "my test corpus"
  CORPUS_DISPLAY_NAME=YOUR_CORPUS_DISPLAY_NAME

  // CreateRagCorpus
  // Input: ENDPOINT, PROJECT_ID, ENDPOINT_NAME, CORPUS_DISPLAY_NAME
  curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  https://${ENDPOINT}/v1beta1/projects/${PROJECT_ID}/locations/us-central1/ragCorpora \
  -d '{
        "display_name" : '\""${CORPUS_DISPLAY_NAME}"\"',
        "rag_embedding_model_config" : {
                "vertex_prediction_endpoint": {
                      "endpoint": '\""${ENDPOINT_NAME}"\"'
                }
        }
    }'

SDK Vertex AI pour Python

  import vertexai
  from vertexai.preview import rag

  # Set Project
  PROJECT_ID = "YOUR_PROJECT_ID"
  vertexai.init(project=${PROJECT_ID}, location="us-central1")

  # Your Vertex Endpoint resource with the deployed fine-tuned Gecko model
  ENDPOINT_ID = "YOUR_MODEL_ENDPOINT_ID"
  MODEL_ENDPOINT = "projects/${PROJECT_ID}/locations/us-central1/endpoints/${ENDPOINT_ID}"

  embedding_model_config = rag.EmbeddingModelConfig(
      endpoint=${MODEL_ENDPOINT},
  )

  # Name your corpus
  DISPLAY_NAME = "YOUR_CORPUS_DISPLAY_NAME"

  rag_corpus = rag.create_corpus(
      display_name=${DISPLAY_NAME}, embedding_model_config=embedding_model_config
  )

Utiliser des modèles d'embedding OSS

LlamaIndex sur Vertex AI pour le RAG est compatible avec les modèles d'embeddings Open Source tiers en anglais uniquement et dans des variantes multilingues. Ce tableau liste les modèles E5 compatibles.

Version de modèle Modèle de base Paramètres Dimension d'embedding Anglais uniquement
e5-base-v2 MiniLM 109M 768
e5-large-v2 MiniLM 335M 1 024
e5-small-v2 MiniLM 33M 384
multilingual-e5-large xlm-roberta-large 560M 1 024
multilingual-e5-small microsoft/Multilingual-MiniLM-L12-H384 118M 384

Pour utiliser des modèles E5 avec LlamaIndex sur Vertex AI pour le RAG, le modèle E5 doit être déployé à partir de Model Garden. Consultez Embedding textuel E5 dans la console Google Cloud pour déployer votre modèle E5.

Ces exemples de code montrent comment créer un corpus RAG avec votre modèle E5 déployé.

curl

  ENDPOINT=us-central1-aiplatform.googleapis.com
  PROJECT_ID=YOUR_PROJECT_ID

  // Your Vertex Endpoint resource with the deployed E5 model
  // Example: projects/${PROJECT_ID}/locations/${LOCATION}/endpoints/${ENDPOINT_ID}
  ENDPOINT_NAME=YOUR_ENDPOINT_NAME

  // Set a display name for your corpus.
  // For example, "my test corpus"
  CORPUS_DISPLAY_NAME=YOUR_CORPUS_DISPLAY_NAME

  // CreateRagCorpus
  // Input: ENDPOINT, PROJECT_ID, ENDPOINT_NAME, CORPUS_DISPLAY_NAME
  curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  https://${ENDPOINT}/v1beta1/projects/${PROJECT_ID}/locations/us-central1/ragCorpora \
  -d '{
        "display_name" : '\""${CORPUS_DISPLAY_NAME</var>}"\"',
        "rag_embedding_model_config" : {
                "vertex_prediction_endpoint": {
                      "endpoint": '\""${ENDPOINT_NAME}"\"'
                }
        }
    }'

SDK Vertex AI pour Python

  import vertexai
  from vertexai.preview import rag

  # Set Project
  PROJECT_ID = "YOUR_PROJECT_ID"
  vertexai.init(project=PROJECT_ID, location="us-central1")

  # Your Vertex Endpoint resource with the deployed E5 model
  ENDPOINT_ID = "YOUR_MODEL_ENDPOINT_ID"
  MODEL_ENDPOINT = "projects/{PROJECT_ID}/locations/us-central1/endpoints/{ENDPOINT_ID}"

  embedding_model_config = rag.EmbeddingModelConfig(
      endpoint=MODEL_ENDPOINT,
  )

  # Name your corpus
  DISPLAY_NAME = "YOUR_CORPUS_DISPLAY_NAME"

  rag_corpus = rag.create_corpus(
      display_name=DISPLAY_NAME, embedding_model_config=embedding_model_config
  )

Étape suivante