Otimizador zero-shot

Com o otimizador sem disparos, você refina e melhora automaticamente os comandos escritos pelos usuários. Muitas vezes, um comando pode não produzir a resposta do modelo que você quer devido a linguagem ambígua, falta de contexto ou inclusão de informações irrelevantes. Ele analisa e reescreve um comando para que fique mais claro, eficaz e alinhado às capacidades do modelo, resultando em respostas de maior qualidade.

O otimizador de zero-shot é particularmente útil para:

  • Adaptação às atualizações de modelo:quando você faz upgrade para uma versão mais recente de um modelo, os comandos atuais podem não funcionar mais da melhor forma.

  • Melhoria da compreensão de comandos:quando a frase de um comando é complexa ou pode ser mal interpretada, a ferramenta pode reformulá-la para máxima clareza e precisão, reduzindo a chance de um resultado indesejado.

Há duas maneiras de usar o otimizador:

  • Geração de instruções: em vez de escrever instruções complexas do sistema do zero, você pode descrever sua meta ou tarefa em linguagem simples. Em seguida, o otimizador vai gerar um conjunto completo e bem estruturado de instruções do sistema projetadas para alcançar seu objetivo.

  • Refinamento de comandos: você tem um comando funcional, 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 é compatível com a otimização de comandos em todos os idiomas disponíveis no Gemini e pode ser acessado pelo SDK da Vertex AI.

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 solicitações, peça ao administrador para conceder à conta de serviço padrão do Compute Engine os seguintes papéis do IAM no projeto:

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 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 Vertex AI 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 você pode usar para ter resultados melhores com seu modelo. Os outros campos, especialmente applicable_guidelines, são úteis para entender por que e como seu comando foi melhorado, o que pode ajudar você a escrever comandos melhores no futuro. Confira 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..."
}

Otimizar para modelos menores

Modelos menores, como o Gemma 3n E4B, têm recursos diferentes de obediência a instruções em comparação com 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 ajustam melhor às capacidades desses modelos.

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'

gemini_nano_config = vertexai.types.OptimizerConfig(
    optimization_target=vertexai.types.OptimizeTarget.OPTIMIZATION_TARGET_GEMINI_NANO
)

response = client.prompt_optimizer.optimize_prompt(
    prompt=prompt,
    config=gemini_nano_config
)

# Or more simpler way to call the prompt optimizer
# response = client.prompt_optimizer.optimize_prompt(
#    prompt=prompt,
#    config={optimization_target=vertexai.types.OptimizeTarget.OPTIMIZATION_TARGET_GEMINI_NANO}
# )