Execute uma avaliação.

É possível usar o módulo de avaliação de IA generativa do SDK da Vertex AI para Python para avaliar de maneira programática seus modelos de linguagem generativa e aplicativos com a API do serviço de avaliação de IA generativa. Esta página mostra como executar avaliações com o SDK da Vertex AI.

Antes de começar

Instale o SDK da Vertex AI

Para instalar o módulo de avaliação de IA generativa do SDK da Vertex AI para Python, execute o seguinte comando:

!pip install -q google-cloud-aiplatform[evaluation]

Para mais informações, consulte Instalar o SDK da Vertex AI para Python.

Autenticar o SDK da Vertex AI

Depois de instalar o SDK da Vertex AI para Python, é preciso fazer a autenticação. Os tópicos a seguir explicam como autenticar com o SDK da Vertex AI se você estiver trabalhando localmente e no Colaboratory:

  • Se você estiver desenvolvendo localmente, configure o Application Default Credentials (ADC) no seu ambiente local:

    1. Instale a Google Cloud CLI e inicialize-a executando o seguinte comando:

      gcloud init
      
    2. Crie as credenciais de autenticação para sua Conta do Google:

      gcloud auth application-default login
      

      Uma tela de login será exibida. Após o login, suas credenciais são armazenadas no arquivo de credenciais local usado pelo ADC. Para mais informações sobre como trabalhar com o ADC em um ambiente local, consulte Ambiente de desenvolvimento local.

  • Se você estiver trabalhando no Colaboratory, execute o seguinte comando em uma célula do Colab para autenticar:

    from google.colab import auth
    auth.authenticate_user()
    

    Esse comando abre uma janela em que você pode concluir a autenticação.

Como entender as contas de serviço

A conta de serviço é usada pelo serviço de avaliação de IA generativa para receber previsões da API Gemini na Vertex AI para métricas de avaliação baseadas em modelo. Essa conta de serviço é provisionada automaticamente na primeira solicitação para o serviço de avaliação de IA generativa.

Nome Descrição Endereço de e-mail Papel
Agente de serviço de avaliação rápida do Vertex AI A conta de serviço usada para receber previsões para avaliação baseada em modelo. service-PROJECT_NUMBER@gcp-sa-vertex-eval.iam.gserviceaccount.com roles/aiplatform.rapidevalServiceAgent

As permissões associadas ao agente de serviço de avaliação rápida são:

Papel Permissões
Agente de serviço de avaliação rápida da Vertex AI (roles/aiplatform.rapidevalServiceAgent) aiplatform.endpoints.predict

Executar a avaliação

Use a classe EvalTask para executar avaliações para os seguintes casos de uso:

Classe EvalTask

A classe EvalTask ajuda a avaliar modelos e aplicativos com base em tarefas específicas. Para fazer comparações justas entre modelos generativos, geralmente é necessário avaliar várias vezes vários modelos e modelos de comando em um conjunto de dados de avaliação fixo usando métricas específicas. Também é importante avaliar várias métricas simultaneamente em uma única execução de avaliação.

O EvalTask também se integra aos Experimentos da Vertex AI para ajudar a monitorar configurações e resultados de cada execução de avaliação. Os experimentos da Vertex AI ajudam a gerenciar e interpretar os resultados da avaliação, permitindo que você tome decisões mais informadas.

O exemplo a seguir demonstra como instanciar a classe EvalTask e executar uma avaliação:

from vertexai.evaluation import (
    EvalTask,
    PairwiseMetric,
    PairwiseMetricPromptTemplate,
    PointwiseMetric,
    PointwiseMetricPromptTemplate,
    MetricPromptTemplateExamples
)

eval_task = EvalTask(
    dataset=DATASET,
    metrics=[METRIC_1, METRIC_2, METRIC_3],
    experiment=EXPERIMENT_NAME,
)

eval_result = eval_task.evaluate(
    model=MODEL,
    prompt_template=PROMPT_TEMPLATE,
    experiment_run=EXPERIMENT_RUN,
)

Executar avaliação com métricas baseadas em modelo

Para métricas baseadas em modelos, use as classes PointwiseMetric e PairwiseMetric para definir métricas adaptadas aos seus critérios específicos. Execute avaliações usando as seguintes opções:

Usar exemplos de métricas baseadas em modelos

É possível usar diretamente a constante integrada Metric Prompt Template Examples no SDK da Vertex AI. Outra opção é modificá-los e incorporá-los na interface de definição de métricas em formato livre.

Para conferir a lista completa de exemplos de modelos de comando de métrica que abrangem a maioria dos casos de uso principais, consulte Modelos de comando de métrica.

