Cambiar tema

Cómo crear un dataset de evaluación de agentes: tareas reales, trayectorias y pruebas de regresión

Easton editorial illustration: production agent control room
4
Capas de muestras
Golden set, negative cases, edge cases y regression cases.
5
Dimensiones de evaluación
Selección de herramientas, formato de argumentos, orden de ejecución, calidad de respuesta final y alineación con etiquetas humanas.
6
Campos clave de trayectoria
traceId, span_id, tool_calls, state_events, approval records y human labels.
数据来源: Esta checklist de ingeniería se basa en documentación oficial de OpenAI, LangSmith, Phoenix, DeepEval y OpenAI Agents SDK. Los nombres de API, el estado de plataformas y la UI de producto deben verificarse de nuevo en la documentación oficial tras la publicación.

"OpenAI Evaluation best practices recomienda definir objetivos, recolectar un dataset, definir métricas, ejecutar comparaciones y evaluar de forma continua. Los datos de prueba pueden venir de production data, historical data, domain samples y etiquetado humano."

La semana pasada, el agente de informes diarios todavía generaba reportes sin problema. Tras una actualización de modelo, sigue devolviendo un resumen final que parece correcto, pero en la trayectoria faltan el chequeo de permisos y la herramienta de refresco de datos. Un agente de soporte da una respuesta final correcta, pero llama la herramienta de reembolso con argumentos incorrectos; un benchmark público no detecta ese riesgo. En una retrospectiva de incidente ya existen traceId, tool call, approvalId, state event y juicio humano, pero nada quedó fijado como prueba obligatoria antes del próximo release.

Este tipo de regresión no se cubre cambiando de modelo ni corriendo otra demo. Un dataset de evaluación de agentes debe salir de la distribución real de tareas y de trayectorias de fallo en producción: tool calls, formatos de argumentos, transiciones de estado, approval records y human labels. Después debe entrar en CI como gate de regresión. Aquí el foco son casos de fallo y escenarios reales: cómo construir un eval dataset sostenible que proteja el límite de calidad de cada release.

1. Por qué los benchmarks públicos no bastan

1.1 Límites de los benchmarks públicos

Los benchmarks públicos miden capacidad del modelo, no la calidad de tus tareas de negocio. Conjuntos como AgentBench y WebArena ofrecen tareas estándar, pero no cubren la toolchain, el modelo de permisos ni la state machine de tu equipo.

Por ejemplo, tu agente de reportes puede necesitar llamar check_permission, refresh_data y generate_report en el orden “comprobar → refrescar → generar”. Un benchmark público no probará ese flujo porque no conoce tus tool schemas ni tus límites de permisos.

Que el modelo tenga buen score en un benchmark público no significa que tus tareas de negocio no vayan a degradarse. Un dataset de evaluación de agentes debe medir tu distribución real de tareas, no una capacidad general de razonamiento.

1.2 Valor principal de un dataset propio

Un eval dataset propio captura riesgos que los benchmarks públicos no ven. La comparación típica es esta:

EscenarioBenchmark públicoEval dataset propio
El agente de reportes omite el chequeo de permisosNo se ve; no existe esa herramienta ni ese modelo de permisosCaptura la restricción de trayectoria: debe llamar check_permission
El agente de soporte usa argumentos de reembolso incorrectosNo existe esa herramienta ni el schema de reembolsoLista esperada de tool calls + restricciones de formato de argumentos
Las transiciones de estado empeoran tras actualizar el modeloNo existe esa state machineAssertion de trayectoria de estado: comprobar → aprobar → ejecutar
La retrospectiva de incidente no se convierte en pruebaNo hay datos de incidentesEl fallo entra en negative cases

Usa benchmarks públicos para elegir modelos y tu dataset propio para proteger release gates. Se complementan, pero no se sustituyen. Si ya leíste Comparativa de benchmarks de evaluación de agentes, sabes qué conjuntos públicos sirven para selección. Aquí nos centramos en construir datos de evaluación desde tu propio entorno de producción.

2. Campos clave de un agent eval dataset

2.1 Campos obligatorios

Un agent eval dataset no es solo guardar entrada de usuario y respuesta esperada. Debe registrar trayectoria de tool calls, transiciones de estado y juicio humano. Estos son los campos obligatorios:

