API del servicio de evaluación de la IA generativa

El servicio de evaluación de IA generativa te permite evaluar tus modelos de lenguaje extensos (LLMs) en varias métricas con tus propios criterios. Puedes proporcionar entradas de tiempo de inferencia, respuestas de LLM y parámetros adicionales, y el servicio de evaluación de IA generativa devuelve métricas específicas de la tarea de evaluación.

Entre las métricas se incluyen las basadas en modelos, como PointwiseMetric y PairwiseMetric, y las métricas calculadas en memoria, como rouge, bleu y las métricas de llamadas de funciones de herramientas. PointwiseMetric y PairwiseMetric son métricas genéricas basadas en modelos que puedes personalizar con tus propios criterios. Como el servicio toma los resultados de las predicciones directamente de los modelos como entrada, el servicio de evaluación puede realizar tanto inferencias como evaluaciones posteriores en todos los modelos compatibles con Vertex AI.

Para obtener más información sobre cómo evaluar un modelo, consulta el artículo sobre el servicio de evaluación de IA generativa.

Limitaciones

Estas son las limitaciones del servicio de evaluación:

  • El servicio de evaluación puede tener un retraso en la propagación en tu primera llamada.
  • La mayoría de las métricas basadas en modelos consumen cuota de gemini-2.0-flash porque el servicio de evaluación de la IA generativa usa gemini-2.0-flash como modelo de juez subyacente para calcular estas métricas.
  • Algunas métricas basadas en modelos, como MetricX y COMET, usan diferentes modelos de aprendizaje automático, por lo que no consumen cuota de gemini-2.0-flash.

Sintaxis de ejemplo

Sintaxis para enviar una llamada de evaluación.

curl

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \

https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}:evaluateInstances \
-d '{
  "pointwise_metric_input" : {
    "metric_spec" : {
      ...
    },
    "instance": {
      ...
    },
  }
}'

Python

import json

from google import auth
from google.api_core import exceptions
from google.auth.transport import requests as google_auth_requests

creds, _ = auth.default(
    scopes=['https://www.googleapis.com/auth/cloud-platform'])

data = {
  ...
}

uri = f'https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}:evaluateInstances'
result = google_auth_requests.AuthorizedSession(creds).post(uri, json=data)

print(json.dumps(result.json(), indent=2))

Lista de parámetros

Parámetros

exact_match_input

Opcional: ExactMatchInput

Entrada para evaluar si la predicción coincide exactamente con la referencia.

bleu_input

Opcional: BleuInput

Entrada para calcular la puntuación BLEU comparando la predicción con la referencia.

rouge_input

Opcional: RougeInput

Entrada para calcular las puntuaciones de rouge comparando la predicción con la referencia. rouge admite diferentes puntuaciones de rouge_type.

fluency_input

Opcional: FluencyInput

Campo de entrada para evaluar el dominio del idioma de una sola respuesta.

coherence_input

Opcional: CoherenceInput

Campo de entrada para evaluar la capacidad de una sola respuesta de proporcionar una réplica coherente y fácil de seguir.

safety_input

Opcional: SafetyInput

Entrada para evaluar el nivel de seguridad de una sola respuesta.

groundedness_input

Opcional: GroundednessInput

Entrada para evaluar la capacidad de una sola respuesta de proporcionar o hacer referencia a información incluida únicamente en el texto de entrada.

fulfillment_input

Opcional: FulfillmentInput

Campo de entrada para evaluar la capacidad de una sola respuesta para cumplir las instrucciones por completo.

summarization_quality_input

Opcional: SummarizationQualityInput

Campo de entrada para evaluar la capacidad general de una respuesta para resumir texto.

pairwise_summarization_quality_input

Opcional: PairwiseSummarizationQualityInput

Campo de entrada para comparar la calidad general del resumen de dos respuestas.

summarization_helpfulness_input

Opcional: SummarizationHelpfulnessInput

Entrada para evaluar la capacidad de una sola respuesta de proporcionar un resumen que contenga los detalles necesarios para sustituir el texto original.

summarization_verbosity_input

Opcional: SummarizationVerbosityInput

Entrada para evaluar la capacidad de una única respuesta para proporcionar un resumen conciso.

question_answering_quality_input

Opcional: QuestionAnsweringQualityInput

Entrada para evaluar la capacidad general de una respuesta para responder a preguntas, dado un cuerpo de texto de referencia.

pairwise_question_answering_quality_input

Opcional: PairwiseQuestionAnsweringQualityInput

Campo de entrada para comparar la capacidad general de dos respuestas para responder preguntas, dado un cuerpo de texto de referencia.

question_answering_relevance_input

Opcional: QuestionAnsweringRelevanceInput

Entrada para evaluar la capacidad de una sola respuesta de proporcionar información relevante cuando se le hace una pregunta.

question_answering_helpfulness_input

Opcional: QuestionAnsweringHelpfulnessInput

Entrada para evaluar la capacidad de una sola respuesta de proporcionar detalles clave al responder a una pregunta.

question_answering_correctness_input

Opcional: QuestionAnsweringCorrectnessInput

Entrada para evaluar la capacidad de una sola respuesta para responder correctamente a una pregunta.

pointwise_metric_input

Opcional: PointwiseMetricInput

Entrada para una evaluación genérica punto a punto.

pairwise_metric_input

Opcional: PairwiseMetricInput

Entrada para una evaluación genérica por pares.

tool_call_valid_input

Opcional: ToolCallValidInput

Entrada para evaluar la capacidad de una sola respuesta para predecir una llamada a herramienta válida.

tool_name_match_input

Opcional: ToolNameMatchInput

Entrada para evaluar la capacidad de una sola respuesta de predecir una llamada a una herramienta con el nombre de herramienta correcto.

tool_parameter_key_match_input

Opcional: ToolParameterKeyMatchInput

Entrada para evaluar la capacidad de una sola respuesta de predecir una llamada a una herramienta con nombres de parámetros correctos.

tool_parameter_kv_match_input

Opcional: ToolParameterKvMatchInput

Entrada para evaluar la capacidad de una sola respuesta de predecir una llamada a herramienta con nombres y valores de parámetros correctos

comet_input

Opcional: CometInput

Entrada que se va a evaluar con COMET.

metricx_input

Opcional: MetricxInput

Entrada que se va a evaluar con MetricX.

ExactMatchInput

{
  "exact_match_input": {
    "metric_spec": {},
    "instances": [
      {
        "prediction": string,
        "reference": string
      }
    ]
  }
}
Parámetros

metric_spec

Opcional: ExactMatchSpec.

Especificación de la métrica, que define su comportamiento.

instances

Opcional: ExactMatchInstance[]

Entrada de evaluación, que consta de la respuesta del LLM y la referencia.

instances.prediction

Opcional: string

Respuesta del LLM.

instances.reference

Opcional: string

Respuesta de LLM de referencia.

ExactMatchResults

{
  "exact_match_results": {
    "exact_match_metric_values": [
      {
        "score": float
      }
    ]
  }
}
Salida

exact_match_metric_values

ExactMatchMetricValue[]

Resultados de la evaluación por entrada de instancia.

exact_match_metric_values.score

float

Uno de los siguientes:

  • 0: la instancia no era una coincidencia exacta
  • 1: Concordancia exacta

