Optimiser les requêtes

Ce document explique comment utiliser l'optimiseur de requêtes Vertex AI pour maximiser automatiquement les performances d'un ensemble de requêtes en améliorant les instructions système.

L'optimiseur de requêtes Vertex AI peut vous aider à améliorer rapidement vos requêtes à grande échelle, sans avoir à réécrire manuellement les instructions système ni les requêtes individuelles. Cela est particulièrement utile lorsque vous souhaitez réutiliser dans un modèle les instructions système et les requêtes que vous avez écrites pour un autre modèle.

L'optimiseur de requêtes Vertex AI permet d'améliorer les requêtes en évaluant la réponse du modèle à des exemples de requêtes par rapport à des métriques d'évaluation spécifiées. Pour utiliser l'optimiseur de requêtes Vertex AI, vous devez disposer des éléments suivants :

  • Un ensemble d'exemples de requêtes
  • Des instructions système utilisées par tous vos exemples de requêtes
  • Un modèle de requête faisant référence à vos exemples de requêtes

Modèles compatibles

L'optimiseur de requête est compatible avec tous les modèles Gemini.

Exemple d'optimisation des requêtes

Par exemple, pour optimiser les instructions système pour un ensemble de requêtes qui répondent à des questions sur la cuisine en faisant référence à des informations contextuelles, vous pouvez utiliser l'optimiseur de requêtes Vertex AI. Pour cela, vous devez préparer des entrées semblables à celles-ci :

Instructions système

You are a professional chef. Your goal is teaching how to cook healthy cooking recipes to your apprentice.

Given a question from your apprentice and some context, provide the correct answer to the question.
Use the context to return a single and correct answer with some explanation.

Modèle de requête

Question: {input_question}
Facts: {input_context}

Exemples de requêtes

input_question input_context
Quelles sont les techniques de cuisson de la viande rouge et du porc qui permettent de conserver toute leur saveur et tendreté tout en limitant au maximum l'apparition de composés nocifs ? Pour des raisons de sécurité, la viande rouge et le porc doivent être cuits à une température interne de 63 °C. Faire mariner la viande dans des ingrédients acides comme du jus de citron ou du vinaigre peut l'attendrir en décomposant les fibres musculaires dures. Les méthodes de cuisson à haute température, comme le gril et la saisie à la poêle, permettent de faire dorer et caraméliser les aliments. Toutefois, il est important d'éviter la carbonisation, qui peut produire des composés nocifs.
Quelles sont les méthodes créatives pour ajouter du goût et des nutriments aux shakes protéinés sans ajouter de sucre ni d'ingrédients artificiels ? Ajouter des légumes verts à feuilles comme des épinards ou du chou frisé est un excellent moyen d'augmenter la valeur nutritionnelle de votre shake sans en modifier radicalement le goût. Utiliser du lait d'amande ou de l'eau de coco sans sucre au lieu du lait ordinaire peut ajouter un léger goût sucré et constituer un apport en graisses saines ou en électrolytes, respectivement. Saviez-vous que mixer trop longtemps votre shake peut le faire chauffer ? Pour éviter cela, mixez par petites quantités et laissez le mixeur au repos si nécessaire.

Instructions système optimisées

As a highly skilled chef with a passion for healthy cooking, you love sharing your knowledge with
aspiring chefs. Today, a culinary intern approaches you with a question about healthy cooking. Given
the intern's question and some facts, provide a clear, concise, and informative answer that will help
the intern excel in their culinary journey.

Comment l'optimisation fonctionne-t-elle ?

L'optimiseur de requêtes Vertex AI utilise les paramètres suivants:

  • Mode d'optimisation: indique si l'optimiseur de requêtes Vertex AI optimise les instructions système, sélectionne des exemples de requêtes à y ajouter en tant que requêtes few-shot ou effectue les deux.
  • Métriques d'évaluation: métriques utilisées par l'optimiseur de requêtes Vertex AI pour optimiser les instructions système et/ou sélectionner des exemples de requêtes.
  • Modèle cible: modèle Google pour lequel l'optimiseur de requêtes Vertex AI optimise les instructions système et sélectionne des exemples de requêtes.

Lorsque vous exécutez l'optimiseur de requêtes Vertex AI, il optimise les instructions système en fonction de vos sélections en exécutant un job d'entraînement personnalisé. Il évalue de manière itérative vos exemples de requêtes et réécrit vos instructions système pour trouver la version qui génère le meilleur score d'évaluation pour le modèle cible.

À la fin du job, l'optimiseur de requêtes Vertex AI génère les instructions système optimisées avec leur score d'évaluation.

Métriques d'évaluation

L'optimiseur de requêtes Vertex AI utilise des métriques d'évaluation pour optimiser les instructions système et sélectionner des exemples de requêtes. Vous pouvez utiliser les métriques d'évaluation standards ou définir vos propres métriques d'évaluation personnalisées.

Vous pouvez utiliser plusieurs métriques à la fois. Toutefois, vous ne pouvez utiliser qu'une seule métrique personnalisée à la fois. Si vous utilisez des métriques standards et personnalisées ensemble, une seule d'entre elles peut être personnalisée. Les autres doivent être des métriques standards.

Pour savoir comment spécifier des métriques une par une ou en combinaison, consultez EVALUATION_METRIC_PARAMETERS dans l'onglet du SDK de la section Créer un modèle de requête et des instructions système.

Métriques d'évaluation personnalisées

