API de Gen AI Evaluation Service

El servicio de evaluación de IA generativa te permite evaluar tus modelos de lenguaje grandes (LLM) en varias métricas con tus propios criterios. Puedes proporcionar entradas de tiempo de inferencia, respuestas de LLM y parámetros adicionales, y Gen AI Evaluation Service muestra métricas específicas para la tarea de evaluación.

Las métricas incluyen métricas basadas en modelos, como PointwiseMetric y PairwiseMetric, y métricas calculadas en la memoria, como rouge, bleu y métricas de llamadas a funciones de herramientas. PointwiseMetric y PairwiseMetric son métricas genéricas basadas en modelos que puedes personalizar con tus propios criterios. Debido a que el servicio toma los resultados de la predicción directamente de los modelos como entrada, el servicio de evaluación puede realizar la inferencia y la evaluación posterior en todos los modelos compatibles con Vertex AI.

Para obtener más información acerca de cómo evaluar un modelo, consulta Descripción general del servicio de evaluación de IA generativa.

Limitaciones

Las siguientes son limitaciones del servicio de evaluación:

  • Es posible que el servicio de evaluación tenga una demora de propagación en tu primera llamada.
  • La mayoría de las métricas basadas en modelos consumen cuota de gemini-1.5-pro porque el servicio de evaluación de IA generativa aprovecha gemini-1.5-pro como el modelo de juez subyacente para calcular estas métricas basadas en modelos.
  • Algunas métricas basadas en modelos, como MetricX y COMET, usan diferentes modelos de aprendizaje automático, por lo que no consumen la cuota de gemini-1.5-pro.

Ejemplo de sintaxis

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/v1beta1/projects/${PROJECT_ID}/locations/${LOCATION}:evaluateInstances \
-d '{
  "contents": [{
    ...
  }],
  "tools": [{
    "function_declarations": [
      {
        ...
      }
    ]
  }]
}'

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/v1beta1/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 a través de la comparación de la predicción con la referencia.

rouge_input

Opcional: RougeInput

Entrada para calcular las puntuaciones rouge a través de la comparación de la predicción con la referencia. rouge_type admite diferentes puntuaciones de rouge.

fluency_input

Opcional: FluencyInput

Entrada para evaluar el dominio de idioma de una sola respuesta.

coherence_input

Opcional: CoherenceInput

Entrada para evaluar la capacidad de una sola respuesta de proporcionar una respuesta 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 solo en el texto de entrada.

fulfillment_input

Opcional: FulfillmentInput

Entrada para evaluar la capacidad de una sola respuesta de cumplir instrucciones por completo.

summarization_quality_input

Opcional: SummarizationQualityInput

Entrada para evaluar la capacidad general de una sola respuesta para resumir texto.

pairwise_summarization_quality_input

Opcional: PairwiseSummarizationQualityInput

Entrada para comparar la calidad general de resumen de dos respuestas.

summarization_helpfulness_input

Opcional: SummarizationHelpfulnessInput

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

summarization_verbosity_input

Opcional: SummarizationVerbosityInput

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

question_answering_quality_input

Opcional: QuestionAnsweringQualityInput

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

pairwise_question_answering_quality_input

Opcional: PairwiseQuestionAnsweringQualityInput

Entrada para comparar la capacidad general de dos respuestas para responder preguntas, con un cuerpo de texto de referencia.

question_answering_relevance_input

Opcional: QuestionAnsweringRelevanceInput

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

question_answering_helpfulness_input

Opcional: QuestionAnsweringHelpfulnessInput

Entrada para evaluar la capacidad de una sola respuesta de proporcionar detalles clave cuando se responde una pregunta.

question_answering_correctness_input

Opcional: QuestionAnsweringCorrectnessInput

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

pointwise_metric_input

Opcional: PointwiseMetricInput

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

pairwise_metric_input

Opcional: PairwiseMetricInput

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

tool_call_valid_input

Opcional: ToolCallValidInput

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

tool_name_match_input

Opcional: ToolNameMatchInput

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

tool_parameter_key_match_input

Opcional: ToolParameterKeyMatchInput