CampoDescripciónFuente
inputDescripción de la tarea del usuarioProduction trace / diseño manual
expected outputRespuesta final esperadaAnotación humana / golden set
expected tool callsLista esperada de tool callsAnálisis de trayectoria, como ["check_permission", "refresh_data"]
trajectory assertionsRestricciones de trayectoria: obligatorio, prohibido u ordenadoState machine + flujo de aprobación
human labelsJuicio humano: correcto, incorrecto o parcialRetrospectiva de incidente / cola de etiquetado

LangSmith, en Evaluation concepts, recomienda que la evaluación de agentes cubra selección de herramientas, formato de argumentos y trayectoria de ejecución, no solo la respuesta final. OpenAI Agents SDK Tracing ofrece campos como trace_id, workflow_name y span para registrar tool calls y eventos de estado, pero esos campos brutos deben anonimizarse y extraerse antes de entrar en un dataset.

2.2 Campos opcionales

Añade estos campos según la necesidad del negocio:

CampoDescripciónUso
approval recordsRegistros de aprobación: aprobador, hora y resultadoTool calls que requieren aprobación en el modelo de permisos
state transitionsSecuencia de transiciones de estadoRestricciones de state machine, como ["init", "check", "approve"]
metadatatraceId, entorno, versión del modeloDiagnóstico de incidentes y comparación de versiones

Si leíste el modelo de permisos de agentes (N157) y el diseño de aprobación humana (N155), sabes que approval records debe guardar paso de aprobación, aprobador y resultado, para verificar que una operación de alto riesgo pasó por aprobación.

2.3 Anonimización y privacidad

Un production trace no puede entrar tal cual en el conjunto de evaluación. La documentación de OpenAI Agents SDK Tracing advierte que algunos spans pueden capturar entradas/salidas del modelo o entradas/salidas de herramientas de función, por lo que debes configurar si se incluyen datos sensibles.

Campos que deben anonimizarse: PII (nombre, email, teléfono), secrets (API key, contraseña de base de datos), datos de clientes (número de pedido, monto de transacción).

Campos que conviene conservar: traceId, span_id para diagnóstico, workflow_name para clasificación, nombre de herramienta y nombre de estado para assertions.

Los métodos de anonimización incluyen reemplazar por placeholders como <user_id>, aplicar hash o eliminar directamente. Phoenix, en Running Evals on Traces, muestra que un trace puede convertirse en entrada de evaluación, pero aun así necesita label, score y rubric. No metas un trace bruto completo directamente en el eval dataset.

3. De production trace a eval example

3.1 Flujo de recolección de datos

Para convertir un production trace en eval example hacen falta cuatro pasos: anonimización, etiquetado, estratificación y almacenamiento. No es una obra única de ingeniería; es operación continua.

Checklist:

  1. Exportar traces fallidos desde la plataforma de monitoreo (ver Monitoreo de agentes y recuperación ante fallos).
  2. Clasificar por tipo de fallo: error de tool call, error de formato de argumento, error de transición de estado, error de respuesta final.
  3. Anonimizar: eliminar PII/secret/datos de clientes y conservar traceId, span_id, workflow_name.
  4. Añadir etiqueta humana: correcto/incorrecto/parcialmente correcto + motivo del fallo.
  5. Guardar por capa: golden set / negative cases / edge cases.

La documentación de Phoenix datasets indica que los examples pueden recolectarse desde production, staging, evaluations o manual. Producción aporta la distribución real de tareas; staging ayuda a completar escenarios de borde.

3.2 Criterios de estratificación

CapaCriterioUso
golden set100% correcto + tareas frecuentesDebe pasar el release gate; umbral de pass rate
negative casesPatrones típicos de falloAlertas de regresión; evita repetir el mismo error
edge casesEscenarios long-tail / de bordeCobertura adicional, incluir según criterio

Dimensiones de etiquetado, alineadas con una rubric LLM-as-judge: corrección de selección de herramientas, corrección del formato de argumentos, corrección del orden de ejecución, calidad de la respuesta final y alineación con etiquetas humanas.

