Optimiseur de requêtes basé sur les données

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

L'optimiseur basé sur les données 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.

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 basé sur les données. 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 axé sur les données utilise les paramètres suivants :

  • Mode d'optimisation : indique si l'optimiseur basé sur les données optimise les instructions système, sélectionne des exemples de requêtes à ajouter aux instructions système en tant qu'exemples few-shot, ou effectue les deux.
  • Métriques d'évaluation : métriques utilisées par l'optimiseur basé sur les données 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 basé sur les données optimise les instructions système et sélectionne des exemples de requêtes.

Lorsque vous exécutez l'optimiseur basé sur les données, 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 produit le meilleur score d'évaluation pour le modèle cible.

À la fin du job, l'optimiseur basé sur les données génère les instructions système optimisées avec leur score d'évaluation.

Métriques d'évaluation

L'optimiseur basé sur les données 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. Remarque : Toutes les métriques d'évaluation DOIVENT avoir la propriété selon laquelle un score plus élevé indique de meilleures performances.

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 "SDK" de 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 basé sur les données n'accepte qu'une seule métrique personnalisée à la fois.

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

Métriques d'évaluation standards

L'optimiseur basé sur les données 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.
Comet comet** Décrit la capacité du modèle à évaluer la qualité d'une traduction par rapport à la référence.
MetricX metricx** Décrit la capacité du modèle à produire une traduction de qualité.
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, l'optimiseur basé sur les données exécute vos exemples de requêtes sur le modèle source pour générer les réponses de vérité terrain.

** Si vous souhaitez optimiser vos requêtes à l'aide de comet ou metricx, vous devez fournir le paramètre translation_source_field_name à votre configuration, qui spécifie le nom de champ correspondant du texte source dans les données. De plus, la valeur MetricX a été modifiée pour être comprise entre 0 (le pire) et 25 (le meilleur) afin de respecter la propriété "plus la valeur est élevée, mieux c'est".

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 les requêtes de différentes manières :

