Otimizar comandos

Este documento descreve como usar o otimizador de comandos da Vertex AI para otimizar automaticamente a performance de comandos melhorando as instruções do sistema para um conjunto de comandos.

O otimizador de comandos da Vertex AI pode ajudar você a melhorar seus comandos rapidamente em grande escala, sem precisar reescrever manualmente instruções do sistema ou comandos individuais. Isso é especialmente útil quando você quer usar instruções e comandos do sistema que foram escritas para um modelo com um modelo diferente.

O otimizador de comandos da Vertex AI ajuda a melhorar os comandos avaliando a resposta do modelo em relação a comandos de amostra com métricas de avaliação especificadas. Para usar o otimizador de comandos da Vertex AI, você precisa ter o seguinte:

  • Um conjunto de comandos de exemplo
  • Instruções do sistema usadas por todos os seus comandos de exemplo
  • Um modelo de comando que faz referência aos comandos de exemplo

Exemplo de otimização de comando

Por exemplo, para otimizar instruções do sistema para um conjunto de comandos que fazem referência a informações contextuais para responder a perguntas sobre culinária, use o otimizador de comandos da Vertex AI. Para concluir esta tarefa, prepare as entradas de forma semelhante a esta:

Instruções do sistema

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.

Modelo de comando

Question: {input_question}
Facts: {input_context}

Comandos de amostra

input_question input_context
Quais são algumas técnicas para cozinhar carne vermelha e porco que maximizam o sabor e a maciez, minimizando a formação de compostos não saudáveis? Carne vermelha e suína devem ser cozidas a uma temperatura interna de 63 graus Celsius para garantir a segurança. Marinar a carne em ingredientes ácidos, como suco de limão ou vinagre, pode ajudar a amaciar, quebrando as fibras musculares duras. Métodos de cozimento em alta temperatura, como grelhar e selar, podem criar um delicioso escurecimento e caramelização, mas é importante evitar a carbonização, que pode produzir compostos nocivos.
Quais são algumas maneiras criativas de adicionar sabor e nutrientes a shakes proteicos sem usar açúcares adicionados ou ingredientes artificiais? Adicionar folhas verdes, como espinafre ou couve, é uma ótima maneira de aumentar o valor nutricional do seu shake sem alterar drasticamente o sabor. Usar leite de amêndoa ou água de coco sem açúcar em vez de leite comum pode adicionar uma doçura sutil e um aumento de gorduras ou eletrólitos saudáveis, respectivamente. Você sabia que misturar demais o shake pode esquentar? Para manter as coisas legais e refrescantes, faça misturas mais curtas e dê um intervalo ao liquidificador, se necessário.

Como a otimização funciona

Depois de preparar as entradas, escolha um modo de otimização, uma métrica de avaliação e um modelo de destino.

  • Modo de otimização: especifica se o otimizador de comandos da Vertex AI otimiza as instruções do sistema, seleciona comandos de exemplo para adicionar às instruções do sistema como alguns exemplos de fotos ou ambos.
  • Métrica de avaliação: a métrica que o otimizador de comandos da Vertex AI usa para otimizar as instruções do sistema e/ou selecionar comandos de exemplo.
  • Modelo de destino: o modelo do Google com que o otimizador de comandos da Vertex AI otimiza as instruções do sistema e/ou seleciona comandos de exemplo para uso.

Quando você executa o otimizador de comandos da Vertex AI, ele otimiza as instruções do sistema com base nas suas seleções executando um job de treinamento personalizado em que ele avalia iterativamente seus comandos de amostra e reescreve as instruções do sistema para encontrar a versão que produz a melhor pontuação de avaliação para o modelo de destino.

Ao final do job, o otimizador de comandos da Vertex AI gera as instruções do sistema otimizadas com a pontuação de avaliação.

Instruções otimizadas do sistema

As a highly skilled chef with a passion for healthy cooking, you love sharing your knowledge with
aspiring chefs. Today, a culinary intern approaches you with a question about healthy cooking. Given
the intern's question and some facts, provide a clear, concise, and informative answer that will help
the intern excel in their culinary journey.

Modelos compatíveis

É possível otimizar as instruções do sistema para uso com os seguintes modelos:

Métricas de avaliação com suporte

O otimizador de comandos da Vertex AI oferece suporte a métricas de avaliação personalizadas e também às seguintes métricas de avaliação:

