Utiliser Vertex AI Search comme backend de récupération à l'aide du moteur de RAG Vertex AI

Cette page présente l'intégration de Vertex AI Search au moteur de RAG Vertex AI.

Vertex AI Search fournit une solution pour récupérer et gérer les données dans vos applications RAG Vertex AI. En utilisant Vertex AI Search comme backend de récupération, vous pouvez améliorer les performances, la scalabilité et la facilité d'intégration.

  • Performances et évolutivité améliorées: Vertex AI Search est conçu pour gérer de grands volumes de données avec une latence exceptionnellement faible. Cela se traduit par des temps de réponse plus rapides et de meilleures performances pour vos applications de génération de texte automatique, en particulier lorsque vous travaillez avec des bases de connaissances complexes ou étendues.

  • Gestion simplifiée des données: importez vos données à partir de diverses sources, telles que des sites Web, des ensembles de données BigQuery et des buckets Cloud Storage, ce qui peut simplifier votre processus d'ingestion de données.

  • Intégration fluide: Vertex AI offre une intégration intégrée à Vertex AI Search, ce qui vous permet de sélectionner Vertex AI Search comme backend de corpus pour votre application RAG. Cela simplifie le processus d'intégration et permet de garantir une compatibilité optimale entre les composants.

  • Amélioration de la qualité des sorties LLM: en utilisant les fonctionnalités de récupération de Vertex AI Search, vous pouvez vous assurer que votre application RAG récupère les informations les plus pertinentes de votre corpus, ce qui génère des sorties LLM plus précises et informatives.

Vertex AI Search combine la récupération approfondie d'informations, le traitement du langage naturel et les dernières fonctionnalités de traitement des grands modèles de langage (LLM), ce qui permet de comprendre l'intention de l'utilisateur et de renvoyer les résultats les plus pertinents pour lui.

Avec Vertex AI Search, vous pouvez créer une application de recherche de qualité Google à l'aide de données que vous contrôlez.

Pour configurer une recherche Vertex AI, procédez comme suit:

  1. Créez un datastore de recherche.
  2. Créez une application de recherche.

Utiliser Vertex AI Search comme backend de récupération pour le moteur de RAG Vertex AI

Une fois Vertex AI Search configuré, procédez comme suit pour le définir comme backend de récupération de l'application RAG.

Définir Vertex AI Search comme backend de récupération pour créer un corpus RAG

Ces exemples de code vous expliquent comment configurer Vertex AI Search comme backend de récupération pour un corpus RAG.

REST

Pour créer un corpus RAG à l'aide de la ligne de commande, procédez comme suit:

  1. Créer un corpus de RAG

    Remplacez les variables suivantes utilisées dans l'exemple de code:

    • PROJECT_ID: ID de votre Google Cloud projet.
    • LOCATION: région dans laquelle traiter la requête.
    • DISPLAY_NAME: nom à afficher du corpus RAG que vous souhaitez créer.
    • ENGINE_NAME: nom complet de la ressource du moteur de recherche Vertex AI ou du data store Vertex AI Search.
    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/ragCorpora" \
    -d '{
      "display_name" : "DISPLAY_NAME",
      "vertex_ai_search_config" : {
        "serving_config": "ENGINE_NAME/servingConfigs/default_search"
      }
    }'
    
  2. Surveiller la progression

    Remplacez les variables suivantes utilisées dans l'exemple de code:

    • PROJECT_ID: ID de votre Google Cloud projet.
    • LOCATION: région dans laquelle traiter la requête.
    • OPERATION_ID: ID de l'opération de création du corpus RAG.
    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID"
    

Python

Avant d'essayer cet exemple, suivez les instructions de configuration pour Python décrites dans le guide de démarrage rapide de Vertex AI à l'aide des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Vertex AI Python.

Pour vous authentifier auprès de Vertex AI, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.


from vertexai.preview import rag
import vertexai

# TODO(developer): Update and un-comment below lines
# PROJECT_ID = "your-project-id"
# vertex_ai_search_engine_name = "projects/{PROJECT_ID}/locations/{LOCATION}/collections/default_collection/engines/{ENGINE_ID}"
# display_name = "test_corpus"
# description = "Corpus Description"

# Initialize Vertex AI API once per session
vertexai.init(project=PROJECT_ID, location="us-central1")

# Configure Search
vertex_ai_search_config = rag.VertexAiSearchConfig(
    serving_config=f"{vertex_ai_search_engine_name}/servingConfigs/default_search",
)

corpus = rag.create_corpus(
    display_name=display_name,
    description=description,
    vertex_ai_search_config=vertex_ai_search_config,
)
print(corpus)
# Example response:
# RagCorpus(name='projects/1234567890/locations/us-central1/ragCorpora/1234567890',
# display_name='test_corpus', description='Corpus Description'.
# ...

Récupérer des contextes à l'aide de l'API RAG

Une fois le corpus RAG créé, les contextes pertinents peuvent être récupérés à partir de Vertex AI Search via l'API RetrieveContexts.

REST

Cet exemple de code montre comment récupérer des contextes à l'aide de REST.