Les métriques personnalisées sont utiles lorsque les métriques standards ne conviennent pas à votre application. Notez que l'optimiseur de requêtes Vertex AI n'accepte qu'une seule métrique personnalisée à la fois.

Pour savoir comment créer des métriques personnalisées, consultez la section Créer des métriques personnalisées.

Métriques d'évaluation standards

L'optimiseur de requêtes Vertex AI est compatible avec les métriques d'évaluation personnalisées et avec les métriques d'évaluation suivantes :

Type de métrique Cas d'utilisation Métrique Description
Basé sur le modèle Synthèse summarization_quality Décrit la capacité du modèle à répondre aux questions en fonction d'un corps de texte à référencer.
Système de questions-réponses question_answering_correctness* Décrit la capacité du modèle à répondre correctement à une question.
question_answering_quality Décrit la capacité du modèle à répondre aux questions en fonction d'un corps de texte à référencer.
Cohérence coherence Décrit la capacité du modèle à fournir une réponse cohérente et mesure la logique et le sens du texte généré.
Sécurité safety Décrit le niveau de sécurité du modèle, c'est-à-dire si la réponse contient du texte dangereux.
Niveau de langage fluency Décrit la maîtrise du langage du modèle.
Ancrage groundedness Décrit la capacité du modèle à fournir ou à référencer des informations incluses uniquement dans le texte d'entrée.
Basé sur le calcul Utilisation d'outil et appel de fonction tool_call_valid* Décrit la capacité du modèle à prédire un appel d'outil valide.
tool_name_match* Décrit la capacité du modèle à prédire un appel d'outil avec le nom d'outil correct. Seul le premier appel d'outil est inspecté.
tool_parameter_key_match* Décrit la capacité du modèle à prédire un appel d'outil avec les noms de paramètres corrects.
tool_parameter_kv_match* Décrit la capacité du modèle à prédire un appel d'outil avec les noms de paramètres et les clés-valeurs corrects.
Génération de textes d'ordre général bleu* Contient le résultat d'un algorithme permettant d'évaluer la qualité de la prédiction, qui a été traduite d'un langage naturel à un autre. La qualité de la prédiction est considérée comme la correspondance entre un paramètre de prédiction et son paramètre de référence.
exact_match* Calcule si un paramètre de prédiction correspond exactement à un paramètre de référence.
rouge_1* Permet de comparer le paramètre de prédiction fourni à un paramètre de référence.
rouge_2*
rouge_l*
rouge_l_sum*

* Si vous souhaitez optimiser vos requêtes à l'aide de question_answering_correctness ou d'évaluations basées sur le calcul, vous devez effectuer l'une des opérations suivantes :

  • Ajoutez une variable représentant la réponse de vérité terrain pour vos requêtes à votre modèle de requête.
  • Si vous ne disposez pas de réponses de vérité terrain pour vos requêtes, mais que vous avez déjà utilisé vos requêtes avec un modèle Google et que vous avez obtenu les résultats attendus, vous pouvez ajouter le paramètre source_model à votre configuration au lieu d'ajouter des réponses de vérité terrain. Lorsque le paramètre source_model est défini, Vertex AI exécute vos exemples de requêtes sur le modèle source pour générer les réponses de vérité terrain.

Avant de commencer

Pour vous assurer que le compte de service Compute Engine par défaut dispose des autorisations nécessaires pour optimiser les requêtes, demandez à votre administrateur d'attribuer au compte de service Compute Engine par défaut les rôles IAM suivants dans le projet :

Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.

Votre administrateur peut également attribuer au compte de service Compute Engine par défaut les autorisations requises via des rôles personnalisés ou d'autres rôles prédéfinis.

Optimiser des requêtes

Vous pouvez optimiser des requêtes en exécutant le notebook de l'optimiseur de requêtes Vertex AI ou en utilisant l'API Vertex AI. Choisissez la méthode que vous souhaitez utiliser pour exécuter l'optimiseur de requêtes Vertex AI, puis suivez les étapes décrites en détail dans les sections suivantes :

  1. Créer un modèle de requête et des instructions système
  2. Préparer des exemples de requêtes
  3. Facultatif: créer des métriques personnalisées
  4. Créer une configuration
  5. Exécuter le job d'optimisation de la requête
  6. Analyser les résultats et itérer

Créer un modèle de requête et des instructions système

Les modèles de requêtes définissent le format de toutes vos requêtes à l'aide de variables remplaçables. Lorsque vous utilisez un modèle de requête pour optimiser les requêtes, les variables sont remplacées par les données de l'ensemble de données de requête.

Les variables de modèle de requête doivent respecter les conditions suivantes :

  • Les variables doivent être placées entre accolades.
  • Les noms de variables ne doivent pas contenir d'espaces.
  • Les variables qui représentent des entrées multimodales doivent inclure la chaîne MIME_TYPE après la variable :

    @@@MIME_TYPE
    

    Remplacez MIME_TYPE par un type MIME image, vidéo, audio ou document compatible avec le modèle cible.

Créez un modèle de requête et des instructions système à l'aide de l'une des méthodes suivantes :

Notebook