BleuInput

{
  "bleu_input": {
    "metric_spec": {
      "use_effective_order": bool
    },
    "instances": [
      {
        "prediction": string,
        "reference": string
      }
    ]
  }
}
Parámetros

metric_spec

Opcional: BleuSpec

Especificación de la métrica, que define su comportamiento.

metric_spec.use_effective_order

Opcional: bool

Si se deben tener en cuenta los órdenes de n-gramas sin ninguna coincidencia.

instances

Opcional: BleuInstance[]

Entrada de evaluación, que consta de la respuesta del LLM y la referencia.

instances.prediction

Opcional: string

Respuesta del LLM.

instances.reference

Opcional: string

Respuesta de LLM de referencia.

BleuResults

{
  "bleu_results": {
    "bleu_metric_values": [
      {
        "score": float
      }
    ]
  }
}
Salida

bleu_metric_values

BleuMetricValue[]

Resultados de la evaluación por entrada de instancia.

bleu_metric_values.score

float: [0, 1], donde las puntuaciones más altas significan que la predicción se parece más a la referencia.

RougeInput

{
  "rouge_input": {
    "metric_spec": {
      "rouge_type": string,
      "use_stemmer": bool,
      "split_summaries": bool
    },
    "instances": [
      {
        "prediction": string,
        "reference": string
      }
    ]
  }
}
Parámetros

metric_spec

Opcional: RougeSpec

Especificación de la métrica, que define su comportamiento.

metric_spec.rouge_type

Opcional: string

Valores aceptables:

  • rougen[1-9]: calcula las puntuaciones rouge en función de la superposición de n-gramas entre la predicción y la referencia.
  • rougeL: calcula las puntuaciones rouge en función de la subsecuencia común más larga (LCS) entre la predicción y la referencia.
  • rougeLsum: primero divide la predicción y la referencia en frases y, a continuación, calcula la LCS de cada tupla. La rougeLsum final es la media de estas puntuaciones de LCS individuales.

metric_spec.use_stemmer

Opcional: bool

Indica si se debe usar el lematizador Porter para eliminar los sufijos de las palabras y mejorar la coincidencia.

metric_spec.split_summaries

Opcional: bool

Si se deben añadir saltos de línea entre frases para rougeLsum.

instances

Opcional: RougeInstance[]

Entrada de evaluación, que consta de la respuesta del LLM y la referencia.

instances.prediction

Opcional: string

Respuesta del LLM.

instances.reference

Opcional: string

Respuesta de LLM de referencia.

RougeResults

{
  "rouge_results": {
    "rouge_metric_values": [
      {
        "score": float
      }
    ]
  }
}
Salida

rouge_metric_values

RougeValue[]

Resultados de la evaluación por entrada de instancia.

rouge_metric_values.score

float: [0, 1], donde las puntuaciones más altas significan que la predicción se parece más a la referencia.

FluencyInput

{
  "fluency_input": {
    "metric_spec": {},
    "instance": {
      "prediction": string
    }
  }
}
Parámetros

metric_spec

Opcional: FluencySpec

Especificación de la métrica, que define su comportamiento.

instance

Opcional: FluencyInstance

Entrada de evaluación, que consiste en la respuesta del LLM.

instance.prediction

Opcional: string

Respuesta del LLM.

FluencyResult

{
  "fluency_result": {
    "score": float,
    "explanation": string,
    "confidence": float
  }
}
Salida

score

float: una de las siguientes opciones:

  • 1: inarticulado
  • 2: algo inarticulado
  • 3: neutral
  • 4: Algo fluido
  • 5: Fluido

explanation

string: justificación de la asignación de la puntuación.

confidence

float: [0, 1] puntuación de confianza de nuestro resultado.

CoherenceInput

{
  "coherence_input": {
    "metric_spec": {},
    "instance": {
      "prediction": string
    }
  }
}
Parámetros

metric_spec

Opcional: CoherenceSpec

Especificación de la métrica, que define su comportamiento.

instance

Opcional: CoherenceInstance

Entrada de evaluación, que consiste en la respuesta del LLM.

instance.prediction

Opcional: string

Respuesta del LLM.

CoherenceResult

{
  "coherence_result": {
    "score": float,
    "explanation": string,
    "confidence": float
  }
}
Salida

score

float: una de las siguientes opciones:

  • 1: Incoherente
  • 2: algo incoherente
  • 3: neutral
  • 4: algo coherente
  • 5: coherente

explanation

string: justificación de la asignación de la puntuación.

confidence

float: [0, 1] puntuación de confianza de nuestro resultado.

SafetyInput

{
  "safety_input": {
    "metric_spec": {},
    "instance": {
      "prediction": string
    }
  }
}
Parámetros

metric_spec

Opcional: SafetySpec

Especificación de la métrica, que define su comportamiento.

instance

Opcional: SafetyInstance

Entrada de evaluación, que consiste en la respuesta del LLM.

instance.prediction

Opcional: string

Respuesta del LLM.

SafetyResult

{
  "safety_result": {
    "score": float,
    "explanation": string,
    "confidence": float
  }
}
Salida

score

float: una de las siguientes opciones:

  • 0: no seguro
  • 1: seguro

explanation

string: justificación de la asignación de la puntuación.

confidence

float: [0, 1] puntuación de confianza de nuestro resultado.

GroundednessInput

{
  "groundedness_input": {
    "metric_spec": {},
    "instance": {
      "prediction": string,
      "context": string
    }
  }
}

Parámetro

Descripción

metric_spec

Opcional: GroundednessSpec

Especificación de la métrica, que define su comportamiento.

instance

Opcional: GroundednessInstance

Entrada de evaluación, que consta de entradas de inferencia y la respuesta correspondiente.

instance.prediction

Opcional: string

Respuesta del LLM.

instance.context

Opcional: string

Texto de tiempo de inferencia que contiene toda la información y que se puede usar en la respuesta del LLM.

GroundednessResult

{
  "groundedness_result": {
    "score": float,
    "explanation": string,
    "confidence": float
  }
}
Salida

score

float: una de las siguientes opciones:

  • 0: sin fundamento
  • 1: Grounded

explanation

string: justificación de la asignación de la puntuación.

confidence

float: [0, 1] puntuación de confianza de nuestro resultado.

FulfillmentInput

{
  "fulfillment_input": {
    "metric_spec": {},
    "instance": {
      "prediction": string,
      "instruction": string
    }
  }
}
Parámetros

metric_spec

Opcional: FulfillmentSpec

Especificación de la métrica, que define su comportamiento.

instance

Opcional: FulfillmentInstance

Entrada de evaluación, que consta de entradas de inferencia y la respuesta correspondiente.

instance.prediction

Opcional: string

Respuesta del LLM.

instance.instruction

Opcional: string

Instrucción utilizada en el momento de la inferencia.

FulfillmentResult

{
  "fulfillment_result": {
    "score": float,
    "explanation": string,
    "confidence": float
  }
}
Salida

score

float: una de las siguientes opciones:

  • 1: No fulfillment
  • 2: Cumplimiento deficiente
  • 3: Some fulfillment
  • 4: Cumplimiento adecuado
  • 5: completar el pedido

explanation

string: justificación de la asignación de la puntuación.

confidence

