Prepara tu conjunto de datos de evaluación

En esta página, se describe cómo preparar tu conjunto de datos para Gen AI Evaluation Service.

Descripción general

Gen AI Evaluation Service detecta y controla automáticamente varios formatos de datos comunes. Esto significa que, a menudo, puedes usar tus datos tal como están sin necesidad de realizar conversiones manuales.

Los campos que debes proporcionar en tu conjunto de datos dependen de tu objetivo:

Objetivo Datos obligatorios Flujo de trabajo del SDK
Genera respuestas nuevas y, luego, evalúalas prompt run_inference()evaluate()
Evalúa las respuestas existentes prompt y response evaluate()
Genera nuevos resultados de ejecución del agente y, luego, evalúalos prompt run_inference()evaluate()
Evalúa las respuestas existentes del agente y los eventos intermedios prompt, response y intermediate_events evaluate()

Cuando se ejecuta client.evals.evaluate() o client.evals.create_evaluation_run(), Gen AI Evaluation Service busca automáticamente los siguientes campos comunes en tu conjunto de datos:

  • prompt: (Obligatorio) Es la entrada al modelo que deseas evaluar. Para obtener mejores resultados, debes proporcionar ejemplos de instrucciones que representen los tipos de entradas que tus modelos procesan en producción.

  • response: (Obligatorio) Es el resultado que genera el modelo o la aplicación que se está evaluando.

  • reference: (Opcional) Es la verdad fundamental o la respuesta "dorada" con la que puedes comparar la respuesta del modelo. Este campo suele ser obligatorio para las métricas basadas en cálculos, como bleu y rouge.

  • conversation_history: (Opcional) Es una lista de turnos anteriores en una conversación de varios turnos. Gen AI Evaluation Service extrae automáticamente este campo de los formatos compatibles. Para obtener más información, consulta Cómo controlar conversaciones de varios turnos.

  • session_inputs: (Opcional) Es la entrada para inicializar una sesión para ejecutar un agente. Esto solo es opcional para el flujo de trabajo run_inference()evaluate().

  • intermediate_events: (Opcional) Son los seguimientos del agente de un solo turno en una ejecución del agente, incluidas las llamadas a funciones, las respuestas de funciones y las respuestas intermedias del modelo. Este campo no es obligatorio para el flujo de trabajo run_inference()evaluate().

Formatos de datos compatibles

Gen AI Evaluation Service admite los siguientes formatos:

DataFrame de Pandas

Para evaluaciones directas, puedes usar un pandas.DataFrame. Gen AI Evaluation Service busca nombres de columnas comunes como prompt, response y reference. Este formato es totalmente retrocompatible.

import pandas as pd

# Example DataFrame with prompts and ground truth references
prompts_df = pd.DataFrame({
    "prompt": [
        "What is the capital of France?",
        "Who wrote 'Hamlet'?",
    ],
    "reference": [
        "Paris",
        "William Shakespeare",
    ]
})

# You can use this DataFrame directly with run_inference or evaluate
eval_dataset = client.evals.run_inference(model="gemini-2.5-flash", src=prompts_df)
eval_result = client.evals.evaluate(
    dataset=eval_dataset,
    metrics=[types.PrebuiltMetric.GENERAL_QUALITY]
)
eval_result.show()

Formato de predicción por lotes de Gemini

Puedes usar directamente el resultado de un trabajo de predicción por lotes de Gemini Enterprise Agent Platform, que suelen ser archivos JSONL almacenados en Cloud Storage, en los que cada línea contiene un objeto de solicitud y respuesta. Gen AI Evaluation Service analiza esta estructura automáticamente para proporcionar integración con otros servicios de Gemini Enterprise Agent Platform.

A continuación, se muestra un ejemplo de una sola línea en un archivo JSONl:

