O otimizador zero-shot permite refinar e melhorar automaticamente os comandos escritos pelo usuário. Muitas vezes, um comando pode não produzir a resposta do modelo que você quer devido a uma linguagem ambígua, falta de contexto ou inclusão de informações irrelevantes. Esse otimizador analisa e reescreve um comando para que ele fique mais claro, eficaz e alinhado com os recursos do modelo, o que resulta em respostas de maior qualidade.
O otimizador de zero-shot é útil principalmente para:
Adaptação às atualizações do modelo: quando você faz upgrade para uma versão mais recente de um modelo, os comandos atuais podem não ter mais o desempenho ideal.
Melhorar a compreensão do comando: quando a frase de um comando é complexa ou pode ser interpretada de maneira errada, a ferramenta pode reformulá-la para máxima clareza e precisão, reduzindo a chance de um resultado indesejável.
Há duas maneiras de usar o otimizador:
Geração de instruções: em vez de escrever instruções de sistema complexas do zero, você pode descrever sua meta ou tarefa em linguagem simples. O otimizador vai gerar um conjunto completo e bem estruturado de instruções do sistema projetadas para atingir seu objetivo.
Refinamento de comando: você tem um comando que funciona, mas a saída do modelo é inconsistente, um pouco fora do assunto ou não tem os detalhes que você quer. O otimizador pode ajudar a melhorar o comando para uma saída melhor.
O otimizador oferece suporte à otimização de comandos em todos os idiomas aceitos pelo Gemini e está disponível no SDK da Agent Platform.
Antes de começar
Para garantir que a conta de serviço padrão do Compute Engine
tenha as permissões necessárias para otimizar comandos, peça ao administrador para
conceder os seguintes papéis do IAM no projeto a ela e a
uma conta de usuário que tenha o papel de Usuário da plataforma de agentes (roles/aiplatform.user):
- Usuário da Agent Platform (
roles/aiplatform.user) - Agente de serviço da Vertex AI (
roles/aiplatform.serviceAgent)
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
O administrador também pode conceder à conta de serviço padrão do Compute Engine e à sua conta de usuário as permissões necessárias por meio de papéis personalizados ou outros papéis predefinidos.
Otimizar um comando
# 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))
Esse objeto output é do tipo OptimizeResponse e fornece informações sobre o processo de otimização. A parte mais importante é o
suggested_prompt, que contém o comando otimizado que pode ser usado para conseguir
melhores resultados do modelo. Os outros campos, especialmente
applicable_guidelines, são úteis para entender por que e como o comando
foi melhorado, o que pode ajudar você a escrever comandos melhores no futuro. Veja um exemplo da saída:
{
"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..."
}
Otimização para modelos menores
Modelos menores, como o Gemma 3n E4B, têm recursos de seguimento de instruções diferentes dos modelos maiores. Os comandos que funcionam bem para modelos grandes
podem não ser ideais para esses modelos menores. O otimizador zero-shot oferece um modo gemini_nano para resolver esse problema. O modo gemini_nano refina seu
comando para se alinhar especificamente às características de modelos menores, o que
ajuda a gerar comandos que se adaptam melhor aos recursos de modelos menores.
O exemplo a seguir mostra como otimizar um comando para modelos menores:
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)