Entrada para evaluar la capacidad de una sola respuesta de predecir una llamada a la herramienta con los 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 la herramienta con los nombres y valores de parámetros correctos.

comet_input

Opcional: CometInput

Entrada para evaluar con COMET.

metricx_input

Opcional: MetricxInput

Entrada para 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 el comportamiento de la métrica.

instances

Opcional: ExactMatchInstance[]

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

instances.prediction

Opcional: string

Respuesta de LLM.

instances.reference

Opcional: string

Respuesta dorada de LLM como 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 concordancia 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 el comportamiento de la métrica.

metric_spec.use_effective_order

Opcional: bool

Indica si se deben tener en cuenta los pedidos de n-gramas sin ninguna coincidencia.

instances

Opcional: BleuInstance[]

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

instances.prediction

Opcional: string

Respuesta de LLM.

instances.reference

Opcional: string

Respuesta dorada de LLM como 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 el comportamiento de la métrica.

metric_spec.rouge_type

Opcional: string

Valores aceptables:

  • rougen[1-9]: calcula las puntuaciones de rouge según la superposición en n-gramas entre la predicción y la referencia.
  • rougeL: calcula las puntuaciones de rouge según la subsecuencia común más larga (LCS) entra la predicción y la referencia.
  • rougeLsum: primero, divide la predicción y la referencia en oraciones y, luego, calcula la LCS para cada tupla. La puntuación final rougeLsum es el promedio de estas puntuaciones de LCS individuales.

metric_spec.use_stemmer

Opcional: bool

Indica si se debe usar el algoritmo de Porter para quitar los sufijos de palabras para mejorar la coincidencia.

metric_spec.split_summaries

Opcional: bool

Indica si se deben agregar líneas nuevas entre oraciones para rougeLsum.

instances

Opcional: RougeInstance[]

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

instances.prediction

Opcional: string

Respuesta de LLM.

instances.reference

Opcional: string

Respuesta dorada de LLM como 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 el comportamiento de la métrica.

instance

Opcional: FluencyInstance

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

instance.prediction

Opcional: string

Respuesta de LLM.

FluencyResult

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

score

float: Uno de los siguientes:

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

explanation

string: justificación para la asignación de puntuaciones.

confidence

float: [0, 1] la 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 el comportamiento de la métrica.

instance

Opcional: CoherenceInstance

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

instance.prediction

Opcional: string

Respuesta de LLM.

CoherenceResult

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

score

float: Uno de los siguientes:

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

explanation

string: justificación para la asignación de puntuaciones.

confidence

float: [0, 1] la 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 el comportamiento de la métrica.

instance

Opcional: SafetyInstance

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

instance.prediction

Opcional: string

Respuesta de LLM.

SafetyResult

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

score

float: Uno de los siguientes:

  • 0: no es seguro
  • 1: seguro

explanation

string: justificación para la asignación de puntuaciones.

confidence

float: [0, 1] la 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 el comportamiento de la métrica.

instance

Opcional: GroundednessInstance

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

instance.prediction

Opcional: string

Respuesta de LLM.

instance.context

Opcional: string

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

GroundednessResult

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

score

float: Uno de los siguientes:

  • 0: sin fundamento
  • 1: con fundamento

explanation

string: justificación para la asignación de puntuaciones.

confidence

float: [0, 1] la 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 el comportamiento de la métrica.

instance

Opcional: FulfillmentInstance

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

instance.prediction

Opcional: string

Respuesta de LLM.

instance.instruction

Opcional: string

Instrucción usada en el tiempo de inferencia.

FulfillmentResult

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

score

float: Uno de los siguientes:

  • 1: sin entrega
  • 2: entrega deficiente
  • 3: algunas entregas
  • 4: entrega buena
  • 5: entrega completa

explanation

string: justificación para la asignación de puntuaciones.

confidence

float: [0, 1] la 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 el comportamiento de la métrica.

instance

Opcional: SummarizationQualityInstance

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

instance.prediction

Opcional: string

Respuesta de LLM.

instance.instruction

Opcional: string

Instrucción usada en el tiempo de inferencia.

instance.context

Opcional: string

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