O exemplo do SDK da Vertex AI a seguir mostra como usar a classe MetricPromptTemplateExamples para definir suas métricas:

# View all the available examples of model-based metrics
MetricPromptTemplateExamples.list_example_metric_names()

# Display the metric prompt template of a specific example metric
print(MetricPromptTemplateExamples.get_prompt_template('fluency'))

# Use the pre-defined model-based metrics directly
eval_task = EvalTask(
    dataset=EVAL_DATASET,
    metrics=[MetricPromptTemplateExamples.Pointwise.FLUENCY],
)

eval_result = eval_task.evaluate(
    model=MODEL,
)

Usar uma interface de modelo de métrica baseada em modelo

Personalize suas métricas preenchendo campos como Criteria e Rating Rubrics usando as classes PointwiseMetricPromptTemplate e PairwiseMetricPromptTemplate no SDK da Vertex AI. Alguns campos, como Instruction, recebem um valor padrão se você não fornecer uma entrada.

Se preferir, especifique input_variables, que é uma lista de campos de entrada usados pelo modelo de comando de métrica para gerar resultados de avaliação baseados em modelos. Por padrão, a coluna response do modelo é incluída para métricas pontuais, e as colunas response e baseline_model_response do modelo candidato são incluídas para métricas em pares.

Para mais informações, consulte a seção "Estruturar um modelo de comando de métrica" em Modelos de comando de métrica.

# Define a pointwise metric with two custom criteria
custom_text_quality = PointwiseMetric(
    metric="custom_text_quality",
    metric_prompt_template=PointwiseMetricPromptTemplate(
        criteria={
          "fluency": "Sentences flow smoothly and are easy to read, avoiding awkward phrasing or run-on sentences. Ideas and sentences connect logically, using transitions effectively where needed.",
          "entertaining": "Short, amusing text that incorporates emojis, exclamations and questions to convey quick and spontaneous communication and diversion.",
        },
        rating_rubric={
          "1": "The response performs well on both criteria.",
          "0": "The response is somewhat aligned with both criteria",
          "-1": "The response falls short on both criteria",
        },
        input_variables=["prompt"],
    ),
)

# Display the serialized metric prompt template
print(custom_text_quality.metric_prompt_template)

# Run evaluation using the custom_text_quality metric
eval_task = EvalTask(
    dataset=EVAL_DATASET,
    metrics=[custom_text_quality],
)
eval_result = eval_task.evaluate(
    model=MODEL,
)

Usar a interface de SDK de formato livre para métricas baseadas em modelos

Para mais flexibilidade na personalização do modelo de comando de métrica, defina uma métrica diretamente usando a interface de formato livre, que aceita uma entrada de string direta.

# Define a pointwise multi-turn chat quality metric
pointwise_chat_quality_metric_prompt = """Evaluate the AI's contribution to a meaningful conversation, considering coherence, fluency, groundedness, and conciseness.
 Review the chat history for context. Rate the response on a 1-5 scale, with explanations for each criterion and its overall impact.

# Conversation History
{history}

# Current User Prompt
{prompt}

# AI-generated Response
{response}
"""

freeform_multi_turn_chat_quality_metric = PointwiseMetric(
    metric="multi_turn_chat_quality_metric",
    metric_prompt_template=pointwise_chat_quality_metric_prompt,
)

# Run evaluation using the freeform_multi_turn_chat_quality_metric metric
eval_task = EvalTask(
    dataset=EVAL_DATASET,
    metrics=[freeform_multi_turn_chat_quality_metric],
)
eval_result = eval_task.evaluate(
    model=MODEL,
)

Avaliar um modelo de tradução

Para avaliar seu modelo de tradução, especifique BLEU, MetricX ou COMET como métricas de avaliação ao usar o SDK da Vertex AI.

#Prepare the dataset for evaluation.
sources = [
    "Dem Feuer konnte Einhalt geboten werden",
    "Schulen und Kindergärten wurden eröffnet.",
]

responses = [
    "The fire could be stopped",
    "Schools and kindergartens were open",
]

references = [
    "They were able to control the fire.",
    "Schools and kindergartens opened",
]

eval_dataset = pd.DataFrame({
    "source": sources,
    "response": responses,
    "reference": references,
})

# Set the metrics.

metrics = [
    "bleu",
    pointwise_metric.Comet(),
    pointwise_metric.MetricX(),
]

eval_task = evaluation.EvalTask(
    dataset=eval_dataset,
    metrics=metrics,
)
eval_result = eval_task.evaluate()

Executar avaliação com métricas baseadas em computação