float: [0, 1] puntuación de confianza de nuestro resultado.

SummarizationQualityInput

{
  "summarization_quality_input": {
    "metric_spec": {},
    "instance": {
      "prediction": string,
      "instruction": string,
      "context": string,
    }
  }
}
Parámetros

metric_spec

Opcional: SummarizationQualitySpec

Especificación de la métrica, que define su comportamiento.

instance

Opcional: SummarizationQualityInstance

Entrada de evaluación, que consta de entradas de inferencia y la respuesta correspondiente.

instance.prediction

Opcional: string

Respuesta del LLM.

instance.instruction

Opcional: string

Instrucción utilizada en el momento de la inferencia.

instance.context

Opcional: string

Texto de tiempo de inferencia que contiene toda la información y que se puede usar en la respuesta del LLM.

SummarizationQualityResult

{
  "summarization_quality_result": {
    "score": float,
    "explanation": string,
    "confidence": float
  }
}
Salida

score

float: una de las siguientes opciones:

  • 1: Muy mala
  • 2: incorrecto
  • 3: De acuerdo
  • 4: buena
  • 5: Muy buena

explanation

string: justificación de la asignación de la puntuación.

confidence

float: [0, 1] puntuación de confianza de nuestro resultado.

PairwiseSummarizationQualityInput

{
  "pairwise_summarization_quality_input": {
    "metric_spec": {},
    "instance": {
      "baseline_prediction": string,
      "prediction": string,
      "instruction": string,
      "context": string,
    }
  }
}
Parámetros

metric_spec

Opcional: PairwiseSummarizationQualitySpec

Especificación de la métrica, que define su comportamiento.

instance

Opcional: PairwiseSummarizationQualityInstance

Entrada de evaluación, que consta de entradas de inferencia y la respuesta correspondiente.

instance.baseline_prediction

Opcional: string

Respuesta del LLM del modelo de referencia.

instance.prediction

Opcional: string

Respuesta del LLM del modelo candidato.

instance.instruction

Opcional: string

Instrucción utilizada en el momento de la inferencia.

instance.context

Opcional: string

Texto de tiempo de inferencia que contiene toda la información y que se puede usar en la respuesta del LLM.

PairwiseSummarizationQualityResult

{
  "pairwise_summarization_quality_result": {
    "pairwise_choice": PairwiseChoice,
    "explanation": string,
    "confidence": float
  }
}
Salida

pairwise_choice

PairwiseChoice: enum con los siguientes valores posibles:

  • BASELINE: la predicción de referencia es mejor
  • CANDIDATE: la predicción de candidatos es mejor
  • TIE: empate entre las predicciones de la línea de base y las candidatas.

explanation

string: justificación de la asignación de pairwise_choice.

confidence

float: [0, 1] puntuación de confianza de nuestro resultado.

SummarizationHelpfulnessInput

{
  "summarization_helpfulness_input": {
    "metric_spec": {},
    "instance": {
      "prediction": string,
      "instruction": string,
      "context": string,
    }
  }
}
Parámetros

metric_spec

Opcional: SummarizationHelpfulnessSpec

Especificación de la métrica, que define su comportamiento.

instance

Opcional: SummarizationHelpfulnessInstance

Entrada de evaluación, que consta de entradas de inferencia y la respuesta correspondiente.

instance.prediction

Opcional: string

Respuesta del LLM.

instance.instruction

Opcional: string

Instrucción utilizada en el momento de la inferencia.

instance.context

Opcional: string

Texto de tiempo de inferencia que contiene toda la información y que se puede usar en la respuesta del LLM.

SummarizationHelpfulnessResult

{
  "summarization_helpfulness_result": {
    "score": float,
    "explanation": string,
    "confidence": float
  }
}
Salida

score

float: una de las siguientes opciones:

  • 1: No útil
  • 2: Poco útil
  • 3: neutral
  • 4: Algo útil
  • 5: útil

explanation

string: justificación de la asignación de la puntuación.

confidence

float: [0, 1] puntuación de confianza de nuestro resultado.

SummarizationVerbosityInput

{
  "summarization_verbosity_input": {
    "metric_spec": {},
    "instance": {
      "prediction": string,
      "instruction": string,
      "context": string,
    }
  }
}
Parámetros

metric_spec

Opcional: SummarizationVerbositySpec

Especificación de la métrica, que define su comportamiento.

instance

Opcional: SummarizationVerbosityInstance

Entrada de evaluación, que consta de entradas de inferencia y la respuesta correspondiente.

instance.prediction

Opcional: string

Respuesta del LLM.

instance.instruction

Opcional: string

Instrucción utilizada en el momento de la inferencia.

instance.context

Opcional: string

Texto de tiempo de inferencia que contiene toda la información y que se puede usar en la respuesta del LLM.

SummarizationVerbosityResult

{
  "summarization_verbosity_result": {
    "score": float,
    "explanation": string,
    "confidence": float
  }
}
Salida

score

float. Una de las siguientes opciones:

  • -2: Concisa
  • -1: algo lacónico
  • 0: óptima
  • 1: algo detallado
  • 2: detallado

explanation

string: justificación de la asignación de la puntuación.

confidence

float: [0, 1] puntuación de confianza de nuestro resultado.

QuestionAnsweringQualityInput

{
  "question_answering_quality_input": {
    "metric_spec": {},
    "instance": {
      "prediction": string,
      "instruction": string,
      "context": string,
    }
  }
}
Parámetros

metric_spec

Opcional: QuestionAnsweringQualitySpec

Especificación de la métrica, que define su comportamiento.

instance

Opcional: QuestionAnsweringQualityInstance

Entrada de evaluación, que consta de entradas de inferencia y la respuesta correspondiente.

instance.prediction

Opcional: string

Respuesta del LLM.

instance.instruction

Opcional: string

Instrucción utilizada en el momento de la inferencia.

instance.context

Opcional: string

Texto de tiempo de inferencia que contiene toda la información y que se puede usar en la respuesta del LLM.

QuestionAnsweringQualityResult

{
  "question_answering_quality_result": {
    "score": float,
    "explanation": string,
    "confidence": float
  }
}
Salida

score

float: una de las siguientes opciones:

  • 1: Muy mala
  • 2: incorrecto
  • 3: De acuerdo
  • 4: buena
  • 5: Muy buena

explanation

string: justificación de la asignación de la puntuación.

confidence

float: [0, 1] puntuación de confianza de nuestro resultado.

PairwiseQuestionAnsweringQualityInput

{
  "pairwise_question_answering_quality_input": {
    "metric_spec": {},
    "instance": {
      "baseline_prediction": string,
      "prediction": string,
      "instruction": string,
      "context": string
    }
  }
}
Parámetros

metric_spec

Opcional: QuestionAnsweringQualitySpec

Especificación de la métrica, que define su comportamiento.

instance

Opcional: QuestionAnsweringQualityInstance

Entrada de evaluación, que consta de entradas de inferencia y la respuesta correspondiente.

instance.baseline_prediction

Opcional: string

Respuesta del LLM del modelo de referencia.

instance.prediction

Opcional: string

Respuesta del LLM del modelo candidato.

instance.instruction

Opcional: string

Instrucción utilizada en el momento de la inferencia.

instance.context

Opcional: string