Tipo de métrica Caso de uso Métrica Descrição
Com base no modelo Resumo summarization_quality Descreve a capacidade do modelo de responder a perguntas considerando um corpo de texto para referência.
Respostas a perguntas question_answering_correctness* Descreve a capacidade do modelo de responder corretamente a uma pergunta.
question_answering_quality Descreve a capacidade do modelo de responder a perguntas considerando um corpo de texto para referência.
Coerência coherence Descreve a capacidade do modelo de fornecer uma resposta coerente e mede a fluidez lógica e a coerência do texto gerado.
Segurança safety Descreve o nível de segurança do modelo, ou seja, se a resposta contém texto não seguro.
Fluência fluency Descreve o nível de domínio do idioma do modelo.
Embasamento groundedness Descreve a capacidade do modelo de fornecer ou referenciar informações incluídas apenas no texto de entrada.
Com base em computação Uso de ferramentas e chamada de função tool_call_valid* Descreve a capacidade do modelo de prever uma chamada de ferramenta válida.
tool_name_match* Descreve a capacidade do modelo de prever uma chamada de ferramenta com o nome correto. Apenas a primeira chamada de ferramenta é inspecionada.
tool_parameter_key_match* Descreve a capacidade do modelo de prever uma chamada de ferramenta com os nomes de parâmetros corretos.
tool_parameter_kv_match* Descreve a capacidade do modelo de prever uma chamada de ferramenta com os nomes de parâmetros e chaves-valor corretos.
Geração de texto em geral bleu* Contém o resultado de um algoritmo para avaliar a qualidade da previsão, que foi traduzida de uma linguagem natural para outra. A qualidade da previsão é considerada a correspondência entre um parâmetro de previsão e o parâmetro de referência.
exact_match* Calcula se um parâmetro de previsão corresponde exatamente a um parâmetro de referência.
rouge_1* Usado para comparar o parâmetro de previsão fornecido com um parâmetro de referência.
rouge_2*
rouge_l*
rouge_l_sum*

* Se você quiser otimizar suas instruções usando as avaliações question_answering_correctness ou computacionais, faça uma das seguintes ações:

  • Adicione uma variável que represente a resposta de informações empíricas para seus comandos ao modelo de comando.
  • Se você não tiver respostas de informações empíricas para seus comandos, mas já tiver usado os comandos com um modelo do Google e atingido os resultados desejados, adicione o parâmetro source_model à configuração em vez de adicionar respostas de informações empíricas. Quando o parâmetro source_model é definido, a Vertex AI executa seus comandos de exemplo no modelo de origem para gerar as respostas de informações empíricas para você.

Antes de começar

Otimizar comandos

É possível otimizar comandos executando o notebook do otimizador de comandos da Vertex AI ou usando a API Vertex AI. Para otimizar comandos, escolha qual método você quer usar para executar o otimizador de comandos da Vertex AI e siga as etapas descritas em detalhes nas seções a seguir:

  1. Criar um modelo de comando e instruções do sistema
  2. Preparar exemplos de comandos
  3. Escolher uma métrica de avaliação
  4. Criar uma configuração
  5. Executar o job de otimização de comando
  6. Analisar resultados e iterar

Criar um modelo de comando e instruções do sistema

Os modelos de comando definem o formato de todos os comandos usando variáveis substituíveis. Quando você usa um modelo de comando para otimizar comandos, as variáveis são substituídas pelos dados no conjunto de dados do comando.

As variáveis do modelo de comando precisam atender aos seguintes requisitos:

  • As variáveis precisam estar entre chaves.
  • Os nomes das variáveis não podem conter espaços
  • As variáveis que representam entradas multimodais precisam incluir a string MIME_TYPE após a variável:

    @@@MIME_TYPE
    

    Substitua MIME_TYPE por um tipo MIME de imagem, vídeo, áudio ou documento que seja aceito pelo modelo de destino.

Crie um modelo de comando e instruções do sistema usando um dos seguintes métodos:

Notebook

Se você quiser executar o otimizador de comandos da Vertex AI no notebook, crie instruções do sistema e um modelo de comando fazendo o seguinte:

  1. No Colab Enterprise, abra o notebook do otimizador de comandos da Vertex AI.

    Acesse o notebook do otimizador de comandos da Vertex AI

  2. Na seção Criar um modelo de comando e instruções do sistema, faça o seguinte:

    1. No campo SYSTEM_INSTRUCTION, insira as instruções do sistema. Exemplo:

      Based on the following images and articles respond to the questions.'\n' Be concise,
      and answer \"I don't know\" if the response cannot be found in the provided articles or images.
      
    2. No campo PROMPT_TEMPLATE, digite o modelo de comando. Exemplo:

      Article 1:\n\n{article_1}\n\nImage 1:\n\n{image_1} @@@image/jpeg\n\nQuestion: {question}
      
    3. Se você quiser otimizar seus comandos usando as avaliações question_answering_correctness ou computacionais, faça um destes procedimentos:

    • Adicione a variável {target} ao modelo de comando para representar a resposta de informações empíricas do comando. Por exemplo:

      Article 1:\n\n{article_1}\n\nImage 1:\n\n{image_1} @@@image/jpeg\n\nQuestion: {question}\n\n Answer: {target}
      
    • Se você não tiver respostas de informações empíricas para seus comandos, mas já tiver usado os comandos com um modelo do Google e alcançado os resultados pretendidos, adicione o parâmetro source_model à configuração em vez de adicionar respostas de informações empíricas. Quando o parâmetro source_model é definido, o otimizador de comandos da Vertex AI executa seus comandos de exemplo no modelo de origem para gerar as respostas de informações empíricas para você.