SummarizationQualityResult

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

score

float: Uno de los siguientes:

  • 1: muy malo
  • 2: malo
  • 3: de acuerdo
  • 4: bueno
  • 5: muy bueno

explanation

string: justificación para la asignación de puntuaciones.

confidence

float: [0, 1] la 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 el comportamiento de la métrica.

instance

Opcional: PairwiseSummarizationQualityInstance

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

instance.baseline_prediction

Opcional: string

Respuesta de LLM del modelo de referencia.

instance.prediction

Opcional: string

Respuesta de LLM del modelo candidato.

instance.instruction

Opcional: string

Instrucción usada en el tiempo de inferencia.

instance.context

Opcional: string

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

PairwiseSummarizationQualityResult

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

pairwise_choice

PairwiseChoice: enumeración con valores posibles de la siguiente manera:

  • BASELINE: la predicción del modelo de referencia es mejor
  • CANDIDATE: la predicción candidata es mejor
  • TIE: empate entre las predicciones de modelo de referencia y candidatas.

explanation

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

confidence

float: [0, 1] la 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 el comportamiento de la métrica.

instance

Opcional: SummarizationHelpfulnessInstance

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

instance.prediction

Opcional: string

Respuesta de LLM.

instance.instruction

Opcional: string

Instrucción usada en el tiempo de inferencia.

instance.context

Opcional: string

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

SummarizationHelpfulnessResult

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

score

float: Uno de los siguientes:

  • 1: poco útil
  • 2: algo inútil
  • 3: neutral
  • 4: bastante útil
  • 5: útil

explanation

string: justificación para la asignación de puntuaciones.

confidence

float: [0, 1] la 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 el comportamiento de la métrica.

instance

Opcional: SummarizationVerbosityInstance

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

instance.prediction

Opcional: string

Respuesta de LLM.

instance.instruction

Opcional: string

Instrucción usada en el tiempo de inferencia.

instance.context

Opcional: string

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

SummarizationVerbosityResult

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

score

float. Uno de los siguientes:

  • -2: terso
  • -1: algo terso
  • 0: óptimo
  • 1: algo verboso
  • 2: verboso

explanation

string: justificación para la asignación de puntuaciones.

confidence

float: [0, 1] la 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 el comportamiento de la métrica.

instance

Opcional: QuestionAnsweringQualityInstance

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

instance.prediction

Opcional: string

Respuesta de LLM.

instance.instruction

Opcional: string

Instrucción usada en el tiempo de inferencia.

instance.context

Opcional: string

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

QuestionAnsweringQualityResult

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

score

float: Uno de los siguientes:

  • 1: muy malo
  • 2: malo
  • 3: de acuerdo
  • 4: bueno
  • 5: muy bueno

explanation

string: justificación para la asignación de puntuaciones.

confidence

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

PairwiseQuestionAnsweringQualityInput

