0Pricing
AI Prompt Engineering · Lección

Evaluación de la decisión

Mida la calidad y el coste.

Evaluación de la decisión es una lección gratuita de AI Prompt Engineering en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de AI Prompt Engineering, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de AI Prompt Engineering incluye 4 lecciones en total.

No puede decidir lo que no puede medir

La elección entre prompt, ajuste o enfoque híbrido solo será tan buena como la evaluación que la respalde. Sin un conjunto de evaluación congelado y un modelo de costes, toda comparación será una mera anécdota.

  • La calidad y el coste son dos ejes: no los reduzca prematuramente a un único número
  • El conjunto de evaluación debe mantenerse separado y estable en todos los enfoques que compare
  • La opción ganadora es la que ocupa el mejor punto del frente calidad-coste dadas sus restricciones

Construya primero el conjunto de evaluación congelado

Antes de comparar cualquier opción, cree un conjunto de evaluación reservado con el que ningún enfoque entrene. Debe cubrir la distribución real: casos comunes, casos límite conocidos y entradas adversarias en proporciones aproximadamente similares a las de producción.

Congélelo. Todos los enfoques —solo prompt, ajustado e híbrido— se puntúan con el mismo conjunto. Si la evaluación cambia entre comparaciones, los números no son comparables y la decisión no es válida.

def split_eval(labeled, holdout_ratio=0.2, seed=42):
    import random
    rng = random.Random(seed)        # fixed seed = reproducible split
    data = labeled[:]
    rng.shuffle(data)
    cut = int(len(data) * (1 - holdout_ratio))
    train, frozen_eval = data[:cut], data[cut:]
    return train, frozen_eval        # eval never enters any training run

Elija métricas que correspondan a la tarea

La precisión genérica oculta los fallos específicos de cada tarea. Elija métricas que reflejen lo que realmente importa:

  • Coincidencia exacta o de esquema para salidas estructuradas
  • LLM como juez con puntuación basada en una rúbrica para la calidad abierta, con una muestra auditada por personas
  • Métricas de cola: peor caso y p95, no solo la media
  • Tasas de seguridad y rechazo como condiciones obligatorias, puntuadas por separado de la calidad

Una puntuación media que oculte una cola catastrófica le llevará a tomar una decisión incorrecta.

Puntúe todos los candidatos de forma idéntica

Ejecute las opciones de solo prompt, ajustada e híbrida con el mismo evaluador sobre el mismo conjunto congelado. Registre la calidad y el vector de costes completo de cada una para que la comparación sea homogénea.

def evaluate(candidate, frozen_eval, scorer):
    results = []
    for ex in frozen_eval:
        out = candidate.run(ex['input'])
        results.append(scorer(out, ex['label']))
    mean = sum(results) / len(results)
    p95 = sorted(results)[int(0.95 * len(results)) - 1]
    return {'mean': mean, 'p95_worst': p95}

# Identical frozen_eval + scorer for prompt / tuned / hybrid

Modele el vector de costes completo

El coste no es un único número. Registre todos sus componentes para que la comparación refleje la realidad del volumen que maneja:

  • Inferencia por llamada: tokens de entrada más tokens de salida multiplicados por el precio (los prompts largos cuestan más por llamada)
  • Entrenamiento amortizado: coste del ajuste distribuido entre el volumen de solicitudes previsto
  • Mantenimiento: canalización de datos, ejecuciones de evaluación y reajustes cuando cambia el modelo base
  • Latencia: con un precio independiente cuando afecta a la conversión o a la experiencia de usuario
def monthly_cost(calls, in_tok, out_tok, price_in, price_out,
                 train_cost=0.0, months_amortized=12):
    inference = calls * ((in_tok/1000)*price_in + (out_tok/1000)*price_out)
    amortized_train = train_cost / months_amortized
    return inference + amortized_train

# Long prompt-only: high in_tok, train_cost=0
# Tuned: low in_tok, train_cost>0 amortized over volume

Trace el frente calidad-coste

Con la calidad y el coste mensual de cada candidato, sitúelos en un frente. Un candidato está dominado si otro ofrece una calidad superior y un coste inferior; descarte los candidatos dominados.

Entre los candidatos no dominados, la elección correcta depende de su restricción: seleccione el más barato que supere el umbral de calidad o el de mayor calidad que se mantenga dentro del límite de coste. Ahora la decisión es explícita y defendible, no una cuestión de preferencias.

def non_dominated(candidates):
    # candidate: {'name','quality','cost'} -- higher quality, lower cost better
    keep = []
    for c in candidates:
        dominated = any(o['quality'] >= c['quality'] and o['cost'] <= c['cost']
                        and o != c for o in candidates)
        if not dominated:
            keep.append(c)
    return keep

Significación estadística, no ruido

Una mejora de dos puntos en una evaluación con 200 ejemplos podría ser ruido. Antes de declarar un ganador, compruebe que la diferencia de calidad sea estadísticamente significativa para el tamaño de su evaluación.

