Ver equipos

AI Supercomputers es el portal de IA local del Grupo Ietres.La compra se realiza en nuestras tiendas oficiales. Si una referencia no aparece con stock, consulta la posibilidad de reserva y la siguiente entrada prevista.

Calidad · RAG · agentes · rendimiento

Cómo evaluar una IA local antes de ponerla en producción

Construye un banco de pruebas que puedas repetir para comparar modelos, instrucciones, buscadores documentales, herramientas y hardware. Con casos reales de tu empresa medirás la calidad, los errores críticos, la seguridad, el tiempo de respuesta, la memoria y cuántas peticiones simultáneas soporta cada configuración.

Paso 1 · contrato de calidad

Decide qué significa «correcto» antes de mirar respuestas

En palabras sencillas

Evaluar no es "me gusta cómo responde": es un examen fijo. Ejemplo real: las mismas 30 preguntas de tu negocio — con sus respuestas correctas escritas de antemano — pasadas a cada modelo candidato; gana el que más acierta. Sin examen se cambia de modelo por sensaciones; con examen, por datos.

Una evaluación útil parte del proceso. Define el error crítico, el error tolerable, la salida mínima y la revisión humana. No mezcles una tarea creativa con una extracción exacta bajo una única puntuación.

TareaCorrectoError críticoMétrica principal
RAGRespuesta apoyada por fuentes autorizadasCita inexistente o fuga entre rolesRecall de evidencia + groundedness
ExtracciónJSON válido y campos correctosImporte, referencia o identidad incorrectaExactitud por campo
ClasificaciónEtiqueta permitidaClase crítica confundidaPrecision/recall por clase
BorradorÚtil y verificableCompromiso o hecho inventadoAceptación con cambios menores
AgenteHerramientas y argumentos correctosAcción no autorizadaÉxito sin efectos indebidos
ImagenSalida ajustada al workflowContenido prohibido o representación incorrectaRevisión por criterios y tiempo

Plantilla de plan

evaluation-plan.yaml
name: soporte-rag
owner: soporte
system_under_test:
  runtime: ollama
  model_alias: instruct-candidate-a
  prompt_version: support-v3
  index_version: manuals-release-hash
scope:
  task: responder con evidencia
  users: soporte-nivel-1
  languages: [es]
thresholds:
  critical_errors: 0
  retrieval_recall_at_5: 0.90
  citation_precision: 0.98
  schema_valid: 1.00
  p95_latency_seconds: 20
  permission_leaks: 0
repetitions: 3
reviewers: [experto-proceso, tecnico-evaluacion]

Los números son ejemplos de estructura, no umbrales universales. Debes fijarlos según impacto y capacidad del proceso.

Paso 2 · dataset representativo

Separa desarrollo, aceptación y pruebas adversarias

Desarrollo

Casos que el equipo puede consultar mientras ajusta prompts, fragmentación y parámetros.

Aceptación

Casos ocultos al ajuste. Se ejecutan para decidir si una versión puede avanzar.

Adversarial

Inyección, permisos, entradas largas, ambigüedad, ausencia de respuesta y herramientas inválidas.

Regresión

Errores reales corregidos que nunca deben reaparecer.

Cobertura que debes registrar

  • Tipos de usuario y permisos.
  • Idiomas, formatos y longitudes.
  • Casos frecuentes, raros y de frontera.
  • Documento vigente, obsoleto, contradictorio y ausente.
  • Campos vacíos, duplicados y malformados.
  • Preguntas con códigos exactos y con lenguaje natural.
  • Operaciones permitidas, denegadas y reversibles.
  • Situaciones en las que el modelo debe abstenerse.

Formato JSONL

JSONL es un archivo de texto en el que cada línea contiene un objeto JSON independiente. Esta estructura permite añadir casos, filtrarlos y procesarlos uno a uno sin cargar todo el conjunto en memoria. En el ejemplo, cada línea describe la entrada, quién puede ejecutarla y qué resultado se considera correcto o prohibido.

cases.jsonl
{"id":"rag-001","input":"...","user_groups":["soporte"],"relevant_sources":["manual-42#sec-3"],"required_facts":["..."],"forbidden_claims":["..."],"must_abstain":false,"risk":"medio"}
{"id":"rag-002","input":"...","user_groups":["ventas"],"relevant_sources":[],"required_facts":[],"forbidden_claims":["contenido-soporte"],"must_abstain":true,"risk":"alto"}
{"id":"tool-001","input":"...","allowed_tools":["crear_borrador"],"expected_tool":"crear_borrador","expected_args":{"ticket_id":"SUP-000001"},"must_require_approval":true}

El dataset no debe contener secretos ni datos que el entorno de evaluación no esté autorizado a tratar. Seudonimiza y conserva una tabla de correspondencia fuera del repositorio cuando sea imprescindible.

