L'optimiseur zero-shot vous permet d'affiner et d'améliorer automatiquement les requêtes écrites par l'utilisateur. Souvent, une requête peut ne pas produire la réponse du modèle que vous souhaitez en raison d'un langage ambigu, d'un contexte manquant ou de l'inclusion d'informations non pertinentes. Cet optimiseur analyse et réécrit un prompt existant pour le rendre plus clair, plus efficace et mieux adapté aux capacités du modèle, ce qui permet d'obtenir des réponses de meilleure qualité.
L'optimiseur zero-shot est particulièrement utile pour :
Adaptation aux mises à jour du modèle : lorsque vous passez à une version plus récente d'un modèle, vos requêtes existantes peuvent ne plus fonctionner de manière optimale.
Amélioration de la compréhension des requêtes : lorsque la formulation d'une requête est complexe ou peut être mal interprétée, l'outil peut la reformuler pour une clarté et une précision maximales, ce qui réduit le risque d'un résultat indésirable.
Il existe deux façons d'utiliser l'optimiseur :
Génération d'instructions : au lieu d'écrire des instructions système complexes à partir de zéro, vous pouvez décrire votre objectif ou votre tâche en langage clair. L'optimiseur générera ensuite un ensemble complet et bien structuré d'instructions système conçues pour atteindre votre objectif.
Affinement du prompt : vous disposez d'un prompt fonctionnel, mais la sortie du modèle est incohérente, légèrement hors sujet ou manque de détails. L'optimiseur peut vous aider à améliorer la requête pour obtenir un meilleur résultat.
L'optimiseur est compatible avec l'optimisation des requêtes dans toutes les langues prises en charge par Gemini et est disponible via le SDK Agent Platform.
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 les rôles IAM suivants dans le projet à ce compte de service et à un compte utilisateur disposant du rôle Utilisateur Agent Platform (roles/aiplatform.user) :
- Utilisateur de la plate-forme d'agents (
roles/aiplatform.user) - Agent de service Vertex AI (
roles/aiplatform.serviceAgent)
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 et à votre compte utilisateur les autorisations requises via des rôles personnalisés ou d'autres rôles prédéfinis.
Optimiser un prompt
# Import libraries
import vertexai
import logging
# Google Colab authentication
from google.colab import auth
PROJECT_NAME = "PROJECT"
auth.authenticate_user(project_id=PROJECT_NAME)
# Initialize the Agent Platform client
client = vertexai.Client(project=PROJECT_NAME, location='us-central1')
# Input original prompt to optimize
prompt = """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.
"""
# Optimize prompt
output = client.prompt_optimizer.optimize_prompt(prompt=prompt)
# View optimized prompt
print(output.model_dump_json(indent=2))
Cet objet output est de type OptimizeResponse et fournit des informations sur le processus d'optimisation. La partie la plus importante est suggested_prompt, qui contient le prompt optimisé que vous pouvez utiliser pour obtenir de meilleurs résultats de votre modèle. Les autres champs, en particulier applicable_guidelines, sont utiles pour comprendre pourquoi et comment votre requête a été améliorée, ce qui peut vous aider à rédiger de meilleures requêtes à l'avenir. Voici un exemple de résultat :
{
"optimization_mode": "zero_shot",
"applicable_guidelines": [
{
"applicable_guideline": "Structure",
"suggested_improvement": "Add role definition.",
"text_before_change": "...",
"text_after_change": "Role: You are an AI assistant...\n\nTask Context:\n..."
},
{
"applicable_guideline": "RedundancyInstructions",
"suggested_improvement": "Remove redundant explanation.",
"text_before_change": "...",
"text_after_change": ""
}
],
"original_prompt": "...",
"suggested_prompt": "Role: You are an AI assistant...\n\nTask Context:\n..."
}
Optimiser pour les modèles plus petits
Les modèles plus petits comme Gemma 3n E4B ont des capacités de suivi des instructions différentes de celles des modèles plus grands. Les requêtes qui fonctionnent bien pour les grands modèles peuvent ne pas être optimales pour ces modèles plus petits. L'optimiseur zero-shot fournit un mode gemini_nano pour résoudre ce problème. Le mode gemini_nano affine votre prompt pour l'aligner spécifiquement sur les caractéristiques des modèles plus petits, ce qui permet de générer des prompts mieux adaptés aux capacités de ces modèles.
L'exemple suivant montre comment optimiser une requête pour les modèles plus petits :
client = vertexai.Client(project=PROJECT_NAME, location='us-central1')
prompt = 'Generate system instructions for analyzing medical articles'
# optimize_prompt returns OptimizeResponse type, which has 2 fields: raw_text_response and parsed_response
# raw_text_response is guaranteed and always will be given to the user.
# parsed_response is not guaranteed. If parsing is possible, the parsed response is stored in this field.
# parsed_response contains the following 4 fields:
# optimization_type, applicable_guidelines, original_prompt, suggested_prompt
response = client.prompt_optimizer.optimize_prompt(
prompt=prompt,
config=vertexai.types.OptimizeConfig(
optimization_target=vertexai.types.OptimizeTarget.OPTIMIZATION_TARGET_GEMINI_NANO
)
)
# print(response.raw_text_response)
print(response.parsed_response.suggested_prompt)