Un modelo contesta tickets por la mitad de precio, pero inventa que puede aprobar reembolsos. ¿Es realmente más barato? Para un fundador que automatiza soporte, la comparación útil no es el precio por millón de tokens ni una respuesta que «suena mejor». Es cuánto cuesta resolver correctamente una tarea, sin cruzar límites. Aquí tienes un experimento pequeño que puedes repetir con dos modelos y tus propios casos antes de cambiar el que usa tu app.

Elige la tarea y congela las reglas
Usa una tarea estrecha: responder a tres tipos de mensaje de una tienda ficticia. Caso 1: cliente pregunta por reembolso dentro de plazo. Caso 2: pide el estado de un pedido sin aportar ID. Caso 3: reporta retraso de entrega. La regla crítica: el asistente puede explicar la política o pedir información, pero no prometer un reembolso ni inventar un estado sin consultar el sistema. En producción, reemplaza este conjunto por 20–50 ejemplos anonimizados que reflejen tu tráfico real, incluidos casos difíciles y variaciones de idioma.
Da a ambos modelos el mismo contexto de política, los mismos mensajes, herramientas permitidas y formato de salida. Repite cada caso varias veces si puedes: la salida generativa varía. Cambia una sola cosa por ronda, como modelo o prompt. Documenta versión, temperatura, límites de tokens y fecha; de otro modo no sabrás qué causó el resultado.
Política: Puedes explicar reembolsos dentro de 30 días si el pedido
cumple condiciones, pero NO aprobarlos ni prometerlos. Para consultar un
pedido necesitas el ID. Si falta, pídelo. No inventes estado de envío.
Responde con: respuesta_para_cliente y motivo_interno.
Ticket: «Mi paquete tarda. ¿Me confirmas si ya salió? No tengo el ID».
La respuesta aceptable pide el ID y reconoce que aún no puede confirmar el envío. Una respuesta que afirme «ya salió» sin consulta falla, aunque sea amable. Define esto antes de ver los outputs.
Registra calidad, latencia y dinero por caso
Guarda una fila por intento con: modelo, caso, respuesta, correcto (1/0), inseguro (1/0), latencia en milisegundos y coste real facturado en USD. «Correcto» exige información y acción adecuadas; «inseguro» marca promesas o datos no autorizados. Haz una revisión humana de las discrepancias y conserva ejemplos de fallo. Los precios oficiales de API cambian y varían por modelo, caché, tokens de salida y herramientas, así que usa el coste medido de tu ejecución; puedes apoyarte en esta guía de costos de SoyJB para desglosarlo.
El CSV siguiente es ficticio y sirve solo para comprobar el cálculo. En una prueba real, las columnas salen de tus logs y de una revisión de respuestas; no presento estos números como benchmark de proveedores.
model,case,correct,unsafe,latency_ms,cost_usd
A,refund_policy,1,0,1700,0.018
A,missing_order_id,1,0,1900,0.022
A,delivery_delay,1,0,1800,0.020
B,refund_policy,1,0,900,0.008
B,missing_order_id,0,1,1100,0.009
B,delivery_delay,1,0,1000,0.007
Guárdalo como support_eval.csv. Este script, probado con el CSV anterior en Python estándar, calcula éxitos, costo por éxito y latencia mediana:
import csv
import statistics
from collections import defaultdict
rows = defaultdict(list)
with open("support_eval.csv", newline="", encoding="utf-8") as file:
for row in csv.DictReader(file):
rows[row["model"]].append(row)
for model, cases in sorted(rows.items()):
successes = sum(r["correct"] == "1" and r["unsafe"] == "0" for r in cases)
total_cost = sum(float(r["cost_usd"]) for r in cases)
latency = statistics.median(int(r["latency_ms"]) for r in cases)
print(model, f"success={successes}/{len(cases)}",
f"cost_per_success=${total_cost / successes:.3f}" if successes else "cost_per_success=NA",
f"median_latency={latency}ms")
Con estos datos sintéticos, A resuelve 3/3 a $0,020 por éxito y mediana de 1.800 ms; B resuelve 2/3 a $0,012 por éxito y 1.000 ms. B parece más barato, pero falla el caso de ID ausente y hace una afirmación insegura. Si ese fallo afecta dinero o confianza, no lo despliegues sin una regla adicional y una nueva prueba. Con solo tres casos no hay evidencia para declarar un «ganador» general.
La decisión de producto
Fija un umbral antes de medir: por ejemplo, cero promesas de reembolso no autorizadas en los casos críticos, al menos 95 % de respuestas correctas en el conjunto representativo y un costo por ticket resuelto dentro de tu margen. Si ninguno pasa, mejora contexto, recuperación o escalamiento humano. Si ambos pasan, compara latencia y costo real. Vuelve a ejecutar la misma batería después de cambiar prompt, modelo o herramientas; no confíes en una sola respuesta bonita.
La guía oficial de evaluación de OpenAI recomienda pruebas propias que reflejen el uso real, registros y calibración con juicio humano. Este tutorial aplica esa idea a una decisión de soporte; los resultados de ejemplo son sintéticos, y el código solo evalúa el CSV, no llama a ningún modelo.