Paso 3 · entorno reproducible

Fija todo lo que pueda cambiar la salida

Identificador de configuración

run-metadata.json
{
  "run_id": "eval-00042",
  "model_family": "familia-candidata",
  "model_artifact": "nombre-y-hash",
  "runtime": "nombre-y-version-probada",
  "prompt_hash": "sha256:...",
  "dataset_hash": "sha256:...",
  "index_hash": "sha256:...",
  "temperature": 0,
  "seed": 42,
  "max_output_tokens": 1200,
  "context_limit": 16000,
  "hardware": "gpu-y-memoria",
  "driver": "version-probada"
}

No todos los backends garantizan determinismo aunque fijes semilla y temperatura. Repite los casos y registra dispersión. Para comparación, mantén idénticos prompt, contexto y herramientas salvo la variable que estás estudiando.

Calienta el modelo

La primera petición incluye carga de pesos y no representa el servicio calentado. Mide por separado arranque en frío, primera petición y operación estable. Para servicios con descarga automática de modelos, prueba también el retorno después de inactividad.

Evaluación de generación

Combina comprobaciones automáticas y revisión experta

Comprobaciones automáticas

  • JSON válido y conforme al esquema.
  • Campos obligatorios, tipos, longitudes y enumeraciones.
  • Presencia o ausencia de cadenas críticas.
  • Citas que resuelven a una fuente recuperada.
  • Cálculos comparados con un motor determinista.
  • Idioma, estructura y límite de salida.

Rúbrica de revisión

Criterio0123
ExactitudIncorrectaErrores importantesCorrecta con maticesCorrecta y precisa
CoberturaNo respondeOmite lo esencialCubre casi todoCubre lo necesario
EvidenciaInventadaDébilParcialDirecta y suficiente
AcciónInseguraAmbiguaRevisableClara y dentro del alcance
FormaInválidaDifícil de usarUtilizableLista para revisar

Define ejemplos ancla para cada puntuación. Si dos revisores discrepan con frecuencia, la rúbrica es ambigua o la tarea no está suficientemente especificada.

Errores críticos como veto

Una media alta puede ocultar una fuga o una acción peligrosa. Cuenta por separado errores críticos y exige cero cuando el impacto lo requiera.

Evaluación de RAG

Separa recuperación de generación

Si la respuesta es mala, primero comprueba si la evidencia correcta llegó al contexto. Ajustar el modelo no resuelve una recuperación defectuosa.

Métricas de recuperación

  • Recall@k: proporción de preguntas en las que al menos una fuente relevante aparece entre los primeros k resultados.
  • Precision@k: proporción de resultados recuperados que son relevantes.
  • MRR: favorece que la primera fuente relevante aparezca pronto.
  • nDCG: útil cuando hay varios grados de relevancia.
  • Cobertura de permisos: fuentes relevantes accesibles al rol frente a fuentes bloqueadas.

Métricas de respuesta

  • Hechos apoyados por los fragmentos.
  • Citas correctas y resolubles.
  • Ausencia de afirmaciones no respaldadas.
  • Respuesta de abstención cuando no hay evidencia.
  • Uso de la versión vigente.

Tabla de diagnóstico

RecuperaciónRespuestaDiagnósticoAcción
MalaMalaÍndice, consulta o filtrosFragmentación, metadatos, híbrida, reranker
BuenaMalaPrompt, modelo o contextoContrato de respuesta, modelo, orden de evidencia
MalaAparentemente buenaRespuesta por conocimiento previoExigir citas y probar preguntas propias
BuenaBuenaCandidato válidoProbar seguridad, regresión y carga

Script sencillo de recall

retrieval_metrics.py
def recall_at_k(retrieved_ids, relevant_ids, k):
    relevant = set(relevant_ids)
    if not relevant:
        return None
    return int(bool(set(retrieved_ids[:k]) & relevant))

def precision_at_k(retrieved_ids, relevant_ids, k):
    selected = retrieved_ids[:k]
    if not selected:
        return 0.0
    relevant = set(relevant_ids)
    return sum(item in relevant for item in selected) / len(selected)
Evaluación de herramientas y agentes

Mide la trayectoria, no solo el texto final

DimensiónQué registrar
SelecciónHerramienta elegida frente a permitidas y esperada
ArgumentosSchema, valores, IDs y límites
AutorizaciónRol, aprobación y credencial utilizada
EjecuciónResultado real, error, reintento e idempotencia
TrayectoriaNúmero de pasos, bucles y condición de parada
EfectosCambios previstos, no previstos y reversibilidad
ExplicaciónResumen fiel de lo que ocurrió

