Agentic AI Evaluation Framework para Elastic Agent Builder 9.3 — Metodología completa: proceso de evaluación, claim decomposition, métricas y puntuación explicados paso a paso
AgentBench for Elastic es un Agentic AI Evaluation Framework — un framework especializado de evaluación de agentes de IA diseñado específicamente para Elastic Agent Builder 9.3. No es un benchmark genérico de modelos de lenguaje: aquí evaluamos cómo cada LLM se comporta como agente real, con herramientas reales, datos reales y restricciones de producción reales.
Utilizamos Claim Decomposition — un sistema de evaluación avanzado que descompone cada respuesta en afirmaciones atómicas y las evalúa individualmente para Correctness (media geométrica) y Groundedness (media aritmética). Medimos tool calling, razonamiento multi-paso, resistencia a inputs adversariales, retención de contexto en conversaciones multi-turn, precisión, fiabilidad, latencia y coste en 30 tests reales contra datos determinísticos.
AgentBench for Elastic (v1.0) es un framework de evaluación end-to-end que mide cómo diferentes modelos de lenguaje (LLM) funcionan como agentes de IA dentro de Elastic Agent Builder 9.3. A diferencia de los benchmarks genéricos (MMLU, HumanEval, etc.) que evalúan capacidades aisladas del modelo, AgentBench evalúa el rendimiento agentic real — el modelo integrado en un stack de producción, con herramientas, datos y restricciones reales. Medimos:
benchmark-ecommerce (1.000 documentos
de pedidos de e-commerce) y benchmark-customers (20 perfiles de clientes con tiers y segmentación).
No hay datos simulados ni mocks — el agente interactúa con Elasticsearch real a través de la API de Agent Builder.
El dataset es determinístico: siempre los mismos datos para que los resultados sean comparables entre modelos y entre ejecuciones.
Cada test sigue este flujo de 6 pasos:
POST /api/agent_builder/converse). En tests multi-turn, se envían múltiples turnos en la misma conversación.model para seguimiento histórico.Evaluar respuestas de IA no es trivial — no puedes comparar strings, porque una respuesta puede ser correcta de muchas formas diferentes. Utilizamos OpenAI GPT-5.2 como "LLM-as-Judge" porque:
Para cada test, GPT-5.2 recibe un prompt estructurado con:
En lugar de pedir puntuaciones globales genéricas, el juez descompone la respuesta en claims atómicos — cada afirmación factual individual se evalúa por separado. Esto permite detectar:
Cada claim recibe dos evaluaciones independientes: Correctness (comparado contra el ground truth) y Groundedness (comparado contra el output real de los tools). Esto detecta tanto errores factuales como alucinaciones.
⚠️ TRUNCATED), el juez no penaliza datos que no puede verificar —
solo penaliza información que claramente contradice lo que los tools devolvieron. Además, si el agente presenta
información como conocimiento general (sin atribuirla a los tools), se clasifica como DISCLOSED_UNGROUNDED y se penaliza menos que una alucinación directa.
El juez no asigna puntuaciones globales genéricas. En su lugar, descompone la respuesta en claims atómicos (afirmaciones factuales individuales) y evalúa cada uno en dos dimensiones independientes. Además, da puntuaciones simples para formato e instrucciones.
Cada claim se clasifica como:
Cada claim se compara contra el ground truth verificado para determinar si es correcto:
| Veredicto | Significado | Score (central) |
|---|---|---|
| FULLY_SUPPORTED | Coincide completamente con el ground truth | 1.0 |
| PARTIALLY_SUPPORTED | Parcialmente correcto con imprecisiones menores | 0.70 |
| CONTRADICTED | Contradice directamente el ground truth | 0.0 (critical) |
| NOT_VERIFIABLE | No se puede verificar con el ground truth disponible | 0.85 |
Cada claim se compara contra lo que los tools realmente devolvieron, para detectar alucinaciones:
| Veredicto | Significado | Score (central) |
|---|---|---|
| GROUNDED | Directamente soportado por el output de los tools | 1.0 |
| PARTIALLY_GROUNDED | Parcialmente soportado por el tool output | 0.70 |
| DISCLOSED_UNGROUNDED | No está en el output pero el agente lo presenta explícitamente como conocimiento general | 0.60 |
| UNGROUNDED | Sin base en el tool output (potencialmente alucinado) | 0.0 |
Cuando un claim es incorrecto o no fundamentado, se asigna una severidad que modifica el impacto:
Ejemplo: un claim "Hay 50 pedidos de Madrid" cuando el ground truth dice 49 → CONTRADICTED + severity "minor" (score 0.50 en central). Pero un claim "El cliente top es Juan García" cuando es "Hans Mueller" → CONTRADICTED + severity "critical" (score 0.0 en central).
Además de los claims, el juez asigna dos puntuaciones simples (0–10):
Se calcula automáticamente como la proporción de claims marcados como "central" sobre el total de claims. Un score alto indica que la respuesta es concisa y relevante — no tiene mucho "relleno" periférico.
Además de las evaluaciones del juez por claims, se calculan estas métricas de forma objetiva y programática (sin LLM):
Basado en el tiempo total de respuesta (Time To Last Token). Interpolación lineal entre umbrales:
Basado en el coste real en USD por query, obtenido del proveedor vía OpenRouter (precio real del provider, no el precio base):
Mide si el modelo usó al menos una de las herramientas esperadas. Basado en overlap de conjuntos:
¿Por qué overlap y no F1? En la práctica, los modelos inteligentes a veces usan tools adicionales (ej: consultar el mapping antes de buscar). Esto es comportamiento proactivo y deseable, no un error. El enfoque overlap recompensa usar al menos una tool correcta sin penalizar tools extra.
Penaliza errores técnicos en la ejecución de tools (timeouts de tool, errores de API, etc.):
Para tests con respuesta numérica exacta (ej: "¿Cuántos pedidos hay?"), se verifica automáticamente si la respuesta del agente contiene el valor correcto:
La puntuación ★ Adjusted Overall es la métrica principal del benchmark. Se calcula en tres fases: primero la media ponderada por métricas, luego el peso por dificultad, y finalmente la penalización por fallos.
Cada test recibe un overall_weighted basado en estos pesos:
| Métrica | Peso | Fuente | ¿Qué mide? | Distribución |
|---|---|---|---|---|
| 🎯 Correctness | 25% | Claims (geom.) | ¿Los datos son factualmente correctos? | |
| ⚓ Groundedness | 20% | Claims (arith.) | ¿Está basado en los datos de los tools? | |
| 🔧 Tool Calling | 15% | Programático | ¿Usó las herramientas correctas? | |
| ⏱️ Latency | 10% | Programático | ¿Respondió rápido? | |
| 📝 Instruction Following | 10% | Judge (simple) | ¿Siguió las instrucciones? | |
| 🚫 Error Rate | 10% | Programático | ¿Tuvo errores en tool execution? | |
| 💰 Cost | 5% | Programático | ¿Es económico? | |
| 📊 Relevance | 5% | Claims (ratio) | ¿Es conciso y relevante? |
Los tests difíciles pesan más en el score global del modelo. Cada dificultad tiene un multiplicador:
Los modelos con timeouts o errores reciben una penalización proporcional a su tasa de fallos:
¿Por qué? Un modelo que falla en 3 de 30 tests no solo pierde esos 3 scores — también pierde credibilidad como agente fiable. La failure penalty refleja este riesgo operativo.
Los 30 tests se agrupan en 11 categorías que cubren diferentes capacidades del agente:
Tests básicos de uso de herramientas: listar índices, obtener mappings, ejecutar búsquedas con filtros. Valida que el agente sabe interactuar con Elasticsearch.
Consultas analíticas: contar documentos, agrupar por categoría, calcular medias con filtros. El agente puede usar ES|QL internamente vía search.
Razonamiento multi-paso: analizar un mapping y luego construir queries, o analizar distribuciones y proporcionar un resumen interpretativo.
Seguimiento estricto de instrucciones: formato de tabla markdown, exactamente 3 bullet points, restricciones de formato específicas.
Conversaciones de 2–5 turnos donde cada pregunta depende de la anterior. Evalúa retención de contexto, corrección de errores y refinamiento progresivo.
Casos límite: productos inexistentes, preguntas vagas sin contexto claro, índices que no existen. ¿El agente gestiona errores y ambigüedad correctamente?
Tests con respuesta numérica exacta verificable: conteos con filtros, sumas de importes, conteos de cardinalidad. Se valida programáticamente.
Tests que requieren correlacionar datos entre benchmark-ecommerce y benchmark-customers. Requiere múltiples tool calls y razonamiento entre fuentes.
Inputs diseñados para confundir al agente: campos inexistentes, peticiones contradictorias (status=cancelled AND delivered), operaciones imposibles (SQL JOINs).
Tests de nivel experto: cálculos derivados complejos (top 3 por revenue con métricas), análisis temporal Q3 vs Q4, y deep multi-turn de 5 turnos con resumen final.
Formatos de respuesta estrictos: "responde solo con JSON, sin markdown ni explicación" o "responde solo con un número, nada más". Evalúa adherencia extrema al formato.
Un solo paso, una sola herramienta. Ejemplo: "Lista los índices disponibles", "Cuenta cuántos documentos hay", "Busca un producto inexistente".
Requiere elegir la herramienta correcta, aplicar filtros, o seguir instrucciones de formato. Ejemplo: "Lista las categorías en formato tabla markdown", "Busca pedidos de clientes en Madrid", "Corrige el error de mi query anterior".
Multi-paso, multi-turn, queries analíticas complejas, o adversarial inputs. Ejemplo: "Basándote en el mapping, escribe una query para encontrar los top 3 clientes", "Busca pedidos que sean cancelled Y delivered a la vez".
Análisis temporal, cálculos derivados complejos, cross-index, multi-turn de 5 turnos, y operaciones imposibles. Ejemplo: "Compara revenue Q3 vs Q4 por categoría", "Busca los pedidos de clientes Gold cruzando dos índices", "Analiza tendencias de cancelación por trimestre y método de pago en una conversación de 5 turnos".
8.0 × 1.6 = 12.8 al numerador, mientras que un test easy con la misma nota contribuye
8.0 × 0.7 = 5.6. Esto hace que los modelos que aprueban tests difíciles se diferencien claramente de los que solo aprueban los fáciles.
Los 30 tests se ejecutan contra dos índices reales con datos determinísticos:
benchmark-ecommerce — 1.000 documentos de pedidos de e-commerce (20 clientes, 6 categorías de productos, 6 estados, precios, fechas, métodos de pago)benchmark-customers — 20 perfiles de clientes con nombre, email, ciudad, país, tier de fidelidad (Standard, Premium, Gold, Platinum) y fecha de registroEl dataset es determinístico — generado por un script con seed fija para que los resultados sean comparables entre modelos y entre ejecuciones. Cada test tiene un ground truth detallado con datos concretos verificados (cantidades exactas, nombres, valores), y algunos tests incluyen un exact_answer numérico verificable programáticamente.
El agente de Elastic Agent Builder (elastic-ai-agent) tiene acceso a estas tools:
platform.core.search — Buscar documentos en Elasticsearch. Puede generar y ejecutar queries ES|QL internamente.platform.core.execute_esql — Ejecutar queries ES|QL ya preparadas (no las escribe, solo las ejecuta).platform.core.generate_esql — Generar una query ES|QL a partir de lenguaje natural.platform.core.get_index_mapping — Ver el schema/mapping de un índice.platform.core.list_indices — Listar índices disponibles.
Nota importante: En la práctica, platform.core.search puede generar y ejecutar ES|QL internamente.
Esto significa que cuando un test pide "usar ES|QL", el agente puede usar platform.core.search y aun así ejecutar ES|QL correctamente.
Por ello, el benchmark acepta ambas tools como válidas en los tests de ES|QL.
Se usa un enfoque de overlap (no F1) para ser justo con modelos inteligentes:
En el informe, si ves un 0.0 con un icono ≠, significa que el modelo usó una herramienta diferente a la esperada. Haz clic en la fila para ver el detalle: tools esperadas vs usadas y la evaluación del juez.
¿Cuánta calidad obtienes por cada dólar gastado?
¿Cuánta calidad obtienes por segundo de espera?
El informe muestra dos valores de latencia para evitar distorsiones:
Los tests con timeout muestran ≥120s en la columna de latencia y — en la columna de coste
(ya que no se completó la generación de tokens).
Mide la estabilidad de las puntuaciones entre los tests que sí se completaron:
Se muestra la consistencia solo de tests exitosos para que los timeouts no distorsionen la métrica. La consistencia alta (σ bajo) indica que el modelo es predecible — sabes qué esperar.
Puntuación sintética que combina pass rate, consistencia y ausencia de errores:
La tabla principal ordena los modelos por ★ Adjusted Overall. Haz clic en el nombre del modelo para saltar a su card detallada. Las columnas muestran:
Cada modelo tiene una card detallada con:
Al hacer clic en cualquier fila de test, se despliega un panel con:
¿Tienes dudas sobre algún resultado?
Cada puntuación tiene contexto completo. Haz clic en cualquier test para ver la pregunta, los turnos, el ground truth, la respuesta del agente, los claims individuales, la evaluación del juez y las tools usadas. Puedes compartir cualquier test individual con su permalink.
Ver el informe de resultados →