OpenAI Evaluation best practices recomienda que los datos de prueba incluyan typical, edge y adversarial cases, con human expert labellers. Esta estratificación corresponde a esa idea, pero enfatiza tareas frecuentes y modos de fallo típicos, porque el objetivo es proteger el release gate, no cubrir todo escenario posible.

4. Cómo escribir trajectory assertions

4.1 Tipos de restricciones de trayectoria

Las trajectory assertions definen las reglas de tool calls, formato de argumentos, transiciones de estado y aprobaciones que el agente debe cumplir. Estos son cinco tipos comunes:

Tipo de restricciónEjemploCondición de fallo
Lista de herramientas obligatorias["check_permission", "refresh_data", "generate_report"]Falta cualquier herramienta obligatoria
Lista de herramientas prohibidas["delete_user", "drop_table"]Se usa una herramienta prohibida
Restricción de formato de argumentos{"refund_amount": "number", "user_id": "uuid"}El tipo del argumento es incorrecto
Orden de transición de estado["init", "check", "approve", "execute"]El estado salta o se repite
Existencia de paso de aprobación["need_approval", "approval_granted"]Falta el evento de aprobación

LangSmith Evaluation concepts menciona trajectory, tool selection y argument formatting como partes de la evaluación de agentes. Phoenix Running Evals on Traces usa span_id para asociar resultados de evaluación con un segmento concreto de ejecución, lo que permite que una assertion de trayectoria apunte al span fallido.

Si leíste la evaluación de planificación de agentes (N158) y los límites entre state machine y prompt, sabes que los campos de trayectoria de estado vienen de state, event y checkpoint. Sirven para verificar si la transición de estado sigue el orden esperado.

4.2 Ejemplo de código

Este es un pseudocódigo de trajectory assertions para una evaluación de agentes genérica:

# Ejemplo de trajectory assertions
def assert_trajectory_correct(result):
    # Extraer la lista de tool calls
    tools_called = [call.tool for call in result.tool_calls]

    # Herramientas obligatorias
    required_tools = ["check_permission", "refresh_data"]
    for tool in required_tools:
        assert tool in tools_called, f"Missing required tool: {tool}"

    # Herramientas prohibidas
    forbidden_tools = ["delete_user"]
    for tool in forbidden_tools:
        assert tool not in tools_called, f"Called forbidden tool: {tool}"

    # Restricciones de formato de argumentos
    for call in result.tool_calls:
        if call.tool == "refund":
            assert isinstance(call.args["refund_amount"], (int, float)), "refund_amount must be number"
            assert len(call.args["user_id"]) == 36, "user_id must be uuid format"

    # Orden de transiciones de estado
    expected_states = ["init", "check", "approve", "execute"]
    actual_states = [event.state for event in result.state_events]
    assert actual_states == expected_states, "State transition order mismatch"

    # Existencia de paso de aprobación
    approval_events = [e for e in result.state_events if e.type == "approval"]
    assert len(approval_events) >= 1, "Missing approval step"

Este código muestra cómo comprobar herramientas obligatorias, herramientas prohibidas, formatos de argumentos, orden de transiciones de estado y pasos de aprobación. En una implementación real puedes usar trajectory assertions de LangSmith o trace eval de Phoenix, pero la lógica central es la misma.

Si leíste Evaluación de planificación de agentes, sabes que las trayectorias de planificación también pueden convertirse en muestras de regresión para verificar descomposición de tareas y autocorrección.

5. Rubric por capas para LLM-as-judge

5.1 Por qué el score total no basta

Si LLM-as-judge solo entrega un score total, el resultado fluctúa y es difícil de diagnosticar. Un 80 puede significar que la selección de herramientas fue incorrecta pero la respuesta salió bien por casualidad, o que la respuesta fue incorrecta pero el formato se veía bien. No puedes distinguir si el problema está en el prompt, tool schema, retrieval o state machine.

LangSmith Evaluation concepts recomienda definir criterios de calidad para componentes clave del agente: correct tool selection, proper argument formatting y trajectory. Al puntuar cada componente por separado, es mucho más rápido localizar regresiones después de un cambio de modelo o prompt.

Si leíste Prácticas avanzadas de prompt engineering, sabes que DeepEval también enfatiza métricas por capas como TaskCompletenessMetric, no solo la salida final.