Si vous souhaitez exécuter l'optimiseur de requêtes Vertex AI via le notebook, créez des instructions système et un modèle de requête en procédant comme suit :

  1. Dans Colab Enterprise, ouvrez le notebook de l'optimiseur de requêtes Vertex AI.

    Accéder au notebook de l'optimiseur de requêtes Vertex AI

  2. Dans la section Créer un modèle de requête et des instructions système, procédez comme suit :

    1. Dans le champ SYSTEM_INSTRUCTION, saisissez vos instructions système. Exemple :

      Based on the following images and articles respond to the questions.'\n' Be concise,
      and answer \"I don't know\" if the response cannot be found in the provided articles or images.
      
    2. Dans le champ PROMPT_TEMPLATE, saisissez votre modèle de requête. Exemple :

      Article 1:\n\n{article_1}\n\nImage 1:\n\n{image_1} @@@image/jpeg\n\nQuestion: {question}
      
    3. Si vous souhaitez optimiser vos requêtes à l'aide de question_answering_correctness ou d'évaluations basées sur le calcul, vous devez effectuer l'une des opérations suivantes :

    • Ajoutez la variable {target} au modèle de requête pour représenter la réponse de vérité terrain de la requête. Exemple :

      Article 1:\n\n{article_1}\n\nImage 1:\n\n{image_1} @@@image/jpeg\n\nQuestion: {question}\n\n Answer: {target}
      
    • Si vous ne disposez pas de réponses de vérité terrain pour vos requêtes, mais que vous avez déjà utilisé vos requêtes avec un modèle Google et que vous avez obtenu les résultats attendus, vous pouvez ajouter le paramètre source_model à votre configuration au lieu d'ajouter des réponses de vérité terrain. Lorsque le paramètre source_model est défini, l'optimiseur de requêtes Vertex AI exécute vos exemples de requêtes sur le modèle source pour générer les réponses de vérité terrain.

SDK

Si vous souhaitez exécuter l'optimiseur de requêtes Vertex AI via le SDK sans utiliser le notebook, créez des fichiers texte pour votre modèle de requête et vos instructions système en procédant comme suit :

  1. Créez un fichier texte pour vos instructions système.

  2. Dans le fichier texte, définissez vos instructions système. Exemple :

    Based on the following images and articles respond to the questions.'\n' Be concise, and answer \"I don't know\" if the response cannot be found in the provided articles or images.
    
  3. Créez un fichier texte pour votre modèle de requête.

  4. Dans le fichier texte, définissez un modèle de requête qui inclut une ou plusieurs variables. Exemple :

    Article 1:\n\n{article_1}\n\nImage 1:\n\n{image_1} @@@image/jpeg\n\nQuestion: {question}
    
  5. Si vous souhaitez optimiser vos requêtes à l'aide de question_answering_correctness ou d'évaluations basées sur le calcul, vous devez effectuer l'une des opérations suivantes :

    • Ajoutez la variable {target} au modèle de requête pour représenter la réponse de vérité terrain de la requête. Exemple :

      Article 1:\n\n{article_1}\n\nImage 1:\n\n{image_1} @@@image/jpeg\n\nQuestion: {question}\n\n Answer: {target}
      
    • Si vous ne disposez pas de réponses de vérité terrain pour vos requêtes, mais que vous avez déjà utilisé vos requêtes avec un modèle Google et que vous avez obtenu les résultats attendus, vous pouvez ajouter le paramètre source_model à votre configuration au lieu d'ajouter des réponses de vérité terrain. Lorsque le paramètre source_model est défini, l'optimiseur de requêtes Vertex AI exécute vos exemples de requêtes sur le modèle source pour générer les réponses de vérité terrain.

Préparer des exemples de requêtes

Pour obtenir de meilleurs résultats avec l'optimiseur de requêtes Vertex AI, utilisez entre 50 et 100 exemples de requêtes.

  • L'outil peut cependant être efficace avec seulement cinq exemples.
  • Les meilleurs exemples incluent des cas où le modèle cible présente de mauvaises performances.

Les exemples de requêtes contiennent les données qui remplacent les variables dans le modèle de requête. Vous pouvez utiliser un fichier JSONL ou CSV pour stocker vos exemples de requêtes.

Fichier JSONL

  1. Créez un fichier JSONL.
  2. Ajoutez-y les données de requête qui remplacent chaque variable. Exemple :

    {"article_1": "The marine life …", "image_1": "gs://path_to_image", "Question": "What are some most effective ways to reduce ocean pollution?", "target": "The articles and images don't answer this question."}
    
    {"article_1": "During the year …", "image_1": "gs://path_to_image", "Question": "Who was the president in 2023?", "target": "Joe Biden"}
    
  3. Importez le fichier JSONL dans un bucket Cloud Storage.

Fichier CSV

  1. Créez un fichier CSV.
  2. Sur la première ligne, ajoutez les variables de votre modèle de requête.
  3. Sur les lignes suivantes, ajoutez les exemples de données qui remplacent chaque variable.
  4. Importez le fichier CSV dans un bucket Cloud Storage.

Facultatif: Créer des métriques personnalisées