SDK

Se você quiser executar o otimizador de comandos da Vertex AI pelo SDK sem usar o notebook, crie arquivos de texto para seu modelo de comando e instruções do sistema seguindo estas etapas:

  1. Crie um arquivo de texto para as instruções do sistema.

  2. No arquivo de texto, defina as instruções do sistema. Exemplo:

    Based on the following images and articles respond to the questions.'\n' Be concise, and answer \"I don't know\" if the response cannot be found in the provided articles or images.
    
  3. Crie um arquivo de texto para o modelo de comando.

  4. No arquivo de texto, defina um modelo de comando que inclua uma ou mais variáveis. Por exemplo:

    Article 1:\n\n{article_1}\n\nImage 1:\n\n{image_1} @@@image/jpeg\n\nQuestion: {question}
    
  5. Se você quiser otimizar seus comandos usando as avaliações question_answering_correctness ou computacionais, faça um destes procedimentos:

    • Adicione a variável {target} ao modelo de comando para representar a resposta de informações empíricas do comando. Por exemplo:

      Article 1:\n\n{article_1}\n\nImage 1:\n\n{image_1} @@@image/jpeg\n\nQuestion: {question}\n\n Answer: {target}
      
    • Se você não tiver respostas de informações empíricas para seus comandos, mas já tiver usado os comandos com um modelo do Google e alcançado os resultados pretendidos, adicione o parâmetro source_model à configuração em vez de adicionar respostas de informações empíricas. Quando o parâmetro source_model é definido, o otimizador de comandos da Vertex AI executa seus comandos de exemplo no modelo de origem para gerar as respostas de informações empíricas para você.

Preparar exemplos de comandos

Para ter os melhores resultados com o otimizador de comandos da Vertex AI, use de 50 a 100 comandos de exemplo.

  • A ferramenta ainda pode ser eficaz com apenas cinco comandos de exemplo.
  • As melhores amostras incluem exemplos em que o modelo de destino tem um desempenho ruim.

Os comandos de exemplo contêm os dados que substituem as variáveis no modelo de comando. Você pode usar um arquivo JSONL ou CSV para armazenar os comandos de amostra.

Arquivo JSONL

  1. Crie um arquivo JSONL.
  2. No arquivo JSONL, adicione os dados do comando que substituem cada variável. Exemplo:

    {"article_1": "The marine life …", "image_1": "gs://path_to_image", "Question": "What are some most effective ways to reduce ocean pollution?", "target": "The articles and images don't answer this question."}
    
    {"article_1": "During the year …", "image_1": "gs://path_to_image", "Question": "Who was the president in 2023?", "target": "Joe Biden"}
    
  3. Faça upload do arquivo JSONL em um bucket do Cloud Storage.

Arquivo CSV

  1. Criar um arquivo CSV
  2. Na primeira linha, adicione as variáveis do modelo de comando.
  3. Nas linhas a seguir, adicione os dados de exemplo que substituem cada variável.
  4. Faça upload do arquivo CSV em um bucket do Cloud Storage.

Escolher uma métrica de avaliação

O otimizador de comandos da Vertex AI usa métricas de avaliação para otimizar instruções do sistema e selecionar comandos de exemplo.

Escolha uma das métricas de avaliação compatíveis ou defina sua própria métrica de avaliação personalizada. As métricas personalizadas são úteis quando as métricas padrão não se encaixam no seu aplicativo. É possível otimizar comandos usando várias métricas. No entanto, o otimizador de comandos da Vertex AI oferece suporte a apenas uma métrica personalizada por vez. Por exemplo, é possível executar o otimizador de comandos da Vertex AI usando uma métrica personalizada e a métrica bleu ou com as métricas bleu, rouge e summarization_quality, mas não é possível executar o otimizador de comandos da Vertex AI com várias métricas personalizadas ao mesmo tempo.