Texto de tiempo de inferencia que contiene toda la información y que se puede usar en la respuesta del LLM.

PairwiseQuestionAnsweringQualityResult

{
  "pairwise_question_answering_quality_result": {
    "pairwise_choice": PairwiseChoice,
    "explanation": string,
    "confidence": float
  }
}
Salida

pairwise_choice

PairwiseChoice: enum con los siguientes valores posibles:

  • BASELINE: la predicción de referencia es mejor
  • CANDIDATE: la predicción de candidatos es mejor
  • TIE: empate entre las predicciones de la línea de base y las candidatas.

explanation

string: justificación de la asignación de pairwise_choice.

confidence

float: [0, 1] puntuación de confianza de nuestro resultado.

QuestionAnsweringRelevanceInput

{
  "question_answering_quality_input": {
    "metric_spec": {},
    "instance": {
      "prediction": string,
      "instruction": string,
      "context": string
    }
  }
}
Parámetros

metric_spec

Opcional: QuestionAnsweringRelevanceSpec

Especificación de la métrica, que define su comportamiento.

instance

Opcional: QuestionAnsweringRelevanceInstance

Entrada de evaluación, que consta de entradas de inferencia y la respuesta correspondiente.

instance.prediction

Opcional: string

Respuesta del LLM.

instance.instruction

Opcional: string

Instrucción utilizada en el momento de la inferencia.

instance.context

Opcional: string

Texto de tiempo de inferencia que contiene toda la información y que se puede usar en la respuesta del LLM.

QuestionAnsweringRelevancyResult

{
  "question_answering_relevancy_result": {
    "score": float,
    "explanation": string,
    "confidence": float
  }
}
Salida

score

float: una de las siguientes opciones:

  • 1: No pertinente
  • 2: Poca relevancia
  • 3: neutral
  • 4: algo relevante
  • 5: relevante

explanation

string: justificación de la asignación de la puntuación.

confidence

float: [0, 1] puntuación de confianza de nuestro resultado.

QuestionAnsweringHelpfulnessInput

{
  "question_answering_helpfulness_input": {
    "metric_spec": {},
    "instance": {
      "prediction": string,
      "instruction": string,
      "context": string
    }
  }
}
Parámetros

metric_spec

Opcional: QuestionAnsweringHelpfulnessSpec

Especificación de la métrica, que define su comportamiento.

instance

Opcional: QuestionAnsweringHelpfulnessInstance

Entrada de evaluación, que consta de entradas de inferencia y la respuesta correspondiente.

instance.prediction

Opcional: string

Respuesta del LLM.

instance.instruction

Opcional: string

Instrucción utilizada en el momento de la inferencia.

instance.context

Opcional: string

Texto de tiempo de inferencia que contiene toda la información y que se puede usar en la respuesta del LLM.

QuestionAnsweringHelpfulnessResult

{
  "question_answering_helpfulness_result": {
    "score": float,
    "explanation": string,
    "confidence": float
  }
}
Salida

score

float: una de las siguientes opciones:

  • 1: No útil
  • 2: Poco útil
  • 3: neutral
  • 4: Algo útil
  • 5: útil

explanation

string: justificación de la asignación de la puntuación.

confidence

float: [0, 1] puntuación de confianza de nuestro resultado.

QuestionAnsweringCorrectnessInput

{
  "question_answering_correctness_input": {
    "metric_spec": {
      "use_reference": bool
    },
    "instance": {
      "prediction": string,
      "reference": string,
      "instruction": string,
      "context": string
    }
  }
}
Parámetros

metric_spec

Opcional: QuestionAnsweringCorrectnessSpec

Especificación de la métrica, que define su comportamiento.

metric_spec.use_reference

Opcional: bool

Si se usa o no una referencia en la evaluación.

instance

Opcional: QuestionAnsweringCorrectnessInstance

Entrada de evaluación, que consta de entradas de inferencia y la respuesta correspondiente.

instance.prediction

Opcional: string

Respuesta del LLM.

instance.reference

Opcional: string

Respuesta de LLM de referencia.

instance.instruction

Opcional: string

Instrucción utilizada en el momento de la inferencia.

instance.context

Opcional: string

Texto de tiempo de inferencia que contiene toda la información y que se puede usar en la respuesta del LLM.

QuestionAnsweringCorrectnessResult

{
  "question_answering_correctness_result": {
    "score": float,
    "explanation": string,
    "confidence": float
  }
}
Salida

score

float: una de las siguientes opciones:

  • 0: incorrecto
  • 1: Correcto

explanation

string: justificación de la asignación de la puntuación.

confidence

float: [0, 1] puntuación de confianza de nuestro resultado.

PointwiseMetricInput

{
  "pointwise_metric_input": {
    "metric_spec": {
      "metric_prompt_template": string
    },
    "instance": {
      "json_instance": string,
    }
  }
}
Parámetros

metric_spec

Obligatorio: PointwiseMetricSpec

Especificación de la métrica, que define su comportamiento.

metric_spec.metric_prompt_template

Obligatorio: string

Una plantilla de petición que define la métrica. Se renderiza mediante los pares clave-valor de instance.json_instance.

instance

Obligatorio: PointwiseMetricInstance

Entrada de evaluación, que consta de json_instance.

instance.json_instance

Opcional: string

Los pares clave-valor en formato JSON. Por ejemplo, {"key_1": "value_1", "key_2": "value_2"}. Se usa para renderizar metric_spec.metric_prompt_template.

PointwiseMetricResult

{
  "pointwise_metric_result": {
    "score": float,
    "explanation": string,
  }
}
Salida

score

float: puntuación del resultado de la evaluación de la métrica punto a punto.

explanation

string: justificación de la asignación de la puntuación.

PairwiseMetricInput

{
  "pairwise_metric_input": {
    "metric_spec": {
      "metric_prompt_template": string
    },
    "instance": {
      "json_instance": string,
    }
  }
}
Parámetros

metric_spec

Obligatorio: PairwiseMetricSpec

Especificación de la métrica, que define su comportamiento.

metric_spec.metric_prompt_template

Obligatorio: string

Una plantilla de petición que define la métrica. Se renderiza mediante los pares clave-valor de instance.json_instance.

instance

Obligatorio: PairwiseMetricInstance

Entrada de evaluación, que consta de json_instance.

instance.json_instance

Opcional: string

Los pares clave-valor en formato JSON. Por ejemplo, {"key_1": "value_1", "key_2": "value_2"}. Se usa para renderizar metric_spec.metric_prompt_template.

PairwiseMetricResult

{
  "pairwise_metric_result": {
    "score": float,
    "explanation": string,
  }
}
Salida

score

float: puntuación del resultado de la evaluación de métricas por pares.

explanation

string: justificación de la asignación de la puntuación.

ToolCallValidInput

{
  "tool_call_valid_input": {
    "metric_spec": {},
    "instance": {
      "prediction": string,
      "reference": string
    }
  }
}
Parámetros

metric_spec

Opcional: ToolCallValidSpec

Especificación de la métrica, que define su comportamiento.

instance

Opcional: ToolCallValidInstance

Entrada de evaluación, que consta de la respuesta del LLM y la referencia.

instance.prediction

Opcional: string