É possível usar as métricas baseadas em computação de forma independente ou com as métricas baseadas em modelo.

# Combine computation-based metrics "ROUGE" and "BLEU" with model-based metrics
eval_task = EvalTask(
    dataset=EVAL_DATASET,
    metrics=["rouge_l_sum", "bleu", custom_text_quality],
)
eval_result = eval_task.evaluate(
    model=MODEL,
)

Personalização adicional de métricas

Se você precisar personalizar ainda mais suas métricas, como escolher um modelo de avaliação diferente para métricas baseadas em modelo ou definir uma nova métrica baseada em computação, use a classe CustomMetric no SDK da Vertex AI. Para mais detalhes, consulte os seguintes notebooks:

Executar a avaliação baseada em modelo com limites de taxa e cota maiores

Uma única solicitação de avaliação para uma métrica baseada em modelo resulta em várias solicitações subjacentes à API Gemini na Vertex AI e consome a cota gemini-1.5-pro do modelo de avaliação. A cota de solicitações de modelo por minuto (RPM, na sigla em inglês) é calculada por projeto. Isso significa que as solicitações para o modelo de juiz gemini-1.5-pro e as solicitações para o serviço de avaliação de IA generativa para métricas baseadas em modelo são contabilizadas na cota RPM do modelo de juiz do projeto em uma região específica para gemini-1.5-pro.

Aumente a cota de RPM do modelo de avaliação e defina um limite de taxa de serviço de avaliação evaluation_service_qps mais alto nos seguintes casos de uso:

  • Aumento do volume de dados:se você estiver processando muito mais dados usando as métricas baseadas em modelo, provavelmente vai atingir a cota de RPM padrão. O aumento da cota permite processar um volume maior sem degradação de desempenho ou interrupções.

  • Avaliação mais rápida:se o aplicativo exige um tempo de resposta mais rápido para avaliações, talvez seja necessário aumentar a cota de RPM. Isso é especialmente importante para aplicativos com tempo de resposta crítico ou aqueles com interações em tempo real, em que atrasos na avaliação podem afetar a experiência do usuário.

  • Tarefas de avaliação complexas:uma cota de RPM mais alta garante que você tenha capacidade suficiente para lidar com avaliações que consomem muitos recursos para tarefas complexas ou grandes quantidades de texto.

  • Alta simultaneidade de usuários:se você prevê um grande número de usuários solicitando avaliações e inferências de modelos simultaneamente no seu projeto, um limite de RPM de modelo mais alto é crucial para evitar gargalos e manter a capacidade de resposta.

Para aumentar a cota do modelo e usar o SDK do serviço de avaliação de IA generativa com limites de taxa maiores, faça o seguinte:

  1. No console do Google Cloud, acesse a página Cotas do IAM e administrador.

    Confira as cotas no console

  2. No campo Filtro, especifique a dimensão (identificador do modelo) e a métrica (identificador de cota para modelos do Gemini): base_model:gemini-1.5-pro e Metric:aiplatform.googleapis.com/generate_content_requests_per_minute_per_project_per_base_model.

  3. Para a cota que você quer aumentar, clique no botão do menu mais ações.

  4. No menu suspenso, clique em Editar cota. O painel Mudanças de cota é aberto.

  5. Em Editar cota, insira um novo valor.

  6. Clique em Enviar solicitação.

  7. Uma solicitação de aumento de cota é confirmada por e-mail e geralmente leva dois dias úteis para ser processada.

  8. Depois que o pedido de aumento de cota for aprovado por e-mail, defina o parâmetro evaluation_service_qps da seguinte maneira:

from vertexai.evaluation import EvalTask

# GEMINI_RPM is the requests per minute (RPM) quota for gemini-1.5-pro in your region
# Evaluation Service QPS limit is equal to (gemini-1.5-pro RPM / 60 sec / default number of samples)
CUSTOM_EVAL_SERVICE_QPS_LIMIT = GEMINI_RPM / 60 / 4

eval_task = EvalTask(
    dataset=DATASET,
    metrics=[METRIC_1, METRIC_2, METRIC_3],
)

eval_result = eval_task.evaluate(
    evaluation_service_qps=CUSTOM_EVAL_SERVICE_QPS_LIMIT,
    # Specify a retry_timeout limit for a more responsive evaluation run
    # the default value is 600 (in seconds, or 10 minutes)
    retry_timeout=RETRY_TIMEOUT,
)

Para mais informações sobre cotas e limites, consulte Cotas do serviço de avaliação de IA generativa e API do serviço de avaliação de IA generativa.

A seguir