Para criar uma métrica personalizada, faça o seguinte:

  1. Crie um arquivo de texto chamado requirements.txt.

  2. No arquivo requirements.txt, defina as bibliotecas necessárias para a função de métrica de avaliação personalizada. Todas as funções exigem o pacote functions-framework.

    Por exemplo, o arquivo requirements.txt de uma métrica personalizada que calcula ROUGE-L seria semelhante a este:

    functions-framework==3.*
    rouge-score
    
  3. Crie um arquivo Python chamado main.py.

  4. No arquivo main.py, escreva sua função de avaliação personalizada. A função precisa aceitar o seguinte:

    • Solicitações POST HTTP
    • Entrada JSON que contém o response, que é a saída do LLM, e o target, que é a resposta verdadeira para o comando.

    Por exemplo, o arquivo main.py de uma métrica personalizada que calcula o ROUGE-L seria semelhante ao seguinte:

    from typing import Any
    import json
    import functions_framework
    from rouge_score import rouge_scorer
    
    # Register an HTTP function with the Functions Framework
    @functions_framework.http
    def main(request):
       request_json = request.get_json(silent=True)
       if not request_json:
           raise ValueError('Can not find request json.')
    
       """Extract 'response' and 'target' from the request payload. 'response'
       represents the model's response, while 'target' represents the ground
       truth response."""
       response = request_json['response']
       reference = request_json['target']
    
       # Compute ROUGE-L F-measure
       scorer = rouge_scorer.RougeScorer(['rougeL'], use_stemmer=True)
       scores = scorer.score(reference, response)
       final_score = scores['rougeL'].fmeasure
    
       # Return the custom score in the response
       return json.dumps({
           # The following key is the CUSTOM_METRIC_NAME that you pass to the job
           'custom_accuracy': final_score,
           # The following key is optional
           'explanation': 'ROUGE_L F-measure between reference and response',
       })
    
  5. Implante sua função de avaliação personalizada como uma função do Cloud Run executando o comando gcloud functions deploy:

    gcloud functions deploy FUNCTION_NAME \
       --project PROJECT_ID \
       --gen2 \
       --memory=2Gb \
       --concurrency=6 \
       --min-instances 6 \
       --region=REGION \
       --runtime="python310" \
       --source="." \
       --entry-point main \
       --trigger-http \
       --timeout=3600 \
       --quiet
    

    Substitua:

    • FUNCTION_NAME: o nome da métrica de avaliação personalizada.
    • PROJECT_ID: o ID do projeto.
    • REGION: a região em que você quer implantar a função.

Criar uma configuração

A configuração do otimizador de comandos da Vertex AI especifica os parâmetros que você quer definir para o job de otimização de comandos, incluindo:

  • Modo de otimização: especifica se o otimizador de comandos da Vertex AI otimiza as instruções do sistema, seleciona comandos de exemplo para adicionar às instruções do sistema como alguns exemplos de fotos ou ambos.
  • Métrica de avaliação: a métrica que o otimizador de comandos da Vertex AI usa para otimizar as instruções do sistema e/ou selecionar comandos de exemplo.
  • Modelo de destino: o modelo do Google que o otimizador de comandos da Vertex AI otimiza as instruções do sistema e/ou seleciona comandos de exemplo para uso.

Crie uma configuração usando uma das seguintes opções:

Notebook