5.2 Tabla de puntuación por capas

La siguiente rubric divide la evaluación de agentes en cinco dimensiones, cada una con 0-2 puntos:

Dimensión0 puntos1 punto2 puntos
Corrección de selección de herramientasHerramienta incorrectaParcialmente correctaTotalmente correcta
Corrección del formato de argumentosError de tipoAlgunos campos con errores de formatoTotalmente correcta
Corrección del orden de ejecuciónSalto de estadoDesviación de ordenTotalmente correcta
Calidad de la respuesta finalNo satisface la necesidadSatisface parcialmenteSatisface por completo
Alineación con etiqueta humanaContradice el juicio expertoParcialmente alineadaMuy alineada

Ejemplo de configuración de rubric para LangSmith o Phoenix:

rubric:
  dimensions:
    - name: tool_selection
      weight: 0.3
      criteria:
        0: "Llamó la herramienta incorrecta"
        1: "Llamó algunas herramientas correctas"
        2: "La selección de herramientas es totalmente correcta"

    - name: argument_formatting
      weight: 0.2
      criteria:
        0: "El tipo de argumento es incorrecto"
        1: "Algunos campos tienen errores de formato"
        2: "El formato de argumentos es totalmente correcto"

    - name: execution_order
      weight: 0.2
      criteria:
        0: "La transición de estado salta o se repite"
        1: "El orden de ejecución tiene desviaciones"
        2: "El orden de ejecución es totalmente correcto"

    - name: final_answer_quality
      weight: 0.2
      criteria:
        0: "No satisface la solicitud del usuario"
        1: "Satisface parcialmente la solicitud"
        2: "Satisface por completo la solicitud"

    - name: human_alignment
      weight: 0.1
      criteria:
        0: "Contradice el juicio experto"
        1: "Parcialmente alineado"
        2: "Muy alineado"

La selección de herramientas tiene el peso más alto (0.3) porque el núcleo de un agente es llamar la herramienta correcta. La alineación humana tiene el peso más bajo (0.1), porque sirve para calibrar si LLM-as-judge coincide con el juicio experto.

6. Release gates y pruebas de regresión

6.1 Pasos de integración en CI

El valor de un agent eval dataset aparece cuando se conecta a CI y se convierte en release gate. Estos son los pasos:

Checklist:

  1. Añadir un paso de ejecución de eval en la CI pipeline, como pytest, LangSmith offline eval o Phoenix experiments.
  2. Configurar un umbral de pass rate, por ejemplo 90%.
  3. Exigir que el golden set pase completo (100%).
  4. Configurar reglas de alerta para negative cases. Pueden notificar al equipo sin bloquear.
  5. Configurar comparación de versiones (improvement/regression) entre baseline y versión actual.
  6. Definir cuándo se dispara el gate: PR / merge / canary.

LangSmith Evaluation concepts menciona que offline evaluations puede usarse para regression testing, unit testing y backtesting sobre examples de datasets. La documentación de Phoenix experiments explica que se pueden comparar cambios de prompt, LLM o lógica de aplicación para juzgar improvement/regression. DeepEval afirma que sus evals son pytest-native y pueden ejecutarse en CI/CD o Python scripts, usando LLMTestCase y TaskCompletenessMetric para puntuar agent traces por capas.

6.2 Tabla de umbrales

MétricaUmbralAcción al fallar
pass rate≥ 90%Bloquear merge
golden set100% aprobadoBloquear merge
negative casesDispara alertaNo bloquear, pero notificar al responsable del equipo
version comparisonSin regressionBloquear merge

Ejemplo de configuración de CI:

evaluation:
  triggers:
    - pull_request
    - merge_to_main
    - canary_deployment

  conditions:
    pass_rate: 0.9
    golden_set: 1.0
    no_regression: true

  notifications:
    on_failure: ["team-lead", "on-call"]
    on_negative_alert: ["team-lead"]

Los disparadores incluyen PR, para evitar que código problemático llegue a main; merge, para asegurar que el estado fusionado aún cumple condiciones; y canary, para validar antes de tráfico de producción. Si leíste control de costos y enrutamiento de modelos (N156), sabes que los umbrales de costo también pueden convertirse en condiciones de gate. Aquí nos centramos en umbrales de evaluación.