Casos obligatorios

  • Herramienta inexistente.
  • Argumento fuera de enumeración.
  • ID válido con usuario sin permiso.
  • Operación duplicada.
  • Timeout de API.
  • Resultado parcial.
  • Documento que ordena usar una herramienta.
  • Petición de elevar privilegios.
  • Máximo de iteraciones alcanzado.

Un agente falla aunque su texto final sea correcto si llamó a una herramienta que no necesitaba, usó una credencial excesiva o dejó un efecto no esperado.

Rendimiento y capacidad

Mide prefill, generación, cola y memoria

Métricas técnicas

  • Tiempo de carga del modelo.
  • Tiempo hasta primer token.
  • Tiempo de prefill o procesamiento de entrada.
  • Tokens de salida por segundo.
  • Latencia total y percentiles.
  • Memoria de GPU o unificada máxima.
  • Peticiones en cola y rechazadas.
  • Throughput total con concurrencia.
  • Estabilidad térmica y errores.

Matriz de carga

EntradaSalidaConcurrenciaObjetivo
CortaCorta1Latencia interactiva base
LargaCorta1Coste de prefill y contexto
CortaLarga1Velocidad de generación
RepresentativaRepresentativaPico previstoCola y throughput
Máxima permitidaMáxima permitidaPicoLímites y recuperación

Percentiles

Registra mediana, p90, p95 y p99 cuando haya suficientes muestras. El promedio oculta colas largas. También mide errores y peticiones canceladas.

Prueba de memoria

Registro periódico NVIDIA
nvidia-smi --query-gpu=timestamp,name,memory.used,memory.total,utilization.gpu,temperature.gpu,power.draw \
  --format=csv -l 2 > gpu-metrics.csv

En plataformas de memoria unificada, complementa con métricas del sistema y del runtime. La cifra de memoria disponible no garantiza que una carga tenga la latencia deseada.

Harness reproducible

Ejecuta el dataset y conserva resultados crudos

Este ejemplo usa solo la biblioteca estándar de Python y una API local de chat. Adapta el parser de métricas al runtime. No evalúa calidad por sí solo; produce respuestas y tiempos para las comprobaciones posteriores.

run_eval.py
from __future__ import annotations
import hashlib
import json
import pathlib
import time
import urllib.request

API = "http://127.0.0.1:11434/api/chat"
MODEL = "MODELO_PROBADO"
DATASET = pathlib.Path("cases.jsonl")
OUTPUT = pathlib.Path("results.jsonl")


def call_model(case: dict) -> dict:
    payload = {
        "model": MODEL,
        "stream": False,
        "messages": [
            {"role": "system", "content": case.get("system", "Responde de forma verificable.")},
            {"role": "user", "content": case["input"]},
        ],
        "options": {"temperature": 0, "seed": 42},
    }
    request = urllib.request.Request(
        API,
        data=json.dumps(payload).encode("utf-8"),
        headers={"Content-Type": "application/json"},
        method="POST",
    )
    started = time.perf_counter()
    with urllib.request.urlopen(request, timeout=300) as response:
        body = json.load(response)
    return {
        "id": case["id"],
        "seconds": time.perf_counter() - started,
        "response": body.get("message", {}).get("content", ""),
        "runtime_metrics": {k: body.get(k) for k in (
            "total_duration", "load_duration", "prompt_eval_count",
            "prompt_eval_duration", "eval_count", "eval_duration")},
    }


def main() -> None:
    dataset_hash = hashlib.sha256(DATASET.read_bytes()).hexdigest()
    with DATASET.open(encoding="utf-8") as source, OUTPUT.open("w", encoding="utf-8") as target:
        for line in source:
            case = json.loads(line)
            result = call_model(case)
            result["dataset_sha256"] = dataset_hash
            target.write(json.dumps(result, ensure_ascii=False) + "\n")
            target.flush()

if __name__ == "__main__":
    main()

Conserva tres capas

  1. Entrada: dataset, configuración y hashes.
  2. Salida cruda: respuesta, recuperación, herramientas, tiempos y errores.
  3. Puntuación: reglas automáticas, revisión y decisión.
Comparación y decisión

No cambies varias variables a la vez

Orden recomendado de experimentos

  1. Establece una base

    Modelo compacto, prompt simple, sin RAG o con recuperación mínima.

  2. Mejora la recuperación

    Fragmentación, filtros, híbrida y reranking con el modelo fijo.

  3. Compara modelos

    Mismo contexto y parámetros; registra calidad y memoria.

  4. Ajusta prompts y formato

    Una modificación por experimento.

  5. Optimiza rendimiento

    Contexto, cuantización, motor, lote y concurrencia sin rebasar calidad.

  6. Prueba el sistema final

    Incluye identidad, herramientas, red, copias y operación.

Informe de decisión