Se você quiser executar o otimizador de comandos da Vertex AI no notebook, crie uma configuração do seguinte modo:

  1. No Colab Enterprise, abra o notebook do otimizador de comandos da Vertex AI.

    Acesse o notebook do otimizador de comandos da Vertex AI

  2. Na seção Configurar as configurações do projeto, faça o seguinte:

    1. No campo PROJECT_ID, insira o ID do projeto.
    2. No campo LOCATION, insira o local em que você quer executar o otimizador de comandos da Vertex AI.
    3. No campo OUTPUT_PATH, insira o URI do bucket do Cloud Storage em que você quer que o otimizador de comandos da Vertex AI grave as instruções otimizadas do sistema e/ou alguns exemplos de fotos. Por exemplo, gs://bucket-name/output-path.
    4. No campo INPUT_PATH, insira o URI dos comandos de exemplo no seu bucket do Cloud Storage. Por exemplo, gs://bucket-name/sample-prompts.jsonl.
  3. Na seção Configurar as configurações de otimização, faça o seguinte:

    1. No campo TARGET_MODEL, insira o modelo que você quer otimizar para uso.
    2. Em OPTIMIZATION_MODE, insira o modo de otimização que você quer usar. Precisa ser de instruction, demonstration, ou instruction_and_demo.
    3. No campo EVAL_METRIC, insira a métrica de avaliação em que você quer otimizar os comandos.
    4. Opcional: no campo SOURCE_MODEL, insira o modelo do Google com que as instruções e comandos do sistema foram usados anteriormente. Quando o parâmetro source_model é definido, o otimizador de comandos da Vertex AI executa seus comandos de exemplo no modelo de origem para gerar as respostas de informações empíricas para você, para métricas de avaliação que exigem respostas de informações empíricas. Se você não executou os comandos com um modelo do Google ou não alcançou os resultados desejados, adicione respostas de verdade ao comando. Para mais informações, consulte a seção Criar um comando e instruções do sistema deste documento.
  4. Opcional: na seção Configurar as configurações de otimização avançada, é possível adicionar qualquer um dos parâmetros opcionais à configuração.

  5. Conferir parâmetros opcionais
    • No campo NUM_INST_OPTIMIZATION_STEPS, insira o número de iterações que o otimizador de comando da Vertex AI usa no modo de otimização de instrução. O tempo de execução aumenta linearmente conforme você aumenta esse valor. É preciso que seja um número inteiro entre 10 e 20. Se não for definido, o padrão será 10.
    • No campo NUM_TEMPLATES_PER_STEP, insira o número de instruções do sistema que o otimizador de comandos da Vertex AI gera e avalia. Usado com o modo de otimização instruction e instruction_and_demo. É preciso que seja um número inteiro entre 1 e 4. Se não for definido, o padrão será 2.
    • No campo NUM_DEMO_OPTIMIZATION_STEPS, insira o número de demonstrações que o otimizador de comandos da Vertex AI avalia. Usado com o modo de otimização demonstration e instruction_and_demo. É preciso que seja um número inteiro entre 10 e 30. Se não for definido, o padrão será 10.
    • No campo NUM_DEMO_PER_PROMPT, insira o número de demonstrações geradas por comando. É preciso que seja um número inteiro entre 3 e 6 Se não for definido, o padrão será 3.
    • No campo TARGET_MODEL_QPS, insira as consultas por segundo (QPS) que o otimizador de comandos da Vertex AI envia para o modelo de destino. O tempo de execução diminui linearmente à medida que você aumenta esse valor. Precisa ser um número flutuante de 3.0 ou mais, mas menor que a cota de QPS que você tem no modelo de destino. Se não for definido, o padrão será 3.0.
    • No campo SOURCE_MODEL_QPS, insira as consultas por segundo (QPS) que o otimizador de comandos do Vertex AI envia para o modelo de origem. Precisa ser um número flutuante de 3.0 ou mais, mas menor que a cota de QPS que você tem no modelo de origem. Se não for definido, o padrão será 3.0.
    • No campo EVAL_QPS, insira as consultas por segundo (QPS) que o otimizador de comandos da Vertex AI envia para o modelo de avaliação, gemini-1.5-pro.
      • Para métricas baseadas em modelo, precisa ser um número flutuante de 3.0 ou mais, mas menor que a cota que você tem para gemini-1.5-pro. Se não for definido, o padrão será 3.0.
      • Para métricas personalizadas, precisa ser um número flutuante de 3.0 ou mais. Isso determina a taxa em que o otimizador de comandos da Vertex AI chama suas funções do Cloud Run de métrica personalizada.
    • Se você quiser usar mais de uma métrica de avaliação, faça o seguinte:
      1. No campo EVAL_METRIC_1, insira uma métrica de avaliação que você quer usar.
      2. No campo EVAL_METRIC_1_WEIGHT, insira o peso que você quer que o otimizador de comandos da Vertex AI use ao executar a otimização.
      3. No campo EVAL_METRIC_2, insira uma métrica de avaliação que você quer usar.
      4. No campo EVAL_METRIC_2_WEIGHT, insira o peso que você quer que o otimizador de comandos da Vertex AI use ao executar a otimização.
      5. No campo EVAL_METRIC_3, insira uma métrica de avaliação que você quer usar.
      6. Como opção, no campo EVAL_METRIC_3_WEIGHT, insira
      7. No campo METRIC_AGGREGATION_TYPE, insira o peso que você quer que o otimizador de comandos da Vertex AI use ao executar a otimização.
    • No campo PLACEHOLDER_TO_VALUE, insira as informações que substituem todas as variáveis nas instruções do sistema. As informações incluídas nesta flag não são otimizadas pelo otimizador de comando da Vertex AI.
    • No campo RESPONSE_MIME_TYPE, insira o tipo de resposta MIME usado pelo modelo de destino. Precisa ser de text/plain ou application/json. Se não for definido, o padrão será text/plain.
    • No campo TARGET_LANGUAGE, digite o idioma das instruções do sistema. Se não for definido, o padrão será o inglês.

SDK

