L'optimiseur zéro-shot vous permet d'affiner et d'améliorer automatiquement les requêtes écrites par les utilisateurs. Souvent, une requête peut ne pas produire la réponse de modèle souhaitée en raison d'un langage ambigu, d'un contexte manquant ou de l'inclusion d'informations non pertinentes. Cet optimiseur analyse et réécrit une requête existante pour la rendre plus claire, plus efficace et mieux alignée sur les capacités du modèle, ce qui permet d'obtenir des réponses de meilleure qualité.
L'optimiseur zéro-shot est particulièrement utile pour :
S'adapter aux mises à jour des modèles : 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éliorer 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 de résultat indésirable.
Vous pouvez utiliser l'optimiseur de deux manières :
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 naturel. L'optimiseur génère ensuite un ensemble complet et bien structuré d'instructions système conçues pour atteindre votre objectif.
Affinement des requêtes : vous disposez d'une requête fonctionnelle, 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 Agent Platform SDK
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 de lui
attribuer les rôles IAM suivants dans le projet, ainsi qu'à
un compte utilisateur disposant du rôle Utilisateur Agent Platform (roles/aiplatform.user)
:
- Utilisateur Agent Platform (
roles/aiplatform.user) - Agent de service Agent Platform (
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 la requête optimisée 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 à écrire de meilleures requêtes à l'avenir. Voici un exemple de sortie :
{
"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 zéro-shot fournit un mode gemini_nano pour résoudre ce problème. Le mode gemini_nano affine votre requête pour l'aligner spécifiquement sur les caractéristiques des modèles plus petits, ce qui permet de générer des requêtes mieux adaptées 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)