Ejecuta una evaluación

Puedes usar el módulo de Gen AI Evaluation del SDK de Vertex AI para Python para evaluar de manera programática tus modelos y aplicaciones de lenguaje generativo con la API de Gen AI Evaluation Service. En esta página, se muestra cómo ejecutar evaluaciones con el SDK de Vertex AI. Ten en cuenta que las evaluaciones a gran escala solo están disponibles a través de la API de REST.

Antes de comenzar

Instala el SDK de Vertex AI

Para instalar el módulo de Gen AI Evaluation desde el SDK de Vertex AI para Python, ejecuta el siguiente comando:

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

Si quieres obtener más información, consulta Instala el SDK de Vertex AI para Python.

Autentica el SDK de Vertex AI

Después de instalar el SDK de Vertex AI para Python, debes autenticarte. En los siguientes temas, se explica cómo autenticar con el SDK de Vertex AI si trabajas de forma local y en Colaboratory:

  • Si desarrollas de manera local, configura las credenciales predeterminadas de la aplicación (ADC) en tu entorno local:

    1. Instala Google Cloud CLI y, luego, inicialízala a través de la ejecución del siguiente comando:

      gcloud init
      
    2. Crea credenciales de autenticación locales para tu Cuenta de Google:

      gcloud auth application-default login
      

      Se muestra una pantalla de acceso. Después de acceder, tus credenciales se almacenan en el archivo de credenciales local que usa ADC. Si deseas obtener más información, consulta Configura ADC para un entorno de desarrollo local.

  • Si trabajas en Colaboratory, ejecuta el siguiente comando en una celda de Colab para autenticarte:

    from google.colab import auth
    auth.authenticate_user()
    

    Este comando abre una ventana en la que puedes completar la autenticación.

Comprende las cuentas de servicio

El servicio de evaluación de Gen AI usa la cuenta de servicio para obtener predicciones de la API de Gemini en Vertex AI para las métricas de evaluación basadas en modelos. Esta cuenta de servicio se aprovisiona automáticamente en la primera solicitud al servicio de evaluación de IA general.

Nombre Descripción Dirección de correo electrónico Rol
Agente de servicio de Rapid Eval de Vertex AI La cuenta de servicio que se usa para obtener predicciones para la evaluación basada en modelos. service-PROJECT_NUMBER@gcp-sa-vertex-eval.iam.gserviceaccount.com roles/aiplatform.rapidevalServiceAgent

Los permisos asociados con el agente de servicio de evaluación rápida son los siguientes:

Rol Permisos
Agente de servicio de Rapid Eval de Vertex AI (roles/aiplatform.rapidevalServiceAgent) aiplatform.endpoints.predict

Ejecuta la evaluación

Usa la clase EvalTask para ejecutar evaluaciones para los siguientes casos de uso:

Clase EvalTask

La clase EvalTask te ayuda a evaluar modelos y aplicaciones en función de tareas específicas. Para realizar comparaciones justas entre modelos generativos, por lo general, debes evaluar varios modelos y solicitar plantillas de forma repetida en un conjunto de datos de evaluación fijo con métricas específicas. También es importante evaluar varias métricas de forma simultánea en una sola ejecución de evaluación.

EvalTask también se integra en Vertex AI Experiments para ayudarte a hacer un seguimiento de la configuración y los resultados de cada ejecución de evaluación. Vertex AI Experiments ayuda a interpretar y administrar los resultados de la evaluación, lo que te permite tomar decisiones fundamentadas.

En el siguiente ejemplo, se muestra cómo crear una instancia de la clase EvalTask y ejecutar una evaluación:

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,
)

Ejecuta la evaluación con métricas basadas en modelos

Para las métricas basadas en modelos, usa las clases PointwiseMetric y PairwiseMetric para definir métricas adaptadas a tus criterios específicos. Ejecuta evaluaciones con las siguientes opciones:

Usa ejemplos de métricas basadas en modelos

Puedes usar directamente la constante integrada Metric Prompt Template Examples dentro del SDK de Vertex AI. Como alternativa, puedes modificarlos e incorporarlos en la interfaz de definición de métricas de formato libre.

Para obtener la lista completa de ejemplos de plantillas de instrucciones de métricas que abarcan la mayoría de los casos de uso clave, consulta Plantillas de instrucciones de métricas.

Console