Se você quiser executar o otimizador de comandos da Vertex AI pelo SDK, crie um arquivo JSON com os parâmetros que você quer usar para otimizar comandos seguindo estas etapas:

  1. Crie um arquivo JSON com os parâmetros que você quer usar para otimizar os comandos. Cada arquivo de configuração requer os seguintes parâmetros:

    {
     "project": "PROJECT_ID",
     "system_instruction_path": "SYSTEM_INSTRUCTION_PATH",
     "prompt_template_path": "PROMPT_TEMPLATE_PATH",
     "target_model": "TARGET_MODEL",
     EVALUATION_METRIC_PARAMETERS,
     "optimization_mode": "OPTIMIZATION_MODE",
     "input_data_path": "SAMPLE_PROMPT_URI",
     "output_path": "OUTPUT_URI"
    }
    

    Substitua:

    • PROJECT_ID: o ID do projeto.
    • SYSTEM_INSTRUCTION_PATH: o URI das instruções do sistema no bucket do Cloud Storage. Por exemplo, gs://bucket-name/system-instruction.txt.
    • PROMPT_TEMPLATE: o URI do modelo de comando no bucket do Cloud Storage. Por exemplo, gs://bucket-name/prompt-template.txt
    • TARGET_MODEL: o modelo que você quer otimizar com os comandos.
    • EVALUATION_METRIC_PARAMETERS: os parâmetros que você especifica dependem de quantas métricas de avaliação você está usando e se elas são padrão ou personalizadas:

      Uma métrica padrão

      Se você estiver usando uma única métrica de avaliação com suporte, use o seguinte parâmetro:

       "eval_metric": "EVALUATION_METRIC",
       

      Substitua EVALUATION_METRIC pela métrica de avaliação que você quer otimizar para os comandos.

      Métrica personalizada única

      Se você estiver usando uma única métrica de avaliação personalizada, use os seguintes parâmetros:

      "eval_metric": "custom_metric",
      "custom_metric_name": "CUSTOM_METRIC_NAME",
      "custom_metric_cloud_function_name": "FUNCTION_NAME",
      

      Substitua:

      • CUSTOM_METRIC_NAME: o nome da métrica, conforme definido pela chave que corresponde a final_score. Por exemplo, custom_accuracy.
      • FUNCTION_NAME: o nome da função do Cloud Run que você implantou anteriormente.

      Várias métricas padrão

      Se você estiver usando várias métricas de avaliação com suporte, use os seguintes parâmetros:

      "eval_metrics_types": [EVALUATION_METRIC_LIST],
      "eval_metrics_weights": [EVAL_METRICS_WEIGHTS],
      "aggregation_type": "METRIC_AGGREGATION_TYPE",
      

      Substitua:

      • EVALUATION_METRIC_LIST: uma lista de métricas de avaliação. É preciso que seja uma matriz. Por exemplo, "bleu", "summarization_quality".
      • EVAL_METRICS_WEIGHTS: o peso de cada métrica. É preciso que seja uma matriz.
      • METRIC_AGGREGATION_TYPE: o tipo de agregação usado para as métricas de avaliação. Precisa ser de weighted_sum ou weighted_average. Se não for definido, o padrão será weighted_sum.

      Várias métricas padrão e personalizadas

      Se você estiver usando várias métricas de avaliação que incluem uma combinação de métrica personalizada e padrão, use os seguintes parâmetros:

      "eval_metrics_types": ["custom_metric", EVALUATION_METRIC_LIST],
      "eval_metrics_weights": [EVAL_METRICS_WEIGHTS],
      "aggregation_type": "METRIC_AGGREGATION_TYPE",
      "custom_metric_name": "CUSTOM_METRIC_NAME",
      "custom_metric_cloud_function_name": "FUNCTION_NAME",
      

      Substitua:

      • EVALUATION_METRIC_LIST: uma lista das métricas de avaliação padrão. É preciso que seja uma matriz. Por exemplo, "bleu", "summarization_quality".
      • EVAL_METRICS_WEIGHTS: o peso de cada métrica. É preciso que seja uma matriz.
      • METRIC_AGGREGATION_TYPE: o tipo de agregação usado para as métricas de avaliação. Precisa ser de weighted_sum ou weighted_average. Se não for definido, o padrão será weighted_sum.
      • CUSTOM_METRIC_NAME: o nome da métrica, conforme definido pela chave que corresponde a final_score. Por exemplo, custom_accuracy.
      • FUNCTION_NAME: o nome da função do Cloud Run que você implantou anteriormente.
    • OPTIMIZATION_MODE: o modo de otimização. Precisa ser instruction, demonstration ou instruction_and_demo.

    • SAMPLE_PROMPT_URI: o URI dos comandos de exemplo no bucket do Cloud Storage. Por exemplo, gs://bucket-name/sample-prompts.jsonl.

    • OUTPUT_URI: o URI do bucket do Cloud Storage em que você quer que o otimizador de comandos da Vertex AI grave as instruções otimizadas do sistema e/ou alguns exemplos de fotos. Por exemplo, gs://bucket-name/output-path.

  2. Além disso, é possível adicionar qualquer um dos parâmetros opcionais ao arquivo de configuração.

    Os parâmetros opcionais são divididos em 5 categorias:

    • Parâmetros do processo de otimização. Esses parâmetros controlam o processo de otimização geral, incluindo a duração e o número de iterações de otimização executadas, o que afeta diretamente a qualidade das otimizações.
    • Seleção de modelo e parâmetros de localização. Esses parâmetros especificam quais modelos o otimizador de comandos da Vertex AI usa e os locais em que eles são usados.
    • Parâmetros de latência (QPS). Esses parâmetros controlam o QPS, afetando a velocidade do processo de otimização.
    • Outro. Outros parâmetros que controlam a estrutura e o conteúdo dos comandos.

      Conferir parâmetros opcionais
      "num_steps": NUM_INST_OPTIMIZATION_STEPS,
      "num_template_eval_per_step": NUM_TEMPLATES_PER_STEP,
      "num_demo_set_candidates": "NUM_DEMO_OPTIMIZATION_STEPS,
      "demo_set_size": NUM_DEMO_PER_PROMPT,
      "target_model_location": "TARGET_MODEL_LOCATION",
      "source_model": "SOURCE_MODEL",
      "source_model_location": "SOURCE_MODEL_LOCATION",
      "target_model_qps": TARGET_MODEL_QPS,
      "eval_qps": EVAL_QPS,
      "source_model_qps": SOURCE_MODEL_QPS,
      "response_mime_type": "RESPONSE_MIME_TYPE",
      "language": "TARGET_LANGUAGE",
      "placeholder_to_content": "PLACEHOLDER_TO_CONTENT",
      "data_limit": DATA_LIMIT
      

      Substitua:

      • Parâmetros do processo de otimização:

        • NUM_INST_OPTIMIZATION_STEPS: o número de iterações que o otimizador de comandos da Vertex AI usa no modo de otimização de instruções. O tempo de execução aumenta linearmente conforme você aumenta esse valor. É preciso que seja um número inteiro entre 10 e 20. Se não for definido, o padrão será 10.
        • NUM_TEMPLATES_PER_STEP: o número de instruções do sistema que o otimizador de comandos da Vertex AI gera e avalia. Usado com o modo de otimização instruction e instruction_and_demo. É preciso que seja um número inteiro entre 1 e 4. Se não for definido, o padrão será 2.
        • NUM_DEMO_OPTIMIZATION_STEPS: o número de demonstrações que o otimizador de comandos da Vertex AI avalia. Usado com o modo de otimização demonstration e instruction_and_demo. É preciso que seja um número inteiro entre 10 e 30. Se não for definido, o padrão será 10.
        • NUM_DEMO_PER_PROMPT: o número de demonstrações geradas por comando. É preciso que seja um número inteiro entre 3 e 6. Se não for definido, o padrão será 3.
      • Seleção de modelo e parâmetros de local:

        • TARGET_MODEL_LOCATION: o local em que você quer executar o modelo de destino. Se não for definido, o padrão será us-central1.
        • SOURCE_MODEL: o modelo do Google com que as instruções e comandos do sistema foram usadas anteriormente. Quando o parâmetro source_model é definido, a Vertex AI executa seus comandos de amostra no modelo de origem para gerar as respostas de informações empíricas para você, para métricas de avaliação que exigem respostas de informações empíricas. Se você não executou os comandos com um modelo do Google ou não alcançou os resultados desejados, adicione respostas com informações empíricas no comando. Para mais informações, consulte a seção Criar um comando e instruções do sistema deste documento.
        • SOURCE_MODEL_LOCATION: o local em que você quer executar o modelo de origem. Se não for definido, o padrão será us-central1.
      • Parâmetros de latência (QPS):

        • TARGET_MODEL_QPS: as consultas por segundo (QPS) que o otimizador de comandos da Vertex AI envia para o modelo de destino. O tempo de execução diminui linearmente à medida que você aumenta esse valor. Precisa ser um número flutuante de 3.0 ou mais, mas menor que a cota de QPS que você tem no modelo de destino. Se não for definido, o padrão será 3.0.
        • EVAL_QPS: as consultas por segundo (QPS) que o otimizador de comandos da Vertex AI envia para o modelo de avaliação, gemini-1.5-pro.
          • Para métricas baseadas em modelo, precisa ser um número flutuante de 3.0 ou mais, mas menor que a cota que você tem para gemini-1.5-pro. Se não for definido, o padrão será 3.0.
          • Para métricas personalizadas, precisa ser um número flutuante de 3.0 ou mais. Isso determina a taxa em que o otimizador de comandos da Vertex AI chama suas funções do Cloud Run de métrica personalizada.
        • SOURCE_MODEL_QPS: as consultas por segundo (QPS) que o otimizador de comandos da Vertex AI envia para o modelo de origem. Precisa ser um número flutuante de 3.0 ou mais, mas menor que a cota de QPS que você tem no modelo de origem. Se não for definido, o padrão será 3.0.
      • Outros parâmetros:

        • RESPONSE_MIME_TYPE: o tipo de resposta MIME usado pelo modelo de destino. Precisa ser de text/plain ou application/json. Se não for definido, o padrão será text/plain.
        • TARGET_LANGUAGE: o idioma das instruções do sistema. Se não for definido, o padrão será o inglês.
        • PLACEHOLDER_TO_CONTENT: as informações que substituem todas as variáveis nas instruções do sistema. As informações incluídas nessa flag não são otimizadas pelo otimizador de comandos da Vertex AI.
        • DATA_LIMIT: a quantidade de dados usados para validação. O tempo de execução aumenta linearmente com esse valor. É preciso que seja um número inteiro entre 5 e 100 Se não for definido, o padrão será 100.
  3. Faça upload do arquivo JSON em um bucket do Cloud Storage.