{
  "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 el comportamiento de la métrica.

instance

Opcional: QuestionAnsweringQualityInstance

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

instance.baseline_prediction

Opcional: string

Respuesta de LLM del modelo de referencia.

instance.prediction

Opcional: string

Respuesta de LLM del modelo candidato.

instance.instruction

Opcional: string

Instrucción usada en el tiempo de inferencia.

instance.context

Opcional: string

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

PairwiseQuestionAnsweringQualityResult

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

pairwise_choice

PairwiseChoice: enumeración con valores posibles de la siguiente manera:

  • BASELINE: la predicción del modelo de referencia es mejor
  • CANDIDATE: la predicción candidata es mejor
  • TIE: empate entre las predicciones de modelo de referencia y candidatas.

explanation

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

confidence

float: [0, 1] la 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 el comportamiento de la métrica.

instance

Opcional: QuestionAnsweringRelevanceInstance

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

instance.prediction

Opcional: string

Respuesta de LLM.

instance.instruction

Opcional: string

Instrucción usada en el tiempo de inferencia.

instance.context

Opcional: string

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

QuestionAnsweringRelevancyResult

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

score

float: Uno de los siguientes:

  • 1: irrelevante
  • 2: algo irrelevante
  • 3: neutral
  • 4: algo relevante
  • 5: relevante

explanation

string: justificación para la asignación de puntuaciones.

confidence

float: [0, 1] la 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 el comportamiento de la métrica.

instance

Opcional: QuestionAnsweringHelpfulnessInstance

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

instance.prediction

Opcional: string

Respuesta de LLM.

instance.instruction

Opcional: string

Instrucción usada en el tiempo de inferencia.

instance.context

Opcional: string

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

QuestionAnsweringHelpfulnessResult

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

score

float: Uno de los siguientes:

  • 1: poco útil
  • 2: algo inútil
  • 3: neutral
  • 4: bastante útil
  • 5: útil

explanation

string: justificación para la asignación de puntuaciones.

confidence

float: [0, 1] la 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 el comportamiento de la métrica.

metric_spec.use_reference

Opcional: bool

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

instance

Opcional: QuestionAnsweringCorrectnessInstance

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

instance.prediction

Opcional: string

Respuesta de LLM.

instance.reference

Opcional: string

Respuesta dorada de LLM como referencia.

instance.instruction

Opcional: string

Instrucción usada en el tiempo de inferencia.

instance.context

Opcional: string

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

QuestionAnsweringCorrectnessResult

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

score

float: Uno de los siguientes:

  • 0: incorrecto
  • 1: correcto

explanation

string: justificación para la asignación de puntuaciones.

confidence

float: [0, 1] la 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 el comportamiento de la métrica.

metric_spec.metric_prompt_template

Obligatorio: string

Una plantilla de instrucción que define la métrica. Los pares clave-valor de instance.json_instance la renderizan.

instance

Obligatorio: PointwiseMetricInstance

Entrada de evaluación, que consiste en 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: Es una puntuación para el resultado de la evaluación de la métrica puntual.

explanation

string: justificación para la asignación de puntuaciones.

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 el comportamiento de la métrica.

metric_spec.metric_prompt_template

Obligatorio: string

Una plantilla de instrucción que define la métrica. Los pares clave-valor de instance.json_instance la renderizan.

instance

Obligatorio: PairwiseMetricInstance

Entrada de evaluación, que consiste en 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: Es una puntuación para el resultado de la evaluación de métricas por pares.

explanation

string: justificación para la asignación de puntuaciones.

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 el comportamiento de la métrica.

instance

Opcional: ToolCallValidInstance

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

instance.prediction

Opcional: string

Respuesta de LLM del modelo candidato, que es una cadena serializada JSON que contiene las claves content y tool_calls. El valor content es la salida de texto del modelo. El valor tool_call es una cadena serializada JSON de una lista de llamadas a las herramientas. A continuación, se presenta un 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 dorado en 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

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

tool_call_valid_metric_values.score

float: Uno de los siguientes:

  • 0: llamada a la herramienta no válida
  • 1: llamada a la 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 el comportamiento de la métrica.

instance

Opcional: ToolNameMatchInstance

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

instance.prediction

Opcional: string

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

instance.reference

Opcional: string

Salida del modelo dorado en 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

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

tool_name_match_metric_values.score

float: Uno de los siguientes:

  • 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 el comportamiento de la métrica.

instance

Opcional: ToolParameterKeyMatchInstance

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

instance.prediction

Opcional: string

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

instance.reference

Opcional: string

Salida del modelo dorado en 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

ToolParameterKeyMatchMetricValue repetido: 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 más parámetros que 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 el comportamiento de la métrica.

instance

Opcional: ToolParameterKVMatchInstance

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

instance.prediction

Opcional: string

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

instance.reference

Opcional: string

Salida del modelo dorado en 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

ToolParameterKVMatchMetricValue repetido: 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 más parámetros que 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 el comportamiento de la métrica.

metric_spec.version

Opcional: string

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

metric_spec.source_language

Opcional: string

Es el idioma de origen en formato BCP-47. Por ejemplo, “es”.

metric_spec.target_language

Opcional: string

Es el idioma de destino en formato BCP-47. Por ejemplo, “es”.

instance

Opcional: CometInstance

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

instance.prediction

Opcional: string

Respuesta de LLM del modelo candidato. Este es el resultado del LLM que se está evaluando.

instance.source

Opcional: string

Texto de origen. Está en el idioma original del que se tradujo la predicción.

instance.reference

Opcional: string

Verdad fundamental que se usa para compararla con la predicción. Se muestra 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

Opcional:

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 la entrada de texto de referencia proporcionada.
  • METRICX_24_SRC: MetricX 24 para la traducción y la fuente Evalúa la traducción (predicción) mediante la estimación de calidad (QE), sin una entrada de texto de referencia.
  • METRICX_24_SRC_REF: MetricX 24 para la traducción, la fuente y la referencia Evalúa la traducción (predicción) con las tres entradas.

metric_spec.source_language

Opcional: string

Es el idioma de origen en formato BCP-47. Por ejemplo, “es”.

metric_spec.target_language

Opcional: string

Es el idioma de destino en formato BCP-47. Por ejemplo, “es”.

instance

Opcional: MetricxInstance

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

instance.prediction

Opcional: string

Respuesta de LLM del modelo candidato. Este es el resultado del LLM que se está evaluando.

instance.source

Opcional: string

Es el texto fuente que está en el idioma original del que se tradujo la predicción.

instance.reference

Opcional: string

Verdad fundamental que se usa 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

Cómo evaluar un resultado

En el siguiente ejemplo, se muestra cómo llamar a la API de Gen AI Evaluation para evaluar el resultado de un LLM a través de una variedad de métricas de evaluación, incluidas 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
}