Pour créer une métrique personnalisée, procédez comme suit :

  1. Créez un fichier texte nommé requirements.txt.

  2. Dans le fichier requirements.txt, définissez les bibliothèques requises pour la fonction de métrique d'évaluation personnalisée. Toutes les fonctions nécessitent le package functions-framework.

    Par exemple, le fichier requirements.txt d'une métrique personnalisée qui calcule ROUGE-L se présente comme suit :

    functions-framework==3.*
    rouge-score
    
  3. Créez un fichier Python nommé main.py.

  4. Dans le fichier main.py, écrivez votre fonction d'évaluation personnalisée. La fonction doit accepter les éléments suivants :

    • Requêtes HTTP POST
    • Entrée JSON contenant response, qui est la sortie du LLM, et target, qui est la réponse de vérité terrain pour la requête

    Par exemple, le fichier main.py d'une métrique personnalisée qui calcule ROUGE-L se présente comme suit :

    from typing import Any
    import json
    import functions_framework
    from rouge_score import rouge_scorer
    
    # Register an HTTP function with the Functions Framework
    @functions_framework.http
    def main(request):
       request_json = request.get_json(silent=True)
       if not request_json:
           raise ValueError('Can not find request json.')
    
       """Extract 'response' and 'target' from the request payload. 'response'
       represents the model's response, while 'target' represents the ground
       truth response."""
       response = request_json['response']
       reference = request_json['target']
    
       # Compute ROUGE-L F-measure
       scorer = rouge_scorer.RougeScorer(['rougeL'], use_stemmer=True)
       scores = scorer.score(reference, response)
       final_score = scores['rougeL'].fmeasure
    
       # Return the custom score in the response
       return json.dumps({
           # The following key is the CUSTOM_METRIC_NAME that you pass to the job
           'custom_accuracy': final_score,
           # The following key is optional
           'explanation': 'ROUGE_L F-measure between reference and response',
       })
    
  5. Déployez votre fonction d'évaluation personnalisée en tant que fonction Cloud Run en exécutant la commande gcloud functions deploy :

    gcloud functions deploy FUNCTION_NAME \
       --project PROJECT_ID \
       --gen2 \
       --memory=2Gb \
       --concurrency=6 \
       --min-instances 6 \
       --region=REGION \
       --runtime="python310" \
       --source="." \
       --entry-point main \
       --trigger-http \
       --timeout=3600 \
       --quiet
    

    Remplacez les éléments suivants :

    • FUNCTION_NAME : nom de la métrique d'évaluation personnalisée.
    • PROJECT_ID : ID de votre projet.
    • REGION : région dans laquelle vous souhaitez déployer la fonction.

Créer une configuration

La configuration de l'optimiseur de requêtes Vertex AI spécifie les paramètres que vous souhaitez définir pour votre tâche d'optimisation de requêtes.

Créez une configuration à l'aide de l'une des options suivantes :

Notebook