7. Retrospectiva de un caso real

7.1 Descripción del escenario

El agente de informes diarios funcionaba bien la semana pasada: llamaba check_permission para verificar permisos, refresh_data para refrescar datos y luego generate_report para generar el reporte. Tras actualizar el modelo, el agente sigue entregando un resumen final que parece correcto, pero la trayectoria omite check_permission y refresh_data.

El usuario recibe un reporte sin chequeo de permisos y con datos desactualizados, aunque a simple vista no se nota. Un benchmark público no detecta este riesgo porque no tiene tu tool schema ni tu state machine.

7.2 Localización del problema

Exporta el trace fallido desde la plataforma de monitoreo (ver Monitoreo de agentes y recuperación ante fallos). El análisis de trayectoria muestra que la lista de tool calls no contiene check_permission ni refresh_data, el estado salta de init directamente a execute, faltan check y approve, y la respuesta final parece correcta aunque la fuente de datos no se refrescó.

Etiqueta: error de selección de herramientas + salto de transición de estado.

7.3 Actualización del dataset

Añade el caso fallido a negative cases. A la vez, refuerza el golden set: busca la tarea de informe diario exitosa de la semana anterior, incluye la secuencia completa de tool calls y etiquétala como caso correcto.

Actualiza las trajectory assertions: añade check_permission y refresh_data a la required tool list, y fija la assertion de orden de estado como ["init", "check", "approve", "execute"].

7.4 Intercepción por el gate de CI

La siguiente PR dispara una ejecución de eval. El negative case genera una alerta: falta el tool call a check_permission. El golden set pasa completo, así que el caso exitoso base sigue bien.

La causa está en el prompt. Tras la actualización, el modelo interpreta “generar reporte” como ejecución directa e ignora el chequeo previo y el refresco de datos.

7.5 Corrección y regresión

Corrige el prompt y enfatiza que antes de generar el reporte se deben verificar permisos y refrescar datos. Ejecuta de nuevo eval: el pass rate sube de 85% a 95%, el negative case pasa sin alerta, el golden set pasa completo y la comparación de versiones muestra improvement sin regression.

Merge y release. El gate de CI evitó que esta regresión llegara a producción.

7.6 Tabla de mapeo de campos

EtapaCampos usados
Localización del problematraceId, span_id, tool_calls, state_events
Actualización del datasetinput, expected tool calls, trajectory assertions, human labels
Gate de CIpass rate, golden set, negative cases
Verificación del fixpass rate, version comparison

Este ciclo muestra el camino completo desde fallo de producción hasta prueba de regresión. Después de cada retrospectiva de incidente, convierte traceId, tool call, approvalId, state event y juicio humano en eval example. Así el próximo release no tropieza con el mismo error.

8. Qué leer después

  • State machines de agentes y límites del prompt: entender de dónde salen las restricciones de transición de estado y los campos de trajectory assertion
  • Modelo de permisos de agentes: entender approval records y reglas de tool calls de alto riesgo
  • Diseño de aprobación humana: convertir approval records y flujos de aprobación en pruebas duraderas
  • Control de costos y enrutamiento de modelos: entender cómo los umbrales de costo se vuelven condiciones de gate
  • Monitoreo de agentes y recuperación ante fallos: exportar failed traces y construir una retrospectiva de incidentes

Construir un dataset de evaluación de agentes y pruebas de regresión

Convierte tareas reales de agentes, traces de producción, casos de fallo, trayectorias de tool calls y etiquetas humanas en un eval dataset versionado que se ejecuta en release gates de CI.