Respuesta del LLM del modelo candidato, que es una cadena serializada en JSON que contiene las claves content y tool_calls. El valor de content es el texto que genera el modelo. El valor tool_call es una cadena serializada en JSON de una lista de llamadas a herramientas. Por ejemplo:

{
  "content": "",
  "tool_calls": [
    {
      "name": "book_tickets",
      "arguments": {
        "movie": "Mission Impossible Dead Reckoning Part 1",
        "theater": "Regal Edwards 14",
        "location": "Mountain View CA",
        "showtime": "7:30",
        "date": "2024-03-30",
        "num_tix": "2"
      }
    }
  ]
}

instance.reference

Opcional: string

Salida del modelo de referencia con el mismo formato que la predicción.

ToolCallValidResults

{
  "tool_call_valid_results": {
    "tool_call_valid_metric_values": [
      {
        "score": float
      }
    ]
  }
}
Salida

tool_call_valid_metric_values

Repetido ToolCallValidMetricValue: resultados de la evaluación por entrada de instancia.

tool_call_valid_metric_values.score

float: una de las siguientes opciones:

  • 0: llamada a herramienta no válida
  • 1: llamada a herramienta válida

ToolNameMatchInput

{
  "tool_name_match_input": {
    "metric_spec": {},
    "instance": {
      "prediction": string,
      "reference": string
    }
  }
}
Parámetros

metric_spec

Opcional: ToolNameMatchSpec

Especificación de la métrica, que define su comportamiento.

instance

Opcional: ToolNameMatchInstance

Entrada de evaluación, que consta de la respuesta del LLM y la referencia.

instance.prediction

Opcional: string

Respuesta del LLM del modelo candidato, que es una cadena serializada en JSON que contiene las claves content y tool_calls. El valor de content es el texto que genera el modelo. El valor tool_call es una cadena serializada en JSON de una lista de llamadas a herramientas.

instance.reference

Opcional: string

Salida del modelo de referencia con el mismo formato que la predicción.

ToolNameMatchResults

{
  "tool_name_match_results": {
    "tool_name_match_metric_values": [
      {
        "score": float
      }
    ]
  }
}
Salida

tool_name_match_metric_values

Repetido ToolNameMatchMetricValue: resultados de la evaluación por entrada de instancia.

tool_name_match_metric_values.score

float: una de las siguientes opciones:

  • 0: El nombre de la llamada a la herramienta no coincide con la referencia.
  • 1: el nombre de la llamada a la herramienta coincide con la referencia.

ToolParameterKeyMatchInput

{
  "tool_parameter_key_match_input": {
    "metric_spec": {},
    "instance": {
      "prediction": string,
      "reference": string
    }
  }
}
Parámetros

metric_spec

Opcional: ToolParameterKeyMatchSpec

Especificación de la métrica, que define su comportamiento.

instance

Opcional: ToolParameterKeyMatchInstance

Entrada de evaluación, que consta de la respuesta del LLM y la referencia.

instance.prediction

Opcional: string

Respuesta del LLM del modelo candidato, que es una cadena serializada en JSON que contiene las claves content y tool_calls. El valor de content es el texto que genera el modelo. El valor tool_call es una cadena serializada en JSON de una lista de llamadas a herramientas.

instance.reference

Opcional: string

Salida del modelo de referencia con el mismo formato que la predicción.

ToolParameterKeyMatchResults

{
  "tool_parameter_key_match_results": {
    "tool_parameter_key_match_metric_values": [
      {
        "score": float
      }
    ]
  }
}
Salida

tool_parameter_key_match_metric_values

Repetido ToolParameterKeyMatchMetricValue: resultados de la evaluación por entrada de instancia.

tool_parameter_key_match_metric_values.score

float: [0, 1], donde las puntuaciones más altas significan que más parámetros coinciden con los nombres de los parámetros de referencia.

ToolParameterKVMatchInput

{
  "tool_parameter_kv_match_input": {
    "metric_spec": {},
    "instance": {
      "prediction": string,
      "reference": string
    }
  }
}
Parámetros

metric_spec

Opcional: ToolParameterKVMatchSpec

Especificación de la métrica, que define su comportamiento.

instance

Opcional: ToolParameterKVMatchInstance

Entrada de evaluación, que consta de la respuesta del LLM y la referencia.

instance.prediction

Opcional: string

Respuesta del LLM del modelo candidato, que es una cadena serializada en JSON que contiene las claves content y tool_calls. El valor de content es el texto que genera el modelo. El valor tool_call es una cadena serializada en JSON de una lista de llamadas a herramientas.

instance.reference

Opcional: string

Salida del modelo de referencia con el mismo formato que la predicción.

ToolParameterKVMatchResults

{
  "tool_parameter_kv_match_results": {
    "tool_parameter_kv_match_metric_values": [
      {
        "score": float
      }
    ]
  }
}
Salida

tool_parameter_kv_match_metric_values

Repetido ToolParameterKVMatchMetricValue: resultados de la evaluación por entrada de instancia.

tool_parameter_kv_match_metric_values.score

float: [0, 1], donde las puntuaciones más altas significan que más parámetros coinciden con los nombres y valores de los parámetros de referencia.

CometInput

{
  "comet_input" : {
    "metric_spec" : {
      "version": string
    },
    "instance": {
      "prediction": string,
      "source": string,
      "reference": string,
    },
  }
}
Parámetros

metric_spec

Opcional: CometSpec

Especificación de la métrica, que define su comportamiento.

metric_spec.version

Opcional: string

COMET_22_SRC_REF: COMET 22 para traducción, fuente y referencia. Evalúa la traducción (predicción) usando las tres entradas.

metric_spec.source_language

Opcional: string

Idioma de origen en formato BCP-47. Por ejemplo, "es".

metric_spec.target_language

Opcional: string

Idioma de destino en formato BCP-47. Por ejemplo, "es"

instance

Opcional: CometInstance

Entrada de evaluación, que consta de la respuesta del LLM y la referencia. Los campos exactos que se usan para la evaluación dependen de la versión de COMET.

instance.prediction

Opcional: string

Respuesta del LLM del modelo candidato. Es el resultado del LLM que se está evaluando.

instance.source

Opcional: string

Texto de origen. Este es el idioma original del que se ha traducido la predicción.

instance.reference

Opcional: string

Validación en el terreno usada para comparar con la predicción. Está en el mismo idioma que la predicción.

CometResult

{
  "comet_result" : {
    "score": float
  }
}
Salida

score

float: [0, 1], donde 1 representa una traducción perfecta.

MetricxInput

{
  "metricx_input" : {
    "metric_spec" : {
      "version": string
    },
    "instance": {
      "prediction": string,
      "source": string,
      "reference": string,
    },
  }
}
Parámetros

metric_spec

Opcional: MetricxSpec

Especificación de la métrica, que define el comportamiento de la métrica.

metric_spec.version

Optional:

string

Uno de los siguientes:

  • METRICX_24_REF: MetricX 24 para traducción y referencia. Evalúa la predicción (traducción) comparándola con el texto de referencia proporcionado.
  • METRICX_24_SRC: MetricX 24 para la traducción y la fuente. Evalúa la traducción (predicción) mediante la estimación de la calidad (QE) sin necesidad de introducir un texto de referencia.
  • METRICX_24_SRC_REF: MetricX 24 para traducción, fuente y referencia. Evalúa la traducción (predicción) usando las tres entradas.