Resumen ejecutivo
Configuración candidata: ...
Caso y alcance: ...
Dataset y hash: ...
Calidad: aprobado / no aprobado
Errores críticos: ...
RAG: recall, citas, permisos
Herramientas: éxito, rechazos, efectos
Rendimiento: p50/p95, throughput, memoria
Seguridad: pruebas ejecutadas y excepciones
Operación: copia, restauración y rollback
Riesgos residuales: ...
Decisión: piloto / preproducción / producción / rechazar
Responsables y próxima revisión: ...
Regla de aceptación: un candidato no compensa un error crítico con más velocidad ni una media de calidad alta. Los requisitos de veto se evalúan primero.
Regresión continua

Cada error real debe convertirse en una prueba

Cuando un usuario detecta un fallo, anonímalo, clasifícalo y añádelo al conjunto de regresión. Ejecuta la batería antes de cambiar modelo, prompt, runtime, índice, documentos, embeddings, reranker o herramienta.

Puertas automáticas

  • Cero errores críticos.
  • Cien por cien de respuestas conforme al esquema cuando sea obligatorio.
  • Sin fuga de permisos.
  • Recuperación y calidad no inferiores al margen acordado.
  • Latencia y error dentro del presupuesto.
  • Restauración y rollback disponibles.

Publica un registro de versiones interno que relacione cambio, resultado y aprobación. La guía de operación explica despliegues y reversión.

Checklist

Evaluación completa antes de producción

  • Caso, propietario, salida y error crítico definidos.
  • Dataset de desarrollo y aceptación separados.
  • Casos adversarios y de abstención incluidos.
  • Modelo, runtime, prompt, índice y hardware identificados.
  • Repeticiones y parámetros fijados.
  • Calidad automática y humana documentada.
  • RAG evaluado antes de generación.
  • Herramientas evaluadas por trayectoria y efecto.
  • Seguridad y aislamiento por roles probados.
  • Latencia, memoria, cola y concurrencia medidas.
  • Resultados crudos y hashes conservados.
  • Umbrales, veto y decisión aprobados.
  • Regresión integrada en el cambio.
Del tutorial a la compra

Convierte el caso de uso en una decisión de hardware verificable

Define la tarea, prepara una prueba y mide memoria, tiempo y usuarios simultáneos. El objetivo es traducir el tutorial a requisitos de compra concretos sin presentar la implantación como un servicio estándar.

  1. 01

    Define la carga

    Concreta tarea, familia de modelo, contexto, lote y usuarios simultáneos.

    Aclarar el caso de uso →
  2. 02

    Dimensiona memoria

    Compara VRAM, memoria coherente, velocidad y margen de crecimiento.

    Usar el recomendador de hardware →
  3. 03

    Compra en la tienda

    Abre la ficha comercial para consultar configuración, precio cerrado, disponibilidad y condiciones vigentes.

    Contacto y disponibilidad →
Si la carga cabe en VRAM

RTX PRO 6000 · 96 GB

Prioriza una GPU profesional para inferencia, imagen, vídeo o serving cuando el modelo y el contexto caben en sus 96 GB de VRAM.

Ver ficha profesional →
Si todavía no tienes medidas

Recomendador de hardware

Responde cinco preguntas y compara el equipo actual, una GPU NVIDIA, la RTX PRO 6000 y sistemas GB10 como DGX Spark, ASUS Ascent GX10 o Lenovo ThinkStation PGX.

Comparar opciones →

aisupercomputers.es aporta guías y herramientas de decisión. La compra, el precio cerrado en la ficha y el soporte comercial desde España se gestionan en las tiendas del grupo Ietres.

Preguntas frecuentes

Evaluar modelos y sistemas

¿Puedo usar un benchmark público para elegir modelo?

Como señal inicial, no como decisión. Debes probar idioma, formato, datos y errores de tu proceso. Un modelo bien clasificado puede fallar en códigos, abstención, contexto o herramienta.

¿Cuántos casos necesito?

Los suficientes para cubrir clases, riesgos y variantes. Empieza con decenas de casos bien revisados y amplía con errores reales; para decisiones críticas necesitarás mayor cobertura y revisión.

¿Puede un LLM puntuar a otro LLM?

Puede ayudar con una rúbrica, pero introduce sesgo y variabilidad. Combínalo con comprobaciones deterministas, ejemplos ancla y revisión humana, especialmente en errores críticos.

¿Qué métrica resume mejor un RAG?

Ninguna por sí sola. Necesitas recuperación de evidencia, precisión de citas, respuesta respaldada, abstención y permisos. Separa dónde falla la cadena.

¿Cómo comparo hardware?

Usa el mismo modelo, runtime, prompts, entradas, salidas y concurrencia. Registra memoria, latencia, throughput y estabilidad. Una prueba de contexto corto no representa un RAG largo.

Las reglas de conexión · ¿2, 4, 50, 500 unidades?