Si vous souhaitez exécuter l'optimiseur de requêtes Vertex AI via le notebook, procédez comme suit pour créer une configuration :

  1. Dans Colab Enterprise, ouvrez le notebook de l'optimiseur de requêtes Vertex AI.

    Accéder au notebook de l'optimiseur de requêtes Vertex AI

  2. Dans la section Configurer les paramètres du projet, procédez comme suit :

    1. Dans le champ PROJECT_ID, saisissez l'ID de votre projet.
    2. Dans le champ LOCATION, saisissez l'emplacement où vous souhaitez exécuter l'optimiseur de requêtes Vertex AI.
    3. Dans le champ OUTPUT_PATH, saisissez l'URI du bucket Cloud Storage dans lequel vous souhaitez que l'optimiseur de requêtes Vertex AI écrive les instructions système optimisées et/ou les exemples de requêtes few-shot. Exemple : gs://bucket-name/output-path.
    4. Dans le champ INPUT_PATH, saisissez l'URI des exemples de requête dans votre bucket Cloud Storage. Exemple : gs://bucket-name/sample-prompts.jsonl.
  3. Dans la section Configurer les paramètres d'optimisation, procédez comme suit :

    1. Dans le champ TARGET_MODEL, indiquez le modèle pour lequel vous souhaitez optimiser les requêtes.
    2. Dans le champ OPTIMIZATION_MODE, indiquez le mode d'optimisation que vous souhaitez utiliser. Vous pouvez le définir sur instruction, demonstration ou instruction_and_demo.
    3. Dans le champ EVAL_METRIC, saisissez une métrique d'évaluation pour laquelle vous souhaitez optimiser vos requêtes.
    4. Facultatif : Dans le champ SOURCE_MODEL, indiquez le modèle Google avec lequel les instructions système et les requêtes ont déjà été utilisées. Lorsque le paramètre source_model est défini, l'optimiseur de requêtes Vertex AI exécute vos exemples de requêtes sur le modèle source pour générer les réponses de vérité terrain à votre place pour les métriques d'évaluation qui en nécessitent. Si vous n'avez pas déjà exécuté vos requêtes avec un modèle Google ou si vous n'avez pas obtenu les résultats attendus, ajoutez plutôt des réponses de vérité terrain à votre requête. Pour en savoir plus, consultez la section Créer une requête et des instructions système de ce document.
  4. Facultatif : Dans la section Configurer les paramètres d'optimisation avancés, vous pouvez également ajouter des paramètres facultatifs à votre configuration.

  5. Afficher les paramètres facultatifs
    • Dans le champ NUM_INST_OPTIMIZATION_STEPS, saisissez le nombre d'itérations utilisées par l'optimiseur de requêtes Vertex AI en mode d'optimisation des instructions. La durée d'exécution augmente de manière linéaire à mesure que vous augmentez cette valeur, qui doit être un entier compris entre 10 et 20. Si elle n'est pas définie, la valeur par défaut est 10.
    • Dans le champ NUM_TEMPLATES_PER_STEP, saisissez le nombre d'instructions système générées et évaluées par l'optimiseur de requêtes Vertex AI. La valeur est utilisée avec le mode d'optimisation instruction et instruction_and_demo. Vous devez saisir un entier compris entre 1 et 4. Si cette valeur n'est pas définie, la valeur par défaut est 2.
    • Dans le champ NUM_DEMO_OPTIMIZATION_STEPS, saisissez le nombre de démonstrations évaluées par l'optimiseur de requêtes Vertex AI. La valeur est utilisée avec le mode d'optimisation demonstration et instruction_and_demo. Vous devez saisir un entier compris entre 10 et 30. Si cette valeur n'est pas définie, la valeur par défaut est 10.
    • Dans le champ NUM_DEMO_PER_PROMPT, saisissez le nombre de démonstrations générées par requête. Vous devez saisir un entier compris entre 3 et 6. Si cette valeur n'est pas définie, la valeur par défaut est 3.
    • Dans le champ TARGET_MODEL_QPS, saisissez le nombre de requêtes par seconde (RPS) que l'optimiseur de requêtes Vertex AI envoie au modèle cible. La durée d'exécution diminue de manière linéaire à mesure que vous augmentez cette valeur, qui doit être un nombre à virgule flottante supérieur ou égal à 3.0, mais inférieur au quota de RPS dont vous disposez sur le modèle cible. Si cette valeur n'est pas définie, la valeur par défaut est 3.0.
    • Dans le champ SOURCE_MODEL_QPS, saisissez le nombre de requêtes par seconde (RPS) que l'optimiseur de requêtes Vertex AI envoie au modèle source. Vous devez saisir un nombre à virgule flottante supérieur ou égal à 3.0, mais inférieur au quota de RPS dont vous disposez sur le modèle source. Si cette valeur n'est pas définie, la valeur par défaut est 3.0.
    • Dans le champ EVAL_QPS, saisissez le nombre de requêtes par seconde (RPS) que l'optimiseur de requêtes Vertex AI envoie au modèle d'évaluation gemini-1.5-pro.
      • Pour les métriques basées sur un modèle, cette valeur doit être un nombre à virgule flottante supérieur ou égal à 3.0, mais inférieur au quota dont vous disposez pour gemini-1.5-pro. Si cette valeur n'est pas définie, la valeur par défaut est 3.0.
      • Pour les métriques personnalisées, elle doit être un nombre à virgule flottante supérieur ou égal à 3.0. Cela détermine la fréquence à laquelle l'optimiseur de requêtes Vertex AI appelle vos fonctions Cloud Run de métriques personnalisées.
    • Si vous souhaitez utiliser plusieurs métriques d'évaluation, procédez comme suit :
      1. Dans le champ EVAL_METRIC_1, saisissez une métrique d'évaluation que vous souhaitez utiliser.
      2. Dans le champ EVAL_METRIC_1_WEIGHT, saisissez la pondération que vous souhaitez que l'optimiseur de requêtes Vertex AI utilise lorsqu'il exécute l'optimisation.
      3. Dans le champ EVAL_METRIC_2, saisissez une métrique d'évaluation que vous souhaitez utiliser.
      4. Dans le champ EVAL_METRIC_2_WEIGHT, saisissez la pondération que vous souhaitez que l'optimiseur de requêtes Vertex AI utilise lorsqu'il exécute l'optimisation.
      5. Dans le champ EVAL_METRIC_3, saisissez éventuellement une métrique d'évaluation que vous souhaitez utiliser.
      6. Dans le champ EVAL_METRIC_3_WEIGHT, saisissez éventuellement la pondération que vous souhaitez que l'optimiseur de requêtes Vertex AI utilise lorsqu'il exécute l'optimisation.
      7. Dans le champ METRIC_AGGREGATION_TYPE, saisissez la pondération que vous souhaitez que l'optimiseur de requêtes Vertex AI utilise lorsqu'il exécute l'optimisation.
    • Dans le champ PLACEHOLDER_TO_VALUE, saisissez les informations qui remplacent les variables dans les instructions système. Les informations incluses dans cette option ne sont pas optimisées par l'optimiseur de requêtes Vertex AI.
    • Dans le champ RESPONSE_MIME_TYPE, saisissez le type de réponse MIME utilisé par le modèle cible. Il doit être défini sur text/plain ou application/json. Si cette valeur n'est pas définie, la valeur par défaut est text/plain.
    • Dans le champ TARGET_LANGUAGE, saisissez la langue des instructions système. Si cette valeur n'est pas définie, la valeur par défaut est l'anglais.

SDK