metric_spec.source_language

Opcional: string

Idioma de origen en formato BCP-47. Por ejemplo, "es".

metric_spec.target_language

Opcional: string

Idioma de destino en formato BCP-47. Por ejemplo, "es".

instance

Opcional: MetricxInstance

Entrada de evaluación, que consta de la respuesta del LLM y la referencia. Los campos exactos que se usan para la evaluación dependen de la versión de MetricX.

instance.prediction

Opcional: string

Respuesta del LLM del modelo candidato. Es el resultado del LLM que se está evaluando.

instance.source

Opcional: string

Texto de origen en el idioma original del que se ha traducido la predicción.

instance.reference

Opcional: string

Validación en el terreno usada para comparar con la predicción. Está en el mismo idioma que la predicción.

MetricxResult

{
  "metricx_result" : {
    "score": float
  }
}
Salida

score

float: [0, 25], donde 0 representa una traducción perfecta.

Ejemplos

Evaluar un resultado

En el siguiente ejemplo se muestra cómo llamar a la API Gen AI Evaluation para evaluar el resultado de un LLM mediante varias métricas de evaluación, entre las que se incluyen las siguientes:

  • summarization_quality
  • groundedness
  • fulfillment
  • summarization_helpfulness
  • summarization_verbosity

Python

import pandas as pd

import vertexai
from vertexai.preview.evaluation import EvalTask, MetricPromptTemplateExamples

# TODO(developer): Update and un-comment below line
# PROJECT_ID = "your-project-id"
vertexai.init(project=PROJECT_ID, location="us-central1")

eval_dataset = pd.DataFrame(
    {
        "instruction": [
            "Summarize the text in one sentence.",
            "Summarize the text such that a five-year-old can understand.",
        ],
        "context": [
            """As part of a comprehensive initiative to tackle urban congestion and foster
            sustainable urban living, a major city has revealed ambitious plans for an
            extensive overhaul of its public transportation system. The project aims not
            only to improve the efficiency and reliability of public transit but also to
            reduce the city\'s carbon footprint and promote eco-friendly commuting options.
            City officials anticipate that this strategic investment will enhance
            accessibility for residents and visitors alike, ushering in a new era of
            efficient, environmentally conscious urban transportation.""",
            """A team of archaeologists has unearthed ancient artifacts shedding light on a
            previously unknown civilization. The findings challenge existing historical
            narratives and provide valuable insights into human history.""",
        ],
        "response": [
            "A major city is revamping its public transportation system to fight congestion, reduce emissions, and make getting around greener and easier.",
            "Some people who dig for old things found some very special tools and objects that tell us about people who lived a long, long time ago! What they found is like a new puzzle piece that helps us understand how people used to live.",
        ],
    }
)

eval_task = EvalTask(
    dataset=eval_dataset,
    metrics=[
        MetricPromptTemplateExamples.Pointwise.SUMMARIZATION_QUALITY,
        MetricPromptTemplateExamples.Pointwise.GROUNDEDNESS,
        MetricPromptTemplateExamples.Pointwise.VERBOSITY,
        MetricPromptTemplateExamples.Pointwise.INSTRUCTION_FOLLOWING,
    ],
)

prompt_template = (
    "Instruction: {instruction}. Article: {context}. Summary: {response}"
)
result = eval_task.evaluate(prompt_template=prompt_template)

print("Summary Metrics:\n")

for key, value in result.summary_metrics.items():
    print(f"{key}: \t{value}")

print("\n\nMetrics Table:\n")
print(result.metrics_table)
# Example response:
# Summary Metrics:
# row_count:      2
# summarization_quality/mean:     3.5
# summarization_quality/std:      2.1213203435596424
# ...

Go

import (
	context_pkg "context"
	"fmt"
	"io"

	aiplatform "cloud.google.com/go/aiplatform/apiv1beta1"
	aiplatformpb "cloud.google.com/go/aiplatform/apiv1beta1/aiplatformpb"
	"google.golang.org/api/option"
)

// evaluateModelResponse evaluates the output of an LLM for groundedness, i.e., how well
// the model response connects with verifiable sources of information
func evaluateModelResponse(w io.Writer, projectID, location string) error {
	// location = "us-central1"
	ctx := context_pkg.Background()
	apiEndpoint := fmt.Sprintf("%s-aiplatform.googleapis.com:443", location)
	client, err := aiplatform.NewEvaluationClient(ctx, option.WithEndpoint(apiEndpoint))

	if err != nil {
		return fmt.Errorf("unable to create aiplatform client: %w", err)
	}
	defer client.Close()

	// evaluate the pre-generated model response against the reference (ground truth)
	responseToEvaluate := `
The city is undertaking a major project to revamp its public transportation system.
This initiative is designed to improve efficiency, reduce carbon emissions, and promote
eco-friendly commuting. The city expects that this investment will enhance accessibility
and usher in a new era of sustainable urban transportation.
`
	reference := `
As part of a comprehensive initiative to tackle urban congestion and foster
sustainable urban living, a major city has revealed ambitious plans for an
extensive overhaul of its public transportation system. The project aims not
only to improve the efficiency and reliability of public transit but also to
reduce the city\'s carbon footprint and promote eco-friendly commuting options.
City officials anticipate that this strategic investment will enhance
accessibility for residents and visitors alike, ushering in a new era of
efficient, environmentally conscious urban transportation.
`
	req := aiplatformpb.EvaluateInstancesRequest{
		Location: fmt.Sprintf("projects/%s/locations/%s", projectID, location),
		// Check the API reference for a full list of supported metric inputs:
		// https://cloud.google.com/vertex-ai/docs/reference/rpc/google.cloud.aiplatform.v1beta1#evaluateinstancesrequest
		MetricInputs: &aiplatformpb.EvaluateInstancesRequest_GroundednessInput{
			GroundednessInput: &aiplatformpb.GroundednessInput{
				MetricSpec: &aiplatformpb.GroundednessSpec{},
				Instance: &aiplatformpb.GroundednessInstance{
					Context:    &reference,
					Prediction: &responseToEvaluate,
				},
			},
		},
	}

	resp, err := client.EvaluateInstances(ctx, &req)
	if err != nil {
		return fmt.Errorf("evaluateInstances failed: %v", err)
	}

	results := resp.GetGroundednessResult()
	fmt.Fprintf(w, "score: %.2f\n", results.GetScore())
	fmt.Fprintf(w, "confidence: %.2f\n", results.GetConfidence())
	fmt.Fprintf(w, "explanation:\n%s\n", results.GetExplanation())
	// Example response:
	// score: 1.00
	// confidence: 1.00
	// explanation:
	// STEP 1: All aspects of the response are found in the context.
	// The response accurately summarizes the city's plan to overhaul its public transportation system, highlighting the goals of ...
	// STEP 2: According to the rubric, the response is scored 1 because all aspects of the response are attributable to the context.

	return nil
}

Evaluar un resultado: calidad de la resumen por pares

En el siguiente ejemplo se muestra cómo llamar a la API del servicio de evaluación de IA generativa para evaluar el resultado de un LLM mediante una comparación de calidad de resumen por pares.

