En esta página, se describe cómo preparar tu conjunto de datos para el servicio de evaluación de IA generativa.
Descripción general
El servicio de evaluación de IA generativa 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 |
---|---|---|
Generar respuestas nuevas y, luego, evaluarlas | prompt |
run_inference() → evaluate() |
Evalúa las respuestas existentes | prompt y response |
evaluate() |
Cuando se ejecuta client.evals.evaluate()
, el servicio de evaluación de IA generativa busca automáticamente los siguientes campos comunes en tu conjunto de datos:
prompt
: (Obligatorio) Es la entrada del modelo que deseas evaluar. Para obtener los 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 respuesta de verdad fundamental o "dorada" con la que puedes comparar la respuesta del modelo. Este campo suele ser obligatorio para las métricas basadas en el procesamiento, comobleu
yrouge
.conversation_history
: (Opcional) Es una lista de turnos anteriores en una conversación de varios turnos. El servicio de evaluación de IA generativa extrae automáticamente este campo de los formatos admitidos. Para obtener más información, consulta Cómo controlar conversaciones de varios turnos.
Formatos de datos compatibles
El servicio de evaluación de IA generativa admite los siguientes formatos:
DataFrame de Pandas
Para evaluaciones sencillas, puedes usar un pandas.DataFrame
. El servicio de evaluación de IA generativa 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 Vertex AI, que suelen ser archivos JSONL almacenados en Cloud Storage, en los que cada línea contiene un objeto de solicitud y respuesta. El servicio de evaluación de IA generativa analiza esta estructura automáticamente para proporcionar integración con otros servicios de Vertex AI.
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 las respuestas generadas previamente desde un trabajo por lotes directamente:
# 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 Chat Completion de OpenAI
Para evaluar o comparar modelos de terceros, como OpenAI y Anthropic, el servicio de evaluación de IA generativa 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 de la API de OpenAI. El servicio de evaluación de IA generativa 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
El servicio de evaluación de IA generativa analiza automáticamente los datos de conversaciones de varios turnos en 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), el servicio de evaluación de IA generativa 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 historial de conversación ([{"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 camporesponse
({"role": "model", "parts": [{"text": "For spring in Paris..."}]}
).