Remplacez les variables suivantes utilisées dans l'exemple de code:

  • PROJECT_ID: ID de votre Google Cloud projet.
  • LOCATION: région dans laquelle traiter la requête.
  • RAG_CORPUS_RESOURCE: nom de la ressource du corpus RAG.

    Format : projects/{project}/locations/{location}/ragCorpora/{rag_corpus}.

  • TEXT: texte de requête permettant d'obtenir des contextes pertinents.
curl -X POST \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION:retrieveContexts" \
  -d '{
    "vertex_rag_store": {
      "rag_resources": {
        "rag_corpus": "RAG_CORPUS_RESOURCE"
      }
    },
    "query": {
      "text": "TEXT"
    }
  }'

Python

Pour savoir comment installer ou mettre à jour le SDK Vertex AI pour Python, consultez la section Installer le SDK Vertex AI pour Python. Pour en savoir plus, consultez la documentation de référence de l'API Python.


from vertexai.preview import rag
import vertexai

# TODO(developer): Update and un-comment below lines
# PROJECT_ID = "your-project-id"
# corpus_name = "projects/[PROJECT_ID]/locations/us-central1/ragCorpora/[rag_corpus_id]"

# Initialize Vertex AI API once per session
vertexai.init(project=PROJECT_ID, location="us-central1")

response = rag.retrieval_query(
    rag_resources=[
        rag.RagResource(
            rag_corpus=corpus_name,
            # Optional: supply IDs from `rag.list_files()`.
            # rag_file_ids=["rag-file-1", "rag-file-2", ...],
        )
    ],
    text="Hello World!",
    similarity_top_k=10,  # Optional
    vector_distance_threshold=0.5,  # Optional
    # vector_search_alpha=0.5, # Optional - Only supported for Weaviate
)
print(response)
# Example response:
# contexts {
#   contexts {
#     source_uri: "gs://your-bucket-name/file.txt"
#     text: "....
#   ....

Générer du contenu à l'aide de l'API Vertex AI Gemini

REST

Pour générer du contenu à l'aide de modèles Gemini, appelez l'API GenerateContent Vertex AI. En spécifiant RAG_CORPUS_RESOURCE dans la requête, les données sont automatiquement récupérées à partir de Vertex AI Search.

Remplacez les variables suivantes utilisées dans l'exemple de code:

  • PROJECT_ID: ID de votre Google Cloud projet.
  • LOCATION: région dans laquelle traiter la requête.
  • MODEL_ID: modèle LLM pour la génération de contenu. Exemple : gemini-1.5-flash-002.
  • GENERATION_METHOD: méthode LLM pour la génération de contenu. Par exemple, generateContent, streamGenerateContent.
  • INPUT_PROMPT: texte envoyé au LLM pour la génération de contenu. Essayez d'utiliser une requête pertinente pour les documents dans Vertex AI Search.
  • RAG_CORPUS_RESOURCE: nom de la ressource du corpus RAG. Format : projects/{project}/locations/{location}/ragCorpora/{rag_corpus}.
  • SIMILARITY_TOP_K : (facultatif) nombre de contextes principaux à récupérer.

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:GENERATION_METHOD" \
    -d '{
      "contents": {
        "role": "user",
        "parts": {
          "text": "INPUT_PROMPT"
        }
      },
      "tools": {
        "retrieval": {
          "disable_attribution": false,
          "vertex_rag_store": {
            "rag_resources": {
                "rag_corpus": "RAG_CORPUS_RESOURCE"
              },
            "similarity_top_k": SIMILARITY_TOP_K
          }
        }
      }
    }'
    

Python

Pour savoir comment installer ou mettre à jour le SDK Vertex AI pour Python, consultez la section Installer le SDK Vertex AI pour Python. Pour en savoir plus, consultez la documentation de référence de l'API Python.


from vertexai.preview import rag
from vertexai.preview.generative_models import GenerativeModel, Tool
import vertexai

# TODO(developer): Update and un-comment below lines
# PROJECT_ID = "your-project-id"
# corpus_name = "projects/{PROJECT_ID}/locations/us-central1/ragCorpora/{rag_corpus_id}"

# Initialize Vertex AI API once per session
vertexai.init(project=PROJECT_ID, location="us-central1")

rag_retrieval_tool = Tool.from_retrieval(
    retrieval=rag.Retrieval(
        source=rag.VertexRagStore(
            rag_resources=[
                rag.RagResource(
                    rag_corpus=corpus_name,
                    # Optional: supply IDs from `rag.list_files()`.
                    # rag_file_ids=["rag-file-1", "rag-file-2", ...],
                )
            ],
            similarity_top_k=3,  # Optional
            vector_distance_threshold=0.5,  # Optional
        ),
    )
)

rag_model = GenerativeModel(
    model_name="gemini-1.5-flash-001", tools=[rag_retrieval_tool]
)
response = rag_model.generate_content("Why is the sky blue?")
print(response.text)
# Example response:
#   The sky appears blue due to a phenomenon called Rayleigh scattering.
#   Sunlight, which contains all colors of the rainbow, is scattered
#   by the tiny particles in the Earth's atmosphere....
#   ...

Étape suivante