Utilice una comparación emparejada (los mismos ejemplos pasan por ambos candidatos) y un intervalo de confianza para la diferencia. Si el intervalo incluye el cero, no tiene una mejora real y el coste adicional del ajuste no está justificado.

def paired_diff_ci(scores_a, scores_b):
    import statistics
    diffs = [a - b for a, b in zip(scores_a, scores_b)]
    mean = statistics.mean(diffs)
    sd = statistics.pstdev(diffs)
    se = sd / (len(diffs) ** 0.5)
    return (mean - 1.96*se, mean + 1.96*se)  # if it spans 0 -> not significant

Proteja la evaluación frente a fugas de datos

La forma más rápida de hacer que el ajuste parezca falsamente superior es la fuga de datos: ejemplos de entrenamiento que se solapan con el conjunto de evaluación. Una evaluación contaminada premia la memorización e infla la puntuación del candidato ajustado.

Elimine duplicados entre las particiones de entrenamiento y evaluación, busque casi duplicados y prefiera una evaluación separada temporalmente (reservada por fecha) para que el modelo ajustado no haya podido verla. La fuga de datos es la causa más habitual de que una decisión de ajuste fracase en producción.

Supervise después del lanzamiento

La decisión no es definitiva en el momento del lanzamiento. La distribución de producción cambia y un modelo ajustado puede degradarse silenciosamente cuando las entradas se alejan de su distribución de entrenamiento.

  • Muestree el tráfico real y puntúelo con la misma rúbrica
  • Configure alertas para las caídas de calidad y el aumento del coste por llamada
  • Vuelva a ejecutar la evaluación congelada cada vez que cambie la versión del modelo base

Considere el enfoque elegido como una hipótesis sometida a pruebas continuas, no como una decisión cerrada.

Registro de decisiones

Registre la comparación en un registro de decisiones escrito: la evaluación congelada, el vector de calidad y costes de cada candidato, el resultado de significación, el volumen supuesto y el punto elegido del frente, junto con su justificación.

Esto hace que la elección sea auditable y pueda reevaluarse. Cuando cambie el volumen o el modelo base, vuelva a abrir el registro y repita la evaluación en lugar de volver a discutirlo basándose en la memoria.

Función de decisión de extremo a extremo

Integre todos los elementos: puntúe cada candidato con la evaluación congelada, asígnele su coste, descarte las opciones dominadas, exija significación frente a la línea base más barata y, después, seleccione según su restricción principal.

def decide(candidates, quality_bar, cost_ceiling):
    frontier = non_dominated(candidates)
    feasible = [c for c in frontier
                if c['quality'] >= quality_bar and c['cost'] <= cost_ceiling]
    if not feasible:
        return 'NO_CANDIDATE_MEETS_CONSTRAINTS'
    # cheapest option that clears the quality bar
    return min(feasible, key=lambda c: c['cost'])['name']

# Prefer prompt-only on ties: lower maintenance TCO

Comprobación rápida

Un modelo ajustado obtiene una puntuación 2 puntos superior a la de un enfoque basado en prompts en una evaluación con 150 ejemplos, pero un intervalo de confianza emparejado para la diferencia incluye el cero. Además, cuesta más al mes. ¿Cuál es la decisión correcta?

Resumen

Decida basándose en una evaluación congelada y un vector de costes honesto, no en la intuición. La calidad y el coste son dos ejes; la respuesta es un punto del frente calidad-coste elegido según su restricción principal.

  • Congele un conjunto de evaluación y puntúe todos los candidatos de forma idéntica con él
  • Elija métricas adecuadas para la tarea y observe la cola, no solo la media
  • Modele el vector de costes completo y amortice el entrenamiento sobre el volumen real
  • Exija significación estadística: un intervalo de confianza que incluya el cero no representa una mejora
  • Proteja la evaluación frente a fugas de datos, la principal causa de falsas victorias del ajuste
  • Supervise después del lanzamiento y registre la decisión para poder repetirla

Preguntas frecuentes

¿La lección «Evaluación de la decisión» es gratis?

Sí — el texto completo de «Evaluación de la decisión» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de AI Prompt Engineering, actualiza a CoddyKit PRO. El curso de AI Prompt Engineering incluye 4 lecciones en total.

¿Qué aprenderé en «Evaluación de la decisión»?

Mida la calidad y el coste. Practicas AI Prompt Engineering con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar AI Prompt Engineering?

No se requiere experiencia previa. AI Prompt Engineering en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «Evaluación de la decisión»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de AI Prompt Engineering?

Sí. Cada lección de AI Prompt Engineering incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Cuándo basta con prompting
  2. Cuándo aplicar fine-tuning
  3. Híbrido: prompt y ajuste ligero
  4. Evaluación de la decisión
← Volver a AI Prompt Engineering