L'optimiseur de requêtes few-shot vous aide à affiner les instructions système en analysant les exemples où la réponse d'un modèle n'a pas répondu aux attentes. Vous fournissez des exemples spécifiques de requêtes, de réponses du modèle et de commentaires sur ces réponses, et l'optimiseur améliore les instructions système. Vous pouvez fournir des commentaires de deux manières : à l'aide de grilles d'évaluation ou de réponses cibles.
L'optimisation few-shot nécessite que vous fournissiez des exemples dans un DataFrame Pandas. Elle est disponible via le SDK Vertex AI.
Optimiser à l'aide d'une évaluation basée sur des rubriques
Cette méthode est destinée aux scénarios dans lesquels vous disposez de rubriques (également appelées critères de notation) pour chaque exemple et d'un enregistrement indiquant si le modèle a respecté ces critères. Votre DataFrame doit contenir les quatre colonnes suivantes :
prompt: requête utilisateur d'origine.model_response: résultat réel généré par le modèle.rubrics: liste de critères spécifiques pour cet exemple, sous la forme d'une représentation sous forme de chaîne d'une liste de chaînes.rubrics_evaluations: liste de valeurs booléennes indiquant si chaque critère de la grille d'évaluation a été respecté, sous la forme d'une représentation sous forme de chaîne d'une liste de valeurs booléennes.
Les rubriques peuvent être cohérentes pour toutes les lignes ou adaptées à chaque exemple.
import pandas as pd
import vertexai
from vertexai import types
PROJECT_NAME = "YOUR_PROJECT_NAME"
LOCATION = "YOUR_LOCATION" # e.g. "us-central1"
client = vertexai.Client(project=PROJECT_NAME, location=LOCATION)
system_instructions = "You are an AI assistant skilled in analyzing articles. Your task is to extract key arguments, evaluate evidence quality, identify potential biases, and summarize core findings into a concise, actionable, and objective report. Make sure the response is less than 50 words"
df = pd.DataFrame(
[
{
"prompt": "prompt1",
"model_response": "response1",
"rubrics": "['Response is in English', 'Under 50 words']",
"rubrics_evaluations": "[True, True]",
},
{
"prompt": "prompt2",
"model_response": "response2",
"rubrics": "['Response is in English', 'Under 50 words']",
"rubrics_evaluations": "[True, False]",
},
]
)
config = vertexai.types.OptimizeConfig(
optimization_target=vertexai.types.OptimizeTarget.OPTIMIZATION_TARGET_FEW_SHOT_RUBRICS,
examples_dataframe=df,
)
response = client.prompts.optimize(prompt=system_instructions, config=config)
print(response.parsed_response.suggested_prompt)
Optimiser à l'aide des réponses cibles
Si vous n'avez pas de rubriques spécifiques, mais que vous avez une réponse idéale ou "de référence" pour chaque requête, vous pouvez utiliser l'optimisation basée sur la réponse cible. L'optimiseur compare la sortie du modèle à la sortie idéale et ajuste les instructions pour combler l'écart.
Votre DataFrame doit inclure les trois colonnes suivantes :
prompt: instruction utilisateur d'origine.model_response: sortie actuelle du modèle qui doit être améliorée.target_response: réponse idéale que vous souhaitez que le modèle génère.
import pandas as pd
import vertexai
from vertexai import types
PROJECT_NAME = "PROJECT"
LOCATION = "YOUR_LOCATION" # e.g. "us-central1"
client = vertexai.Client(project=YOUR_PROJECT_NAME, location=LOCATION)
system_instructions = "You are an AI assistant skilled in analyzing articles. Your task is to extract key arguments, evaluate evidence quality, identify potential biases, and summarize core findings into a concise, actionable, and objective report. Make sure the response is less than 50 words"
df = pd.DataFrame(
{
"prompt": ["prompt1", "prompt2"],
"model_response": ["response1", "response2"],
"target_response": ["target1", "target2"],
}
)
config = vertexai.types.OptimizeConfig(
optimization_target=vertexai.types.OptimizeTarget.OPTIMIZATION_TARGET_FEW_SHOT_TARGET_RESPONSE,
examples_dataframe=df,
)
response = client.prompts.optimize(
prompt=system_instructions,
config=config,
)
print(response.parsed_response.suggested_prompt)