⏱️ Estimated time: 60 min

  1. 1

    Step 1: Recolectar tareas candidatas

    Recolecta tareas reales desde producción, staging, pruebas manuales y retrospectivas de incidentes. Prioriza flujos frecuentes, de alto riesgo o que ya hayan sufrido regresiones.
  2. 2

    Step 2: Vincular traces de ejecución

    Vincula cada tarea con traceId, span_id, state events, tool calls, approval records y salida final para poder ubicar el fallo en el punto de ejecución correcto.
  3. 3

    Step 3: Anonimizar datos brutos

    Elimina o reemplaza PII, secrets, datos de clientes, números reales de pedido y campos sensibles de salidas de herramientas. Conserva solo la información estructurada necesaria para evaluar.
  4. 4

    Step 4: Extraer el schema del dataset

    Añade input, expected output, expected tool calls, trajectory assertions, rubric, risk tags, human labels y metadatos de versión a cada muestra.
  5. 5

    Step 5: Separar por capas

    Divide las muestras en golden set, negative cases, edge cases y regression cases, cada una con su umbral de paso y regla de alerta.
  6. 6

    Step 6: Configurar evaluadores

    Usa code evaluator, rule evaluator, LLM-as-judge o human annotation según la dimensión evaluada. No dependas de un único score agregado.
  7. 7

    Step 7: Conectar con release gates

    Ejecuta la regression suite en CI antes de actualizaciones de modelo, cambios de prompt y cambios de tool schema.
  8. 8

    Step 8: Actualizar después de incidentes

    Después de cada retrospectiva de incidente, añade nuevos cases y registra dataset version, motivo del cambio, alcance y política de retención de datos.

FAQ

¿Se pueden usar traces de producción directamente como eval dataset?
No. Primero hay que anonimizarlos: eliminar PII, secrets y datos de clientes, añadir etiquetas humanas como correcto, incorrecto o parcialmente correcto, y luego clasificar la muestra en golden set, negative cases o edge cases. La documentación de OpenAI Agents SDK Tracing también advierte que algunos spans pueden capturar entradas y salidas sensibles.
¿Cómo se escribe una expected trajectory para los tool calls de un agente?
Parte de una ejecución exitosa, extrae la secuencia de tool calls, define herramientas obligatorias y prohibidas, y añade restricciones sobre el orden de transiciones de estado. La evaluación de agentes debe revisar selección de herramientas, formato de argumentos y trayectoria de ejecución, no solo la respuesta final.
¿Todos los fallos deben entrar en la regression suite?
No. Prioriza casos frecuentes, de alto riesgo, que hayan causado incidentes, cubran transiciones de estado críticas o eviten una regresión repetida. Los edge cases de cola larga pueden quedarse en esa capa hasta que su riesgo justifique un gate duro.
¿Cómo fijar umbrales de release cuando los scores LLM-as-judge fluctúan?
No mires solo el score total. El golden set debería pasar completo, y el umbral de pass rate debe reflejar el riesgo del negocio, por ejemplo 90%. Evalúa por separado selección de herramientas, formato de argumentos, trayectoria, calidad de respuesta final y alineación con etiquetas humanas, y combínalo con assertions de código y reglas.
¿El dataset debe guardar entradas de usuario y salidas de herramientas en bruto?
Solo después de anonimizar. Guarda la entrada de usuario sin PII o con placeholders, y conserva solo los campos clave de las salidas de herramientas. Puedes mantener traceId y span_id para diagnóstico, pero no deberías meter un trace bruto completo directamente en el eval dataset.
¿Cómo diagnosticar rápido una tarea antigua que empeora tras actualizar el modelo?
Empieza por la alerta del gate de CI. Revisa pass rate y comparación de regresión, abre el test case fallido y analiza selección de herramientas, formato de argumentos y transiciones de estado. La causa suele estar en el prompt, el tool schema, retrieval, el modelo de permisos o la frontera de la state machine.
¿Qué relación hay entre un eval dataset propio y los benchmarks públicos?
Los benchmarks públicos miden capacidad general y sirven para elegir modelos. Un dataset propio mide tus tareas de producto, herramientas, permisos, distribución de datos y modos de fallo; por eso es la señal principal para decisiones de release. Se complementan, pero no se reemplazan.
¿Qué hacer si OpenAI Evals platform se cierra?
Al 2026-07-07, la documentación oficial de OpenAI indica que Evals platform pasará a read-only para usuarios existentes el 2026-10-31 y hará shutdown el 2026-11-30. Mantén el dataset portable: define test data, ground truth y grader en JSON/YAML, en lugar de atar tu sistema de regresión a una sola plataforma.

15 min de lectura · Publicado el: 21 oct 2026

Comentarios

Inicia sesión con GitHub para dejar un comentario

Easton BlogEaston Blog