Evaluación de LLMs: ¿Cómo medir la calidad de las respuestas?
La evaluación de LLMs mide sistemáticamente la calidad de las respuestas usando métricas automáticas, LLM-as-judge, benchmarks y validación humana.
// 6 min de lectura · ● updated 2026-06
// antes de leer
Evaluar un LLM no es opcional si planeas usarlo en producción. Sin evaluación, no sabes si el modelo es preciso, está alucinando, es seguro o si una actualización lo empeoró. La evaluación de LLMs es el proceso de medir sistemáticamente la calidad de las respuestas usando criterios objetivos — exactitud, relevancia, tono, seguridad, formato — para decidir si un modelo es apto para tu caso de uso.
Tip Pro: La evaluación no es un paso que haces una vez. Es un proceso continuo: cada vez que cambias de modelo, actualizas un prompt, o agregas un nuevo feature, debes re-evaluar.
¿Qué es?
Evaluar un LLM significa comparar su output contra un estándar definido por ti. A diferencia del software tradicional —donde una función devuelve true o false— un LLM devuelve lenguaje natural, que es inherentemente subjetivo. Por eso la evaluación tiene múltiples dimensiones:
- Exactitud factual: ¿La respuesta es correcta según tu fuente de verdad?
- Relevancia: ¿Responde a lo que preguntaron o se va por las ramas?
- Fidelidad (groundedness): ¿La respuesta se basa en el contexto que le diste o inventa?
- Tono y estilo: ¿Suena profesional, amigable, coherente con tu marca?
- Seguridad: ¿Genera contenido tóxico, sesgado o riesgoso?
- Formato: ¿Respeta la estructura esperada (JSON, XML, etc.)?
Cada dimensión requiere un método de evaluación distinto. No existe una sola métrica que cubra todo.
Nota: No confundas evaluar un LLM con hacerle un test. No le preguntas al modelo "¿qué tan bueno eres?" — le das un conjunto de ejemplos (test set) con respuestas esperadas y mides qué tan cerca estuvo.
Modelo mental
Piensa en la evaluación como un examen estandarizado para el modelo. Tú eres el profesor que prepara el examen: defines las preguntas (test set), decides qué respuestas son correctas (ground truth), y luego calificas.
┌──────────────┐
Test set ──→│ LLM │──→ Respuestas ──→ Calificación (métrica)
└──────────────┘
↑
Prompt / sistemaLa diferencia con un examen humano es que la calificación puede ser automatizada: otro LLM más grande o un conjunto de reglas compara la respuesta del modelo contra la esperada y asigna un puntaje.
¿Cómo se usa?
Hay tres enfoques principales, y en producción sueles combinarlos.
1. Benchmarks estandarizados
Son conjuntos de prueba públicos con respuestas esperadas. Te permiten comparar modelos entre sí:
| Benchmark | Qué mide | Ejemplo |
|---|---|---|
| MMLU | Conocimiento multitarea (57 materias) | El modelo responde preguntas de anatomía, derecho, física, etc. |
| HellaSwag | Razonamiento de sentido común | Elegir el final más lógico de una oración |
| TruthfulQA | Veracidad (alucinaciones) | El modelo evita afirmaciones falsas comunes |
| HumanEval | Generación de código | El modelo escribe funciones que pasan tests |
# lm-eval-harness: el estándar de facto para benchmarks
pip install lm-eval
# Evaluar un modelo en MMLU
lm_eval --model hf \
--model_args pretrained=mistralai/Mistral-7B-v0.1 \
--tasks mmlu \
--num_fewshot 5Advertencia: Los benchmarks públicos sufren de contaminación de datos — el modelo pudo haber visto las preguntas durante el entrenamiento. No confíes ciegamente en un benchmark. Complémentalo con tu propio test set.
2. LLM-as-judge
Usas un LLM más potente (GPT-4, Claude 3.5 Opus) para evaluar las respuestas de otro modelo. Es el método más práctico para equipos que no tienen presupuesto para anotadores humanos:
from openai import OpenAI
client = OpenAI()
SYSTEM_PROMPT = """
Eres un evaluador experto. Dada una pregunta, una respuesta
y un criterio de evaluación, califica la respuesta como:
- CORRECTA: cumple el criterio satisfactoriamente
- INCORRECTA: no lo cumple
- PARCIAL: lo cumple a medias
Devuelve solo el JSON con "score" y "reason".
"""
def evaluate_response(question, response, criterion):
messages = [
{"role": "system", "content": SYSTEM_PROMPT},
{"role": "user", "content": f"""
Pregunta: {question}
Respuesta: {response}
Criterio: {criterion}
"""}
]
result = client.chat.completions.create(
model="gpt-4o",
messages=messages,
response_format={"type": "json_object"}
)
return result.choices[0].message.content
# Ejemplo
eval = evaluate_response(
question="¿Cuál es la capital de Uruguay?",
response="La capital de Uruguay es Montevideo.",
criterion="La respuesta debe ser factualmente correcta."
)El truco está en el prompt del evaluador: cuanto más específico sea el criterio, más consistentes serán las calificaciones.
Tip Pro: El LLM-as-judge tiene sesgos. Tiende a favorecer respuestas más largas, con más formato, o que usan el mismo tono del evaluador. Cámbialo de modelo periódicamente y calibra contra evaluación humana cada cierto número de muestras.
3. Test set propio con ground truth
Nada reemplaza tener un conjunto de ejemplos de tu dominio con respuestas esperadas escritas por humanos:
test_set = [
{
"question": "¿Cómo reinicio mi router Huawei HG8145V5?",
"expected": "Presiona el botón de reset en la parte trasera por 10 segundos.",
"criteria": ["exactitud_factual", "claridad"]
},
{
"question": "¿Cuál es el horario de atención?",
"expected": "Lunes a viernes de 9:00 a 18:00.",
"criteria": ["exactitud_factual"]
}
]
def evaluate_accuracy(response, expected):
# Comparación semántica, no exacta
# Puedes usar embeddings + similitud coseno o LLM-as-judge
embedding = client.embeddings.create(
model="text-embedding-3-small",
input=[response, expected]
)
sim = cosine_similarity(
embedding.data[0].embedding,
embedding.data[1].embedding
)
return sim > 0.85 # threshold definido empíricamentePipeline de evaluación completo en producción
import json
from openai import OpenAI
client = OpenAI()
def evaluate_response(question, response, expected, criteria):
prompt = f"""
Evalúa la siguiente respuesta y determina si cumple los criterios.
Pregunta: {question}
Respuesta esperada: {expected}
Respuesta del modelo: {response}
Criterios: {json.dumps(criteria)}
Para cada criterio, devuelve "pass" o "fail".
"""
result = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": prompt}],
response_format={"type": "json_object"}
)
return json.loads(result.choices[0].message.content)
# Test set de 50 preguntas de tu dominio
results = [evaluate_response(**item) for item in test_set]
pass_rate = sum(r.get("pass", False) for r in results) / len(results)
print(f"Tasa de aprobación: {pass_rate:.2%}")¿Cuándo usarlo / cuándo no?
| ✅ Úsalo cuando | ❌ NO lo uses cuando |
|---|---|
| Estás por lanzar un producto con LLM | Estás prototipando y aún no definiste criterios |
| Cambiaste de modelo o versión | El output es decorativo o no crítico |
| Quieres comparar proveedores objetivamente | Tienes un solo prompt y un solo caso de uso |
| Necesitas detectar regresiones en producción | El costo de evaluación es mayor que el riesgo de error |
| Tu equipo necesita datos para decidir | No tienes un test set representativo |
Tip Pro: No evalúes todo. Enfócate en las 10-20 preguntas que representan el 80% del uso real. Un test set pequeño pero representativo gana a uno grande pero genérico.
Historia y evolución
Ver historia
La evaluación de modelos de lenguaje empezó con métricas automáticas como BLEU (2002, traducción automática) y ROUGE (2004, resumen). Estas métricas comparan n-gramas entre la respuesta generada y la de referencia — son baratas pero no capturan significado.
Con la llegada de GPT-3 (2020), la comunidad se dio cuenta de que las métricas tradicionales no funcionaban para texto abierto. Aparecieron benchmarks como MMLU (2021) y el framework HELM (2022) de Stanford, que evalúan modelos en docenas de escenarios.
El salto más importante llegó en 2023 con el uso de LLMs como evaluadores (LLM-as-judge). MT Bench, AlpacaEval y Chatbot Arena popularizaron la evaluación por pares: en lugar de métricas automáticas, un LLM o votos de humanos deciden qué respuesta es mejor.
Hoy la tendencia es hacia evaluaciones específicas del dominio, con frameworks como LangSmith, Weights & Biases y Arize que permiten crear test sets, ejecutar evaluaciones y monitorear cambios en producción.
// relacionados