Executar o otimizador de comandos

Execute o otimizador de comandos da Vertex AI usando uma das seguintes opções:

Notebook

Execute o otimizador de comandos da Vertex AI no notebook, seguindo estas etapas:

  1. No Colab Enterprise, abra o notebook do otimizador de comandos do Vertex AI.

    Acesse o notebook do otimizador de comandos da Vertex AI

  2. Na seção Executar otimizador de comando, clique em play_circle Executar célula.

    O otimizador de comandos da Vertex AI é executado.

REST

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • LOCATION: o local em que você quer executar o otimizador de comando da Vertex AI.
  • PROJECT_ID: o ID do projeto.
  • JOB_NAME: um nome para o job do otimizador de comandos da Vertex AI.
  • PATH_TO_CONFIG: o URI do arquivo de configuração no seu bucket do Cloud Storage. Por exemplo, gs://bucket-name/configuration.json.

Método HTTP e URL:

POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/customJobs

Corpo JSON da solicitação:

{
  "displayName": "JOB_NAME",
  "jobSpec": {
    "workerPoolSpecs": [
      {
        "machineSpec": {
          "machineType": "n1-standard-4"
        },
        "replicaCount": 1,
        "containerSpec": {
          "imageUri": "us-docker.pkg.dev/vertex-ai-restricted/builtin-algorithm/apd:preview_v1_0",
          "args": ["--config=PATH_TO_CONFIG""]
        }
      }
    ]
  }
}

Para enviar a solicitação, escolha uma destas opções:

curl

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/customJobs"

PowerShell

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/customJobs" | Select-Object -Expand Content

A resposta será semelhante a:

Python

Antes de testar esse exemplo, siga as instruções de configuração para Python no Guia de início rápido da Vertex AI sobre como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Vertex AI para Python.

Para autenticar na Vertex AI, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.

from google.cloud import aiplatform

# Initialize Vertex AI platform
aiplatform.init(project=PROJECT_ID, location="us-central1")

# TODO(Developer): Check and update lines below
# cloud_bucket = "gs://cloud-samples-data"
# config_path = f"{cloud_bucket}/instructions/sample_configuration.json"
# output_path = "custom_job/output/"

custom_job = aiplatform.CustomJob(
    display_name="Prompt Optimizer example",
    worker_pool_specs=[
        {
            "replica_count": 1,
            "container_spec": {
                "image_uri": "us-docker.pkg.dev/vertex-ai-restricted/builtin-algorithm/apd:preview_v1_0",
                "args": [f"--config={cloud_bucket}/{config_path}"],
            },
            "machine_spec": {
                "machine_type": "n1-standard-4",
            },
        }
    ],
    staging_bucket=cloud_bucket,
    base_output_dir=f"{cloud_bucket}/{output_path}",
)

custom_job.submit()
print(f"Job resource name: {custom_job.resource_name}")
# Example response:
#    'projects/123412341234/locations/us-central1/customJobs/12341234123412341234'

Analisar resultados e iterar

Depois de executar o otimizador de comandos da Vertex AI, analise o progresso do job usando uma das seguintes opções:

Notebook

Se você quiser conferir os resultados do otimizador de comandos da Vertex AI no notebook, faça o seguinte:

  1. Abra o notebook do otimizador de comandos da Vertex AI.

  2. Na seção Inspecionar os resultados, faça o seguinte:

    1. No campo RESULT_PATH, adicione o URI do bucket do Cloud Storage em que você configurou o otimizador de comandos da Vertex AI para gravar resultados. Por exemplo, gs://bucket-name/output-path.

    2. Clique em play_circle Executar célula.

Console

  1. No Console do Google Cloud, na seção "Vertex AI", acesse a página Pipelines de treinamento.

    Acessar pipelines de treinamento

  2. Clique na guia Jobs personalizados. O job de treinamento personalizado do otimizador de comandos da Vertex AI é exibido na lista com o status dele.

Quando o job for concluído, revise as otimizações fazendo o seguinte:

  1. No Console do Google Cloud, acesse a página Buckets do Cloud Storage:

    Acessar buckets

  2. Clique no nome do seu bucket do Cloud Storage

  3. Navegue até a pasta que tem o mesmo nome do modo de otimização usado para avaliar os comandos, instruction ou demonstration. Se você usou o modo instruction_and_demo, as duas pastas vão aparecer. A pasta instruction contém os resultados da otimização de instruções do sistema, enquanto a pasta demonstration contém os resultados da otimização demonstration e as instruções do sistema otimizadas.

    A pasta contém os seguintes arquivos:

    • config.json: a configuração completa usada pelo otimizador de comandos da Vertex AI.
    • templates.json: cada conjunto de instruções do sistema e/ou alguns exemplos de fotos que o otimizador de comandos da Vertex AI gerou e a pontuação de avaliação.
    • eval_results.json: a resposta do modelo de destino para cada comando de amostra para cada conjunto de instruções do sistema geradas e/ou alguns exemplos de fotos e a pontuação de avaliação.
    • optimized_results.json: as instruções do sistema com melhor desempenho e/ou alguns exemplos de fotos e a pontuação de avaliação delas.
  4. Para conferir as instruções otimizadas do sistema, acesse o arquivo optimized_results.json.

A seguir