Choisissez la méthode que vous souhaitez utiliser pour optimiser les requêtes, 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 ni de tirets -.
  • 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 basé sur les données 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 basé sur les données 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 basé sur les données 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 basé sur les données 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 basé sur les données, 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 et des cas où il présente de bonnes 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 reference, qui est la réponse de vérité terrain pour la requête si elle est fournie dans l'ensemble de données de requêtes.

    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 'reference' from the request payload. 'response'
       represents the model's response, while 'reference' represents the ground
       truth response."""
       response = request_json['response']
       reference = request_json['reference']
    
       # 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. Il doit s'agir de la même région que celle du modèle cible.

Créer une configuration

La configuration de l'optimiseur basé sur les données spécifie les paramètres que vous souhaitez définir pour votre job 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 basé sur les données via le notebook, procédez comme suit pour créer une configuration :

  1. Dans Colab Enterprise, ouvrez le notebook de l'optimiseur basé sur les données.

    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 basé sur les données.
    3. Dans le champ OUTPUT_PATH, saisissez l'URI du bucket Cloud Storage dans lequel vous souhaitez que l'optimiseur basé sur les données é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 THINKING_BUDGET, saisissez le budget de réflexion pour le modèle cible pour lequel vous souhaitez optimiser les requêtes. La valeur par défaut est -1, ce qui signifie qu'il n'y a pas de réflexion pour les modèles sans raisonnement et une réflexion automatique pour les modèles avec raisonnement comme Gemini-2.5. Pour en savoir plus sur les paramètres budgétaires manuels, consultez Réflexion.
    3. 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.
    4. Dans le champ EVAL_METRIC, saisissez une métrique d'évaluation pour laquelle vous souhaitez optimiser vos requêtes.
    5. 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 basé sur les données 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 axé sur les données 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_DEMO_OPTIMIZATION_STEPS, saisissez le nombre de démonstrations évaluées par l'optimiseur basé sur les données. 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. Doit être un entier compris entre 2 et le nombre total d'exemples d'invites moins 1. 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 basé sur les données 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 basé sur les données 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 basé sur les données envoie au service d'évaluation de l'IA générative ou à la fonction Cloud Run.
      • Pour les métriques basées sur un modèle, cette valeur doit être un nombre à virgule flottante supérieur ou égal à 3.0. 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 basé sur les données 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 basé sur les données 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 basé sur les données 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 basé sur les données utilise lorsqu'il exécute l'optimisation.
      7. Dans le champ METRIC_AGGREGATION_TYPE, saisissez la pondération que vous souhaitez que l'optimiseur basé sur les données 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 basé sur les données.
    • 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 basé sur les données 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": "SYSTEM_INSTRUCTION",
     "prompt_template": "PROMPT_TEMPLATE",
     "target_model": "TARGET_MODEL",
     "thinking_budget": "THINKING_BUDGET,
     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 : instructions système que vous souhaitez optimiser.
    • PROMPT_TEMPLATE : modèle de requête.
    • TARGET_MODEL : modèle pour lequel vous souhaitez optimiser les requêtes.
    • THINKING_BUDGET : budget de réflexion pour le modèle cible pour lequel vous souhaitez optimiser les requêtes. La valeur par défaut est -1, ce qui signifie qu'il n'y a pas de réflexion pour les modèles sans réflexion et une réflexion automatique pour les modèles avec réflexion comme Gemini-2.5. Pour en savoir plus sur les paramètres budgétaires manuels, consultez Réflexion.
    • 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 employez 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 et avoir la même longueur que EVALUATION_METRIC_LIST.
      • 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 employez 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 basé sur les données é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 basé sur les données 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_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 basé sur les données 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_DEMO_OPTIMIZATION_STEPS : nombre de démonstrations évaluées par l'optimiseur basé sur les données. La valeur est utilisée avec le mode d'optimisation demonstration et instruction_and_demo. La valeur doit être un entier compris entre 2 et le nombre total d'exemples d'invites moins 1. 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, l'optimiseur basé sur les données 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 basé sur les données 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 basé sur les données envoie au service d'évaluation de l'IA générative ou à la fonction Cloud Run.
          • Pour les métriques basées sur un modèle, cette valeur doit être un nombre à virgule flottante supérieur ou égal à 3.0. 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 basé sur les données appelle vos fonctions Cloud Run de métriques personnalisées.
        • SOURCE_MODEL_QPS : nombre de requêtes par seconde (RPS) que l'optimiseur basé sur les données 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 basé sur les données.
        • 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 basé sur les données à l'aide de l'une des options suivantes :

Notebook

Exécutez l'optimiseur basé sur les données 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 basé sur les données

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

    L'optimiseur basé sur les données 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 :

SDK

Exécutez l'optimiseur axé sur les données via le SDK en ajoutant les sections de code suivantes dans votre notebook ou Colab.

Effectuez les remplacements suivants :

  • LOCATION : emplacement où vous souhaitez exécuter l'optimiseur axé sur les données.
  • PROJECT_ID : ID de votre projet.
  • PROJECT_NUMBER : numéro de votre projet, disponible dans la console Cloud.
  • PATH_TO_CONFIG : URI du fichier de configuration dans Cloud Storage. Par exemple, gs://bucket-name/configuration.json.
# Authenticate
from google.colab import auth
auth.authenticate_user(project_id=PROJECT_ID)

# Set the Service Account
SERVICE_ACCOUNT = f"{PROJECT_NUMBER}-compute@developer.gserviceaccount.com"

# Import Vertex AI SDK and Setup
import vertexai
vertexai.init(project=PROJECT_ID, location=LOCATION)

#Create the Vertex AI Client
client = vertexai.Client(project=PROJECT_ID, location=LOCATION)

# Setup the job dictionary
vapo_config = {
  'config_path': PATH_TO_CONFIG,
  'service_account': SERVICE_ACCOUNT,
  'wait_for_completion': True,
}

#Start the Vertex AI Prompt Optimizer
client = client.prompt_optimizer.optimize(method="vapo", config=vapo_config)

Une fois l'optimisation terminée, examinez les artefacts de sortie à l'emplacement de sortie spécifié dans la configuration.

Analyser les résultats et itérer

Après avoir exécuté l'optimiseur basé sur les données, 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 basé sur les données 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 basé sur les données 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 basé sur les données 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 basé sur les données, 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.

Bonnes pratiques

  • Les modèles en preview ne sont compatibles qu'avec la région global, et le job personnalisé Vertex n'est pas compatible avec global en tant que région. Par conséquent, n'utilisez pas VAPO pour optimiser les modèles d'aperçu en tant que modèle cible.

  • Pour les modèles en disponibilité générale, les utilisateurs peuvent sélectionner des emplacements spécifiques à une région, tels que us-central1 ou europe-central2, au lieu de global, pour respecter leurs exigences de résidence des données.

Étapes suivantes