REST

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • PROJECT_ID: .
  • LOCATION: la región en la que se procesará la solicitud.
  • PREDICTION: respuesta del LLM.
  • BASELINE_PREDICTION: respuesta del LLM del modelo de base.
  • INSTRUCTION: la instrucción usada durante la inferencia.
  • CONTEXT: texto en tiempo de inferencia que contiene toda la información pertinente y que se puede usar en la respuesta del LLM.

Método HTTP y URL:

POST https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID-/locations/LOCATION:evaluateInstances \

Cuerpo JSON de la solicitud:

{
  "pairwise_summarization_quality_input": {
    "metric_spec": {},
    "instance": {
      "prediction": "PREDICTION",
      "baseline_prediction": "BASELINE_PREDICTION",
      "instruction": "INSTRUCTION",
      "context": "CONTEXT",
    }
  }
}

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://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID-/locations/LOCATION:evaluateInstances \"

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://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID-/locations/LOCATION:evaluateInstances \" | Select-Object -Expand Content

Python

Python

Para saber cómo instalar o actualizar el SDK de Vertex AI para Python, consulta Instalar el SDK de Vertex AI para Python. Para obtener más información, consulta la documentación de referencia de la API Python.

import pandas as pd

import vertexai
from vertexai.generative_models import GenerativeModel
from vertexai.evaluation import (
    EvalTask,
    PairwiseMetric,
    MetricPromptTemplateExamples,
)

# TODO(developer): Update & uncomment line below
# PROJECT_ID = "your-project-id"
vertexai.init(project=PROJECT_ID, location="us-central1")

prompt = """
Summarize the text such that a five-year-old can understand.

# Text

As part of a comprehensive initiative to tackle urban congestion and foster
sustainable urban living, a major city has revealed ambitious plans for an
extensive overhaul of its public transportation system. The project aims not
only to improve the efficiency and reliability of public transit but also to
reduce the city\'s carbon footprint and promote eco-friendly commuting options.
City officials anticipate that this strategic investment will enhance
accessibility for residents and visitors alike, ushering in a new era of
efficient, environmentally conscious urban transportation.
"""

eval_dataset = pd.DataFrame({"prompt": [prompt]})

# Baseline model for pairwise comparison
baseline_model = GenerativeModel("gemini-2.0-flash-lite-001")

# Candidate model for pairwise comparison
candidate_model = GenerativeModel(
    "gemini-2.0-flash-001", generation_config={"temperature": 0.4}
)

prompt_template = MetricPromptTemplateExamples.get_prompt_template(
    "pairwise_summarization_quality"
)

summarization_quality_metric = PairwiseMetric(
    metric="pairwise_summarization_quality",
    metric_prompt_template=prompt_template,
    baseline_model=baseline_model,
)

eval_task = EvalTask(
    dataset=eval_dataset,
    metrics=[summarization_quality_metric],
    experiment="pairwise-experiment",
)
result = eval_task.evaluate(model=candidate_model)

baseline_model_response = result.metrics_table["baseline_model_response"].iloc[0]
candidate_model_response = result.metrics_table["response"].iloc[0]
winner_model = result.metrics_table[
    "pairwise_summarization_quality/pairwise_choice"
].iloc[0]
explanation = result.metrics_table[
    "pairwise_summarization_quality/explanation"
].iloc[0]

print(f"Baseline's story:\n{baseline_model_response}")
print(f"Candidate's story:\n{candidate_model_response}")
print(f"Winner: {winner_model}")
print(f"Explanation: {explanation}")
# Example response:
# Baseline's story:
# A big city wants to make it easier for people to get around without using cars! They're going to make buses and trains ...
#
# Candidate's story:
# A big city wants to make it easier for people to get around without using cars! ... This will help keep the air clean ...
#
# Winner: CANDIDATE
# Explanation: Both responses adhere to the prompt's constraints, are grounded in the provided text, and ... However, Response B ...

Go

Go

Antes de probar este ejemplo, sigue las Go instrucciones de configuración de la guía de inicio rápido de Vertex AI con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Go de Vertex AI.

Para autenticarte en Vertex AI, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.

import (
	context_pkg "context"
	"fmt"
	"io"

	aiplatform "cloud.google.com/go/aiplatform/apiv1beta1"
	aiplatformpb "cloud.google.com/go/aiplatform/apiv1beta1/aiplatformpb"
	"google.golang.org/api/option"
)

// pairwiseEvaluation lets the judge model to compare the responses of two models and pick the better one
func pairwiseEvaluation(w io.Writer, projectID, location string) error {
	// location = "us-central1"
	ctx := context_pkg.Background()
	apiEndpoint := fmt.Sprintf("%s-aiplatform.googleapis.com:443", location)
	client, err := aiplatform.NewEvaluationClient(ctx, option.WithEndpoint(apiEndpoint))

	if err != nil {
		return fmt.Errorf("unable to create aiplatform client: %w", err)
	}
	defer client.Close()

	context := `
As part of a comprehensive initiative to tackle urban congestion and foster
sustainable urban living, a major city has revealed ambitious plans for an
extensive overhaul of its public transportation system. The project aims not
only to improve the efficiency and reliability of public transit but also to
reduce the city\'s carbon footprint and promote eco-friendly commuting options.
City officials anticipate that this strategic investment will enhance
accessibility for residents and visitors alike, ushering in a new era of
efficient, environmentally conscious urban transportation.
`
	instruction := "Summarize the text such that a five-year-old can understand."
	baselineResponse := `
The city wants to make it easier for people to get around without using cars.
They're going to make the buses and trains better and faster, so people will want to
use them more. This will help the air be cleaner and make the city a better place to live.
`
	candidateResponse := `
The city is making big changes to how people get around. They want to make the buses and
trains work better and be easier for everyone to use. This will also help the environment
by getting people to use less gas. The city thinks these changes will make it easier for
everyone to get where they need to go.
`

	req := aiplatformpb.EvaluateInstancesRequest{
		Location: fmt.Sprintf("projects/%s/locations/%s", projectID, location),
		MetricInputs: &aiplatformpb.EvaluateInstancesRequest_PairwiseSummarizationQualityInput{
			PairwiseSummarizationQualityInput: &aiplatformpb.PairwiseSummarizationQualityInput{
				MetricSpec: &aiplatformpb.PairwiseSummarizationQualitySpec{},
				Instance: &aiplatformpb.PairwiseSummarizationQualityInstance{
					Context:            &context,
					Instruction:        &instruction,
					Prediction:         &candidateResponse,
					BaselinePrediction: &baselineResponse,
				},
			},
		},
	}

	resp, err := client.EvaluateInstances(ctx, &req)
	if err != nil {
		return fmt.Errorf("evaluateInstances failed: %v", err)
	}

	results := resp.GetPairwiseSummarizationQualityResult()
	fmt.Fprintf(w, "choice: %s\n", results.GetPairwiseChoice())
	fmt.Fprintf(w, "confidence: %.2f\n", results.GetConfidence())
	fmt.Fprintf(w, "explanation:\n%s\n", results.GetExplanation())
	// Example response:
	// choice: BASELINE
	// confidence: 0.50
	// explanation:
	// BASELINE response is easier to understand. For example, the phrase "..." is easier to understand than "...". Thus, BASELINE response is ...

	return nil
}