Si vous souhaitez exécuter l'optimiseur de requêtes Vertex AI via le SDK, créez un fichier JSON avec les paramètres que vous souhaitez utiliser pour optimiser les requêtes en procédant comme suit :

  1. Créez un fichier JSON avec les paramètres que vous souhaitez utiliser pour optimiser vos requêtes. Chaque fichier de configuration nécessite les paramètres suivants :

    {
     "project": "PROJECT_ID",
     "system_instruction_path": "SYSTEM_INSTRUCTION_PATH",
     "prompt_template_path": "PROMPT_TEMPLATE_PATH",
     "target_model": "TARGET_MODEL",
     EVALUATION_METRIC_PARAMETERS,
     "optimization_mode": "OPTIMIZATION_MODE",
     "input_data_path": "SAMPLE_PROMPT_URI",
     "output_path": "OUTPUT_URI"
    }
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID de votre projet.
    • SYSTEM_INSTRUCTION_PATH : URI des instructions système dans votre bucket Cloud Storage. Exemple : gs://bucket-name/system-instruction.txt.
    • PROMPT_TEMPLATE : URI du modèle de requête dans votre bucket Cloud Storage. Exemple : gs://bucket-name/prompt-template.txt.
    • TARGET_MODEL: modèle pour lequel vous souhaitez optimiser les requêtes.
    • EVALUATION_METRIC_PARAMETERS: les paramètres que vous spécifiez dépendent du nombre de métriques d'évaluation que vous utilisez et de leur nature (standard ou personnalisée) :

      Métrique standard unique

      Si vous employez une seule métrique d'évaluation standard, utilisez le paramètre suivant:

       "eval_metric": "EVALUATION_METRIC",
       

      Remplacez EVALUATION_METRIC par la métrique pour laquelle vous souhaitez optimiser vos requêtes.

      Métrique personnalisée unique

      Si vous employez une seule métrique d'évaluation personnalisée, utilisez les paramètres suivants :

      "eval_metric": "custom_metric",
      "custom_metric_name": "CUSTOM_METRIC_NAME",
      "custom_metric_cloud_function_name": "FUNCTION_NAME",
      

      Remplacez les éléments suivants :

      • CUSTOM_METRIC_NAME : nom de la métrique, tel que défini par la clé correspondant à final_score. Exemple : custom_accuracy.
      • FUNCTION_NAME : nom de la fonction Cloud Run que vous avez précédemment déployée.

      Plusieurs métriques standards

      Si vous utilisez plusieurs métriques d'évaluation standards, utilisez les paramètres suivants:

      "eval_metrics_types": [EVALUATION_METRIC_LIST],
      "eval_metrics_weights": [EVAL_METRICS_WEIGHTS],
      "aggregation_type": "METRIC_AGGREGATION_TYPE",
      

      Remplacez les éléments suivants :

      • EVALUATION_METRIC_LIST : liste de métriques d'évaluation. Doit être un tableau. Exemple : "bleu", "summarization_quality".
      • EVAL_METRICS_WEIGHTS : pondération de chaque métrique. Doit être un tableau.
      • METRIC_AGGREGATION_TYPE : type d'agrégation utilisé pour les métriques d'évaluation. Doit être défini sur weighted_sum ou weighted_average. Si cette valeur n'est pas définie, la valeur par défaut est weighted_sum.

      Plusieurs métriques standards et personnalisées

      Si vous utilisez plusieurs métriques d'évaluation personnalisées et standards, utilisez les paramètres suivants:

      "eval_metrics_types": ["custom_metric", EVALUATION_METRIC_LIST],
      "eval_metrics_weights": [EVAL_METRICS_WEIGHTS],
      "aggregation_type": "METRIC_AGGREGATION_TYPE",
      "custom_metric_name": "CUSTOM_METRIC_NAME",
      "custom_metric_cloud_function_name": "FUNCTION_NAME",
      

      Remplacez les éléments suivants :

      • EVALUATION_METRIC_LIST : liste des métriques d'évaluation standards. Doit être un tableau. Exemple : "bleu", "summarization_quality".
      • EVAL_METRICS_WEIGHTS : pondération de chaque métrique. Doit être un tableau.
      • METRIC_AGGREGATION_TYPE : type d'agrégation utilisé pour les métriques d'évaluation. Doit être défini sur weighted_sum ou weighted_average. Si cette valeur n'est pas définie, la valeur par défaut est weighted_sum.
      • CUSTOM_METRIC_NAME : nom de la métrique, tel que défini par la clé correspondant à final_score. Exemple : custom_accuracy.
      • FUNCTION_NAME : nom de la fonction Cloud Run que vous avez précédemment déployée.
    • OPTIMIZATION_MODE : mode d'optimisation. Doit être défini sur instruction, demonstration ou instruction_and_demo.

    • SAMPLE_PROMPT_URI : URI des exemples de requêtes dans votre bucket Cloud Storage. Exemple : gs://bucket-name/sample-prompts.jsonl.

    • OUTPUT_URI : URI du bucket Cloud Storage dans lequel vous souhaitez que l'optimiseur de requêtes Vertex AI écrive les instructions système optimisées et/ou les exemples de requêtes few-shot. Exemple : gs://bucket-name/output-path.

  2. Vous pouvez également ajouter des paramètres facultatifs à votre fichier de configuration.

    Ils sont répartis en cinq catégories :

    • Paramètres du processus d'optimisation. Ces paramètres contrôlent le processus d'optimisation global, y compris sa durée et le nombre d'itérations d'optimisation qu'il exécute, ce qui a un impact direct sur la qualité des optimisations.
    • Paramètres de sélection et d'emplacement du modèle. Ces paramètres spécifient les modèles utilisés par l'optimiseur de requêtes Vertex AI et les emplacements où il les utilise.
    • Paramètres de latence (RPS). Ces paramètres contrôlent les RPS, ce qui a un impact sur la vitesse du processus d'optimisation.
    • Autre. Autres paramètres qui contrôlent la structure et le contenu des requêtes.

      Afficher les paramètres facultatifs
      "num_steps": NUM_INST_OPTIMIZATION_STEPS,
      "num_template_eval_per_step": NUM_TEMPLATES_PER_STEP,
      "num_demo_set_candidates": "NUM_DEMO_OPTIMIZATION_STEPS,
      "demo_set_size": NUM_DEMO_PER_PROMPT,
      "target_model_location": "TARGET_MODEL_LOCATION",
      "source_model": "SOURCE_MODEL",
      "source_model_location": "SOURCE_MODEL_LOCATION",
      "target_model_qps": TARGET_MODEL_QPS,
      "eval_qps": EVAL_QPS,
      "source_model_qps": SOURCE_MODEL_QPS,
      "response_mime_type": "RESPONSE_MIME_TYPE",
      "language": "TARGET_LANGUAGE",
      "placeholder_to_content": "PLACEHOLDER_TO_CONTENT",
      "data_limit": DATA_LIMIT
      

      Remplacez les éléments suivants :

      • Paramètres du processus d'optimisation :

        • NUM_INST_OPTIMIZATION_STEPS : nombre d'itérations utilisées par l'optimiseur de requêtes Vertex AI en mode d'optimisation des instructions. La durée d'exécution augmente de manière linéaire à mesure que vous augmentez cette valeur, qui doit être un entier compris entre 10 et 20. Si cette valeur n'est pas définie, la valeur par défaut est 10.
        • NUM_TEMPLATES_PER_STEP : nombre d'instructions système générées et évaluées par l'optimiseur de requêtes Vertex AI. La valeur est utilisée avec le mode d'optimisation instruction et instruction_and_demo. Vous devez saisir un entier compris entre 1 et 4. Si cette valeur n'est pas définie, la valeur par défaut est 2.
        • NUM_DEMO_OPTIMIZATION_STEPS : nombre de démonstrations évaluées par l'optimiseur de requêtes Vertex AI. La valeur est utilisée avec le mode d'optimisation demonstration et instruction_and_demo. Vous devez saisir un entier compris entre 10 et 30. Si cette valeur n'est pas définie, la valeur par défaut est 10.
        • NUM_DEMO_PER_PROMPT : nombre de démonstrations générées par requête. Vous devez saisir un entier compris entre 3 et 6. Si cette valeur n'est pas définie, la valeur par défaut est 3.
      • Paramètres de sélection et d'emplacement du modèle :

        • TARGET_MODEL_LOCATION : emplacement dans lequel vous souhaitez exécuter le modèle cible. Si cette valeur n'est pas définie, la valeur par défaut est us-central1.
        • SOURCE_MODEL : modèle Google avec lequel les instructions système et les requêtes étaient précédemment utilisées. Lorsque le paramètre source_model est défini, Vertex AI exécute vos exemples de requêtes sur le modèle source pour générer les réponses de vérité terrain à votre place pour les métriques d'évaluation qui en nécessitent. Si vous n'avez pas déjà exécuté vos requêtes avec un modèle Google ou si vous n'avez pas obtenu les résultats attendus, ajoutez plutôt des réponses de vérité terrain à votre requête. Pour en savoir plus, consultez la section Créer une requête et des instructions système de ce document.
        • SOURCE_MODEL_LOCATION : emplacement dans lequel vous souhaitez exécuter le modèle source. Si cette valeur n'est pas définie, la valeur par défaut est us-central1.
      • Paramètres de latence (RPS) :

        • TARGET_MODEL_QPS : nombre de requêtes par seconde (RPS) que l'optimiseur de requêtes Vertex AI envoie au modèle cible. La durée d'exécution diminue de manière linéaire à mesure que vous augmentez cette valeur, qui doit être un nombre à virgule flottante supérieur ou égal à 3.0, mais inférieur au quota de RPS dont vous disposez sur le modèle cible. Si cette valeur n'est pas définie, la valeur par défaut est 3.0.
        • EVAL_QPS : nombre de requêtes par seconde (RPS) que l'optimiseur de requêtes Vertex AI envoie au modèle d'évaluation gemini-1.5-pro.
          • Pour les métriques basées sur un modèle, cette valeur doit être un nombre à virgule flottante supérieur ou égal à 3.0, mais inférieur au quota dont vous disposez pour gemini-1.5-pro. Si cette valeur n'est pas définie, la valeur par défaut est 3.0.
          • Pour les métriques personnalisées, elle doit être un nombre à virgule flottante supérieur ou égal à 3.0. Cela détermine la fréquence à laquelle l'optimiseur de requêtes Vertex AI appelle vos fonctions Cloud Run de métriques personnalisées.
        • SOURCE_MODEL_QPS : nombre de requêtes par seconde (RPS) que l'optimiseur de requêtes Vertex AI envoie au modèle source. Vous devez saisir un nombre à virgule flottante supérieur ou égal à 3.0, mais inférieur au quota de RPS dont vous disposez sur le modèle source. Si cette valeur n'est pas définie, la valeur par défaut est 3.0.
      • Autres paramètres :

        • RESPONSE_MIME_TYPE : type de réponse MIME utilisé par le modèle cible. Il doit être défini sur text/plain ou application/json. Si cette valeur n'est pas définie, la valeur par défaut est text/plain.
        • TARGET_LANGUAGE : langue des instructions système. Si cette valeur n'est pas définie, la valeur par défaut est l'anglais.
        • PLACEHOLDER_TO_CONTENT : informations qui remplacent les variables dans les instructions système. Les informations incluses dans cette option ne sont pas optimisées par l'optimiseur de requêtes Vertex AI.
        • DATA_LIMIT : quantité de données utilisées pour la validation. La durée d'exécution augmente de manière linéaire à mesure que vous augmentez cette valeur, qui doit être un entier compris entre 5 et 100. Si cette valeur n'est pas définie, la valeur par défaut est 100.
  3. Importez le fichier JSON dans un bucket Cloud Storage.