Evalúa un resultado: calidad de resumen por pares

En el siguiente ejemplo, se muestra cómo llamar a la API de Gen AI Evaluation Service para evaluar el resultado de un LLM mediante una comparación de calidad de resumen por pares.

REST

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

  • PROJECT_ID: El ID del proyecto.
  • LOCATION: La región para procesar la solicitud.
  • PREDICTION: respuesta de LLM.
  • BASELINE_PREDICTION: respuesta de LLM del modelo de referencia.
  • INSTRUCTION: la instrucción usada en el momento de la inferencia.
  • CONTEXT: texto en tiempo de inferencia que contiene toda la información relevante que se puede usar en la respuesta de 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

Si deseas obtener información para instalar o actualizar el SDK de Vertex AI para Python, consulta Instala el SDK de Vertex AI para Python. Si deseas obtener más información, consulta la documentación de referencia de la API de 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-1.5-pro-001")

# Candidate model for pairwise comparison
candidate_model = GenerativeModel(
    "gemini-1.5-pro-002", 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 instrucciones de configuración para Go incluidas en la guía de inicio rápido de Vertex AI sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de Vertex AI Go.

Para autenticarte en Vertex AI, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para 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
}

Obtén la puntuación ROUGE

En el siguiente ejemplo, se llama a la API de Gen AI Evaluation Service para obtener la puntuación de ROUGE de una predicción, generada por varias entradas. Las entradas de ROUGE usan metric_spec, que determina el comportamiento de la métrica.

REST

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

  • PROJECT_ID: El ID del proyecto.
  • LOCATION: La región para procesar la solicitud.
  • PREDICTION: respuesta de LLM.
  • REFERENCE: la respuesta dorada de LLM como referencia.
  • ROUGE_TYPE: el cálculo que se usa para determinar la puntuación rouge. Consulta metric_spec.rouge_type para conocer los valores aceptables.
  • USE_STEMMER: determina si se usa el algoritmo de Porter para quitar los sufijos de palabras para mejorar la coincidencia. Para obtener valores aceptables, consulta metric_spec.use_stemmer.
  • SPLIT_SUMMARIES: determina si se agregan líneas nuevas entre oraciones rougeLsum. Para obtener 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

Si deseas obtener información para instalar o actualizar el SDK de Vertex AI para Python, consulta Instala el SDK de Vertex AI para Python. Si deseas obtener más información, consulta la documentación de referencia de la API de 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 instrucciones de configuración para Go incluidas en la guía de inicio rápido de Vertex AI sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de Vertex AI Go.

Para autenticarte en Vertex AI, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para 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
}

¿Qué sigue?