Obtener la puntuación ROUGE

En el siguiente ejemplo se llama a la API del servicio de evaluación de la IA generativa para obtener la puntuación ROUGE de una predicción generada por una serie de entradas. Las entradas de ROUGE usan metric_spec, que determina el comportamiento de la métrica.

REST

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • PROJECT_ID: .
  • LOCATION: la región en la que se procesará la solicitud.
  • PREDICTION: respuesta del LLM.
  • REFERENCE: respuesta de LLM de referencia.
  • ROUGE_TYPE: cálculo que se usa para determinar la puntuación de Rogue. Consulta los valores aceptables en metric_spec.rouge_type.
  • USE_STEMMER: determina si se usa el lematizador Porter para eliminar los sufijos de las palabras y mejorar la coincidencia. Para ver los valores aceptables, consulta metric_spec.use_stemmer.
  • SPLIT_SUMMARIES: determina si se añaden líneas nuevas entre las frases de rougeLsum. Para ver los valores aceptables, consulta metric_spec.split_summaries .

Método HTTP y URL:

POST https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID-/locations/REGION:evaluateInstances \

Cuerpo JSON de la solicitud:

{
  "rouge_input": {
    "instances": {
      "prediction": "PREDICTION",
      "reference": "REFERENCE.",
    },
    "metric_spec": {
      "rouge_type": "ROUGE_TYPE",
      "use_stemmer": USE_STEMMER,
      "split_summaries": SPLIT_SUMMARIES,
    }
  }
}

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://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID-/locations/REGION:evaluateInstances \"

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://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID-/locations/REGION:evaluateInstances \" | Select-Object -Expand Content

Python

Python

Para saber cómo instalar o actualizar el SDK de Vertex AI para Python, consulta Instalar el SDK de Vertex AI para Python. Para obtener más información, consulta la documentación de referencia de la API Python.

import pandas as pd

import vertexai
from vertexai.preview.evaluation import EvalTask

# TODO(developer): Update & uncomment line below
# PROJECT_ID = "your-project-id"
vertexai.init(project=PROJECT_ID, location="us-central1")

reference_summarization = """
The Great Barrier Reef, the world's largest coral reef system, is
located off the coast of Queensland, Australia. It's a vast
ecosystem spanning over 2,300 kilometers with thousands of reefs
and islands. While it harbors an incredible diversity of marine
life, including endangered species, it faces serious threats from
climate change, ocean acidification, and coral bleaching."""

# Compare pre-generated model responses against the reference (ground truth).
eval_dataset = pd.DataFrame(
    {
        "response": [
            """The Great Barrier Reef, the world's largest coral reef system located
        in Australia, is a vast and diverse ecosystem. However, it faces serious
        threats from climate change, ocean acidification, and coral bleaching,
        endangering its rich marine life.""",
            """The Great Barrier Reef, a vast coral reef system off the coast of
        Queensland, Australia, is the world's largest. It's a complex ecosystem
        supporting diverse marine life, including endangered species. However,
        climate change, ocean acidification, and coral bleaching are serious
        threats to its survival.""",
            """The Great Barrier Reef, the world's largest coral reef system off the
        coast of Australia, is a vast and diverse ecosystem with thousands of
        reefs and islands. It is home to a multitude of marine life, including
        endangered species, but faces serious threats from climate change, ocean
        acidification, and coral bleaching.""",
        ],
        "reference": [reference_summarization] * 3,
    }
)
eval_task = EvalTask(
    dataset=eval_dataset,
    metrics=[
        "rouge_1",
        "rouge_2",
        "rouge_l",
        "rouge_l_sum",
    ],
)
result = eval_task.evaluate()

print("Summary Metrics:\n")
for key, value in result.summary_metrics.items():
    print(f"{key}: \t{value}")

print("\n\nMetrics Table:\n")
print(result.metrics_table)
# Example response:
#
# Summary Metrics:
#
# row_count:      3
# rouge_1/mean:   0.7191161666666667
# rouge_1/std:    0.06765143922270488
# rouge_2/mean:   0.5441118566666666
# ...
# Metrics Table:
#
#                                        response                         reference  ...  rouge_l/score  rouge_l_sum/score
# 0  The Great Barrier Reef, the world's ...  \n    The Great Barrier Reef, the ...  ...       0.577320           0.639175
# 1  The Great Barrier Reef, a vast coral...  \n    The Great Barrier Reef, the ...  ...       0.552381           0.666667
# 2  The Great Barrier Reef, the world's ...  \n    The Great Barrier Reef, the ...  ...       0.774775           0.774775

Go

Go

Antes de probar este ejemplo, sigue las Go instrucciones de configuración de la guía de inicio rápido de Vertex AI con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Go de Vertex AI.

Para autenticarte en Vertex AI, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.

import (
	"context"
	"fmt"
	"io"

	aiplatform "cloud.google.com/go/aiplatform/apiv1beta1"
	aiplatformpb "cloud.google.com/go/aiplatform/apiv1beta1/aiplatformpb"
	"google.golang.org/api/option"
)

// getROUGEScore evaluates a model response against a reference (ground truth) using the ROUGE metric
func getROUGEScore(w io.Writer, projectID, location string) error {
	// location = "us-central1"
	ctx := context.Background()
	apiEndpoint := fmt.Sprintf("%s-aiplatform.googleapis.com:443", location)
	client, err := aiplatform.NewEvaluationClient(ctx, option.WithEndpoint(apiEndpoint))

	if err != nil {
		return fmt.Errorf("unable to create aiplatform client: %w", err)
	}
	defer client.Close()

	modelResponse := `
The Great Barrier Reef, the world's largest coral reef system located in Australia,
is a vast and diverse ecosystem. However, it faces serious threats from climate change,
ocean acidification, and coral bleaching, endangering its rich marine life.
`
	reference := `
The Great Barrier Reef, the world's largest coral reef system, is
located off the coast of Queensland, Australia. It's a vast
ecosystem spanning over 2,300 kilometers with thousands of reefs
and islands. While it harbors an incredible diversity of marine
life, including endangered species, it faces serious threats from
climate change, ocean acidification, and coral bleaching.
`
	req := aiplatformpb.EvaluateInstancesRequest{
		Location: fmt.Sprintf("projects/%s/locations/%s", projectID, location),
		MetricInputs: &aiplatformpb.EvaluateInstancesRequest_RougeInput{
			RougeInput: &aiplatformpb.RougeInput{
				// Check the API reference for the list of supported ROUGE metric types:
				// https://cloud.google.com/vertex-ai/docs/reference/rpc/google.cloud.aiplatform.v1beta1#rougespec
				MetricSpec: &aiplatformpb.RougeSpec{
					RougeType: "rouge1",
				},
				Instances: []*aiplatformpb.RougeInstance{
					{
						Prediction: &modelResponse,
						Reference:  &reference,
					},
				},
			},
		},
	}

	resp, err := client.EvaluateInstances(ctx, &req)
	if err != nil {
		return fmt.Errorf("evaluateInstances failed: %v", err)
	}

	fmt.Fprintln(w, "evaluation results:")
	fmt.Fprintln(w, resp.GetRougeResults().GetRougeMetricValues())
	// Example response:
	// [score:0.6597938]

	return nil
}

Siguientes pasos