Exécuter l'optimiseur de requêtes

Exécutez l'optimiseur de requêtes Vertex AI à l'aide de l'une des options suivantes :

Notebook

Exécutez l'optimiseur de requêtes Vertex AI via le notebook en procédant comme suit :

  1. Dans Colab Enterprise, ouvrez le notebook de l'optimiseur de requêtes Vertex AI.

    Accéder au notebook de l'optimiseur de requêtes Vertex AI

  2. Dans la section Exécuter l'optimiseur de requêtes, cliquez sur play_circle Exécuter la cellule.

    L'optimiseur de requêtes Vertex AI s'exécute.

REST

Avant d'utiliser les données de requête, effectuez les remplacements suivants :

  • LOCATION : emplacement où vous souhaitez exécuter l'optimiseur de requêtes Vertex AI.
  • PROJECT_ID : ID de votre projet.
  • JOB_NAME : nom du job de l'optimiseur de requêtes Vertex AI.
  • PATH_TO_CONFIG : URI du fichier de configuration dans votre bucket Cloud Storage. Exemple : gs://bucket-name/configuration.json.

Méthode HTTP et URL :

POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/customJobs

Corps JSON de la requête :

{
  "displayName": "JOB_NAME",
  "jobSpec": {
    "workerPoolSpecs": [
      {
        "machineSpec": {
          "machineType": "n1-standard-4"
        },
        "replicaCount": 1,
        "containerSpec": {
          "imageUri": "us-docker.pkg.dev/vertex-ai-restricted/builtin-algorithm/apd:preview_v1_0",
          "args": ["--config=PATH_TO_CONFIG""]
        }
      }
    ]
  }
}

Pour envoyer votre requête, choisissez l'une des options suivantes :

curl

Enregistrez le corps de la requête dans un fichier nommé request.json, puis exécutez la commande suivante :

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/customJobs"

PowerShell

Enregistrez le corps de la requête dans un fichier nommé request.json, puis exécutez la commande suivante :

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/customJobs" | Select-Object -Expand Content

La réponse ressemble à ce qui suit :

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 google.cloud import aiplatform

# Initialize Vertex AI platform
aiplatform.init(project=PROJECT_ID, location="us-central1")

# TODO(Developer): Check and update lines below
# cloud_bucket = "gs://cloud-samples-data"
# config_path = f"{cloud_bucket}/instructions/sample_configuration.json"
# output_path = "custom_job/output/"

custom_job = aiplatform.CustomJob(
    display_name="Prompt Optimizer example",
    worker_pool_specs=[
        {
            "replica_count": 1,
            "container_spec": {
                "image_uri": "us-docker.pkg.dev/vertex-ai-restricted/builtin-algorithm/apd:preview_v1_0",
                "args": [f"--config={cloud_bucket}/{config_path}"],
            },
            "machine_spec": {
                "machine_type": "n1-standard-4",
            },
        }
    ],
    staging_bucket=cloud_bucket,
    base_output_dir=f"{cloud_bucket}/{output_path}",
)

custom_job.submit()
print(f"Job resource name: {custom_job.resource_name}")
# Example response:
#    'projects/123412341234/locations/us-central1/customJobs/12341234123412341234'

Analyser les résultats et itérer

Après avoir exécuté l'optimiseur de requêtes Vertex AI, examinez les résultats du job à l'aide de l'une des options suivantes :

Notebook

Si vous souhaitez afficher les résultats de l'optimiseur de requêtes Vertex AI via le notebook, procédez comme suit :

  1. Ouvrez le notebook de l'optimiseur de requêtes Vertex AI.

  2. Dans la section Inspecter les résultats, procédez comme suit :

    1. Dans le champ RESULT_PATH, ajoutez l'URI du bucket Cloud Storage dans lequel l'optimiseur de requêtes Vertex AI a écrit les résultats. Exemple : gs://bucket-name/output-path.

    2. Cliquez sur play_circle Exécuter la cellule.

Console

  1. Dans la section Vertex AI de la console Google Cloud , accédez à la page Pipelines d'entraînement.

    Accéder à la page "Pipelines d'entraînement"

  2. Cliquez sur l'onglet Jobs personnalisés. Le job d'entraînement personnalisé de l'optimiseur de requêtes Vertex AI apparaît dans la liste, avec son état.

Une fois le job terminé, examinez les optimisations en procédant comme suit :

  1. Dans la console Google Cloud , accédez à la page Buckets de Cloud Storage.

    Accéder à la page "Buckets"

  2. Cliquez sur le nom de votre bucket Cloud Storage.

  3. Accédez au dossier portant le même nom que le mode d'optimisation que vous avez utilisé pour évaluer les requêtes (instruction ou demonstration). Si vous avez utilisé le mode instruction_and_demo, deux dossiers s'affichent. Le dossier instruction contient les résultats de l'optimisation des instructions système, tandis que le dossier demonstration contient ceux de l'optimisation demonstration et les instructions système optimisées.

    Le dossier contient les fichiers suivants :

    • config.json : configuration complète utilisée par l'optimiseur de requêtes Vertex AI.
    • templates.json : chaque ensemble d'instructions système et/ou d'exemples de requêtes few-shot générés par l'optimiseur de requêtes Vertex AI, ainsi que leur score d'évaluation.
    • eval_results.json : réponse du modèle cible pour chaque exemple de requête pour chaque ensemble d'instructions système générées et/ou d'exemples de requêtes few-shot, et leur score d'évaluation.
    • optimized_results.json : instructions système et/ou exemples de requêtes les plus performants, et leur score d'évaluation.
  4. Pour afficher les instructions système optimisées, consultez le fichier optimized_results.json.

Étapes suivantes