Cuando ejecutas evaluaciones en un notebook de Colab Enterprise, puedes acceder a las plantillas de instrucciones de métricas directamente desde la Google Cloud consola.

  1. Haz clic en el vínculo del notebook de Gen AI Evaluation Service que prefieras.

  2. El notebook se abrirá en GitHub. Haz clic en Abrir en Colab Enterprise. Si un diálogo te solicita que habilites las APIs, haz clic en Habilitar.

  3. Haz clic en el ícono de Evaluación de IA generativa en la barra lateral. Se abrirá el panel Plantillas de métricas prediseñadas.

  4. Selecciona las métricas Punto a punto o Par a par.

  5. Haz clic en la métrica que deseas usar, como Fluidez. Aparecerá la muestra de código de la métrica.

  6. Haz clic en Copiar para copiar el muestra de código. De manera opcional, haz clic en Personalizar para cambiar los campos preestablecidos de la métrica.

  7. Pega la muestra de código en tu notebook.

SDK de Vertex AI

En el siguiente ejemplo del SDK de Vertex AI, se muestra cómo usar la clase MetricPromptTemplateExamples para definir tus 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,
)

Usa una interfaz de plantilla de métricas basada en modelos

Para personalizar tus métricas, propaga campos como Criteria y Rating Rubrics con las clases PointwiseMetricPromptTemplate y PairwiseMetricPromptTemplate del SDK de Vertex AI. A ciertos campos, como Instruction, se les asigna un valor predeterminado si no proporcionas una entrada.

De manera opcional, puedes especificar input_variables, que es una lista de campos de entrada que usa la plantilla de instrucciones de métricas para generar resultados de evaluación basados en modelos. De forma predeterminada, se incluye la columna response del modelo para las métricas puntuales, y se incluyen las columnas response y baseline_model_response del modelo candidato para las métricas por pares.

Para obtener más información, consulta la sección "Cómo estructurar una plantilla de instrucción de métrica" en Plantillas de instrucciones de métricas.

# 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,
)

Usa la interfaz de SDK de formato libre de métricas basadas en modelos

Para obtener más flexibilidad a la hora de personalizar la plantilla de instrucciones de métricas, puedes definir una métrica directamente con la interfaz de formato libre, que acepta una entrada de cadena directa.

# 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,
)

Cómo evaluar un modelo de traducción

Para evaluar tu modelo de traducción, puedes especificar BLEU, MetricX o COMET como métricas de evaluación cuando usas el SDK de 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()

Ejecuta la evaluación con métricas basadas en procesamiento

Puedes usar las métricas basadas en procesamiento de forma independiente o junto con las métricas basadas en modelos.

# 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,
)

Ejecuta evaluaciones a gran escala

Si tienes conjuntos de datos de evaluación grandes o ejecutas evaluaciones periódicamente en un entorno de producción, puedes usar la API de EvaluateDataset en el servicio de evaluación de IA generativa para ejecutar evaluaciones a gran escala.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_NUMBER: Tu número de proyecto.
  • DATASET_URI: Es la ruta de acceso de Cloud Storage a un archivo JSONL que contiene instancias de evaluación. Cada línea del archivo debe representar una sola instancia, con claves que correspondan a campos de entrada definidos por el usuario en metric_prompt_template (para métricas basadas en modelos) o parámetros de entrada obligatorios (para métricas basadas en el procesamiento). Solo puedes especificar un archivo JSONL. El siguiente ejemplo es una línea para una instancia de evaluación por puntos:
    {"response": "The Roman Senate was filled with exuberance due to Pompey's defeat in Asia."}
  • METRIC_SPEC: Una o más especificaciones de métricas que usas para la evaluación. Puedes usar las siguientes especificaciones de métricas cuando ejecutes evaluaciones a gran escala: "pointwise_metric_spec", "pairwise_metric_spec", "exact_match_spec", "bleu_spec" y "rouge_spec".
  • METRIC_SPEC_FIELD_NAME: Los campos obligatorios para la especificación de métricas que elegiste. Por ejemplo, "metric_prompt_template"
  • METRIC_SPEC_FIELD_CONTENT: Es el contenido del campo de la especificación de métrica que elegiste. Por ejemplo, puedes usar el siguiente contenido de campo para una evaluación puntual: "Evaluate the fluency of this sentence: {response}. Give score from 0 to 1. 0 - not fluent at all. 1 - very fluent."
  • OUTPUT_BUCKET: Es el nombre del bucket de Cloud Storage en el que deseas almacenar los resultados de la evaluación.

Método HTTP y URL:

POST https://us-central1-aiplatform.googleapis.com/v1beta1/projects/PROJECT_NUMBER/locations/us-central1/evaluateDataset

Cuerpo JSON de la solicitud:

{
  "dataset": {
    "gcs_source": {
      "uris": "DATASET_URI"
    }
  },
  "metrics": [
    {
      METRIC_SPEC: {
        METRIC_SPEC_FIELD_NAME: METRIC_SPEC_FIELD_CONTENT
      }
    }
  ],
  "output_config": {
    "gcs_destination": {
      "output_uri_prefix": "OUTPUT_BUCKET"
    }
  }
}

Para enviar tu solicitud, elige una de estas opciones:

curl

Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

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

PowerShell

Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

$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://us-central1-aiplatform.googleapis.com/v1beta1/projects/PROJECT_NUMBER/locations/us-central1/evaluateDataset" | Select-Object -Expand Content

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

Puedes usar el OPERATION_ID que recibes en la respuesta para solicitar el estado de la evaluación:

curl -X GET \
  -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
  -H "Content-Type: application/json; charset=utf-8" \
  "https://us-central1-aiplatform.googleapis.com/v1beta1/projects/PROJECT_NUMBER/locations/us-central1/operations/OPERATION_ID"

Personalización adicional de métricas

Si necesitas personalizar aún más tus métricas, como elegir un modelo de juez diferente para las métricas basadas en modelos o definir una nueva métrica basada en el procesamiento, puedes usar la clase CustomMetric en el SDK de Vertex AI. Para obtener más detalles, consulta los siguientes notebooks:

Ejecuta la evaluación basada en modelos con límites de frecuencia y cuotas aumentados

Una sola solicitud de evaluación para una métrica basada en modelos genera varias solicitudes subyacentes a la API de Gemini en Vertex AI y consume la cuota del modelo de juez. Debes establecer un límite de frecuencia más alto del servicio de evaluación en los siguientes casos de uso:

  • Mayor volumen de datos: Si procesas muchos más datos con las métricas basadas en modelos, es posible que alcances la cuota predeterminada de solicitudes por minuto (RPM). Aumentar la cuota te permite controlar el volumen más grande sin interrupciones ni degradación del rendimiento.

  • Evaluación más rápida: Si tu aplicación requiere un tiempo de respuesta más rápido para las evaluaciones, es posible que necesites una cuota de RPM más alta. Esto es especialmente importante para las aplicaciones urgentes o con interacciones en tiempo real, en las que las demoras en la evaluación pueden afectar la experiencia del usuario.

  • Tareas de evaluación complejas: Una cuota de RPM más alta garantiza que tengas suficiente capacidad para controlar evaluaciones que requieren muchos recursos para tareas complejas o grandes cantidades de texto.

  • Coincidencia alta de usuarios: Si prevés que una gran cantidad de usuarios solicitará de forma simultánea evaluaciones basadas en modelos y la inferencia de modelos en tu proyecto, un límite de RPM de modelo más alto es fundamental para evitar cuellos de botella y mantener la capacidad de respuesta.

Si usas el modelo de juez predeterminado de gemini-2.0-flash o modelos más recientes, te recomendamos que uses el Throughput aprovisionado para administrar tu cuota.

Para modelos anteriores a gemini-2.0-flash, usa las siguientes instrucciones para aumentar la cuota de RPM del modelo de juez:

  1. En la Google Cloud consola, ve a la página Cuotas de IAM y administración.

    Ver cuotas en la consola

  2. En el campo Filtro, especifica la Dimensión (identificador de modelo) y la Métrica (identificador de cuota para modelos de Gemini): base_model:gemini-2.0-flash y Metric:aiplatform.googleapis.com/generate_content_requests_per_minute_per_project_per_base_model.

  3. En la cuota que deseas aumentar, haz clic en el botón del menú más acciones.

  4. En el menú desplegable, haz clic en Editar cuota. Se abrirá el panel Cambios en la cuota.

  5. En Editar cuota, ingresa un nuevo valor de cuota.

  6. Haz clic en Enviar solicitud.

  7. Una solicitud de aumento de cuota (QIR) se confirma por correo electrónico y, por lo general, tarda dos días hábiles en procesarse.

Para ejecutar una evaluación con una cuota nueva, establece el parámetro evaluation_service_qps de la siguiente manera:

from vertexai.evaluation import EvalTask

# GEMINI_RPM is the requests per minute (RPM) quota for gemini-2.0-flash-001 in your region
# Evaluation Service QPS limit is equal to (gemini-2.0-flash-001 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 obtener más información sobre las cuotas y los límites, consulta Cuotas de Gen AI Evaluation Service y API de Gen AI Evaluation Service.

¿Qué sigue?