{"request": {"contents": [{"role": "user", "parts": [{"text": "Why is the sky blue?"}]}]}, "response": {"candidates": [{"content": {"role": "model", "parts": [{"text": "The sky appears blue to the human eye as a result of a phenomenon known as Rayleigh scattering."}]}}]}}

Luego, puedes evaluar directamente las respuestas pregeneradas de un trabajo por lotes:

# Cloud Storage path to your batch prediction output file
batch_job_output_uri = "gs://path/to/your/batch_output.jsonl"

# Evaluate the pre-generated responses directly
eval_result = client.evals.evaluate(
    dataset=batch_job_output_uri,
    metrics=[types.PrebuiltMetric.GENERAL_QUALITY]
)
eval_result.show()

Formato de finalización de chat de OpenAI

Para evaluar o comparar con modelos de terceros, como OpenAI y Anthropic, Gen AI Evaluation Service admite el formato de finalización de chat de OpenAI. Puedes proporcionar un conjunto de datos en el que cada fila sea un objeto JSON estructurado como una solicitud a la API de OpenAI. Gen AI Evaluation Service detecta automáticamente este formato.

A continuación, se muestra un ejemplo de una sola línea en este formato:

{"request": {"messages": [{"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": "What's the capital of France?"}], "model": "gpt-4o"}}

Puedes usar estos datos para generar respuestas a partir de un modelo de terceros y evaluar las respuestas:

# Ensure your third-party API key is set
# e.g., os.environ['OPENAI_API_KEY'] = 'Your API Key'

openai_request_uri = "gs://path/to/your/openai_requests.jsonl"

# Generate responses using a LiteLLM-supported model string
openai_responses = client.evals.run_inference(
    model="gpt-4o",  # LiteLLM compatible model string
    src=openai_request_uri,
)

# The resulting openai_responses object can then be evaluated
eval_result = client.evals.evaluate(
    dataset=openai_responses,
    metrics=[types.PrebuiltMetric.GENERAL_QUALITY]
)
eval_result.show()

Cómo controlar conversaciones de varios turnos

Gen AI Evaluation Service analiza automáticamente los datos de conversaciones de varios turnos de formatos compatibles. Cuando tus datos de entrada incluyen un historial de intercambios (como dentro del campo request.contents en el formato de Gemini o request.messages en el formato de OpenAI), Gen AI Evaluation Service identifica los turnos anteriores y los procesa como conversation_history.

Esto significa que no necesitas separar manualmente la instrucción actual de la conversación anterior, ya que las métricas de evaluación pueden usar el historial de conversaciones para comprender el contexto de la respuesta del modelo.

Considera el siguiente ejemplo de una conversación de varios turnos en formato de Gemini:

{
  "request": {
    "contents": [
      {"role": "user", "parts": [{"text": "I'm planning a trip to Paris."}]},
      {"role": "model", "parts": [{"text": "That sounds wonderful! What time of year are you going?"}]},
      {"role": "user", "parts": [{"text": "I'm thinking next spring. What are some must-see sights?"}]}
    ]
  },
  "response": {
    "candidates": [
      {"content": {"role": "model", "parts": [{"text": "For spring in Paris, you should definitely visit the Eiffel Tower, the Louvre Museum, and wander through Montmartre."}]}}
    ]
  }
}

La conversación de varios turnos se analiza automáticamente de la siguiente manera:

  • prompt: El último mensaje del usuario se identifica como la instrucción actual ({"role": "user", "parts": [{"text": "I'm thinking next spring. What are some must-see sights?"}]}).

  • conversation_history: Los mensajes anteriores se extraen automáticamente y están disponibles como el historial de conversaciones ([{"role": "user", "parts": [{"text": "I'm planning a trip to Paris."}]}, {"role": "model", "parts": [{"text": "That sounds wonderful! What time of year are you going?"}]}]).

  • response: La respuesta del modelo se toma del campo response ({"role": "model", "parts": [{"text": "For spring in Paris..."}]}).

¿Qué sigue?