Guillaume Duvernay

Jev redujo el coste de este agente de IA en un 61%

AI efficiencyagentscostexperiment

Cuatro barras que muestran el coste medio de una ejecución de agente en Claude Opus 5. Un agente básico cuesta 0,0419 $, la precarga de habilidades con Jev 0,0369 $, el filtrado de la carga útil de la herramienta 0,0347 $ y ambas opciones 0,0299 $. Medido en 192 ejecuciones en 8 tareas, con un 99% de superación de los controles de calidad en cada variante. Jev elige el contexto antes de que el agente lo lea, no escribe texto y representa el 3% de la factura.

Esta es la versión extensa de un experimento. Lee la versión corta

En julio escribí que los modelos pequeños deberían decidir qué ven los modelos grandes: no se trata de redirigir una tarea a un modelo más barato, sino de colocar modelos pequeños junto al grande para elegir qué tokens llega a leer. Terminé aquel artículo diciendo que la economía era un motivo para experimentar, pero no una prueba, y que alguien tenía que hacer la prueba.

Entonces Jev se lanzó el 15 de septiembre. Es el primer modelo System One de TypeSafe: no escribe texto en absoluto, devuelve probabilidades calibradas sobre respuestas que define tu código, cuesta $0.042 por millón de tokens de entrada y responde en unos pocos cientos de milisegundos. Esa combinación hace que dos versiones muy concretas de la idea de julio sean lo suficientemente baratas como para medirse realmente.

Así que probé esas dos.

Precarga de habilidades. Un agente al que se le da un catálogo de documentos internos gasta todo un viaje de ida y vuelta decidiendo cuál leer y llamando a una herramienta para obtenerlos. Jev puede tomar esa decisión antes del primer turno, por una fracción de centavo, y los documentos llegan ya integrados en el prompt.

Filtrado de la carga útil (payload) de la herramienta. Una respuesta de API real consiste mayormente en campos sobre los que ningún agente actuará y, en una configuración MCP, todo eso cae en la ventana de contexto y se vuelve a enviar en cada turno siguiente. Jev puede puntuar cada campo de una respuesta antes de que el agente la vea.

Ambos son problemas de clasificación, no de escritura. Esto es lo que ocurrió en 192 ejecuciones de 8 tareas, con precios basados en Claude Opus 5:

Mismas 8 tareas, mismo agente, misma calificación determinista. Jev representa el 3% del coste en la barra de la derecha. Método completo y cada cifra por tarea más abajo.

La mejor tarea resultó un 61% más barata. La media de las ocho es del 29%, y la peor del 13%. El 99% de los controles de calidad pasaron en cada variante, incluida la simple, por lo que no se sacrificó nada para lograrlo.

Todo el experimento costó $1.17 ejecutarlo.

Qué es Jev

No genera texto. Le envías un state y un conjunto de preguntas tipadas, y devuelve una distribución de probabilidad calibrada sobre las respuestas que definió tu código. TypeSafe lo llama un modelo System One, entrenado con lo que describen como aprendizaje por refuerzo para decisiones calibradas.

QuéValor
Precio$0.042 por millón de tokens de entrada, salida gratuita
Contexto32,000 tokens
Latencia, medida aquí300 a 600 ms, p50, independientemente del tamaño del lote
EndpointPOST /api/alpha/decisions en OpenRouter

La propiedad que hace que este experimento funcione es el procesamiento por lotes (batching). Cada pregunta va en una sola llamada HTTP con el state enviado una vez. Puntuar 264 campos de un payload es una sola solicitud, no 264.

Mecanismo uno: precarga de habilidades

Antes del primer turno del agente, Jev lee la solicitud y la descripción de una línea de cada habilidad. Nunca ve el cuerpo de una habilidad. Cualquier cosa que puntúe 0.55 o más se inyecta completa en el prompt del sistema.

El paso 3 es el objetivo de todo esto. El texto de la política ya está en el prompt del primer turno, por lo que la regla del día 10 está disponible antes de que el agente haya llamado a nada.

La herramienta read_skill sigue disponible, por lo que el agente aún puede buscar cualquier cosa que el router haya omitido. Esto es importante, porque el router sí omite cosas.

Mecanismo dos: filtrado de la carga útil de la herramienta

Después de que una herramienta devuelva un resultado y antes de que su salida llegue al agente, cada campo hoja de la respuesta es puntuado según su relevancia para la solicitud actual. Cualquier campo por debajo de 0.35 se elimina.

Las puntuaciones mostradas son las que se registraron realmente en el log de ejecución, que son los campos más cercanos al umbral. La mayoría de los campos están lejos de 0,35 y sus puntuaciones exactas no se conservaron, por lo que no se muestra ningún número para ellos.

Vale la pena notar en esas puntuaciones: los campos que se cortan en esta llamada están entre 0.31 y 0.34 y los que se quedan están entre 0.35 y 0.37. El límite es realmente un límite, y algunos campos lo cruzan entre ejecuciones. trial_end puntuó 0.34 en una ejecución y 0.37 en otra. Nada de lo que la tarea necesitaba estuvo nunca cerca.

De dónde viene realmente la seguridad

Ese tercer paso, el estado, es donde se decide todo. El mismo umbral con un estado pobre es peligroso. Con uno más rico es, a la vez, más seguro y más agresivo.

Medido aisladamente en el campo que decide la tarea de dunning:

Qué contiene el estadoaccount.idmetadata.account_idConservados
solicitud + herramienta + argumentos0.180.2051 / 124
+ las políticas que sigue0.190.1850 / 124
+ lo que ya ha hecho0.330.2540 / 124
+ las herramientas que aún puede llamar0.730.7627 / 124

Las dos columnas centrales son las puntuaciones dadas al campo del que la tarea realmente depende. La última es cuántos de los 124 campos sobreviven al corte de 0.35.

Añadir las habilidades no cambia nada. El historial ayuda un poco. El detonante es la lista de acciones restantes. Hasta que el calificador no sabe que hay una llamada a billing_set_account_state(account_id, …) esperando, un id de cuenta es solo otra cadena de texto.

La forma general de esto, que es la parte aplicable a otra configuración:

Un campo no es útil por sí mismo. Es útil por lo que el agente está a punto de hacer con él, y esa información no está en el payload. Está en el esquema de las herramientas que aún están disponibles.

Dónde están las ganancias, y dónde no

Los dos mecanismos rastrean cosas completamente diferentes, y saber cuál se aplica a tu carga de trabajo importa más que la media.

Esta es la decisión práctica. Mira tus payloads para uno, y la estructura de tus turnos para el otro.

La dispersión es amplia. En la tarea donde llegan seis artículos del centro de ayuda y solo importa updated_at, el filtrado elimina el 84% del payload y el 63% de los tokens de entrada. En la tarea de incidentes, donde casi cada campo se usa, elimina el 5%. Mismo agente, mismo umbral, un factor de 17 entre ellas.

Coste en Opus 5, por tarea, agente simple frente a ambos mecanismos:

TareaFormaSimpleAmbosGanancia
docs obsoletoscorta · payload muy disperso$0.0639$0.0252−61%
reembolsomedia · mixta$0.0419$0.0249−41%
incidentecorta · densa$0.0340$0.0241−29%
dunningcorta · mixta$0.0187$0.0135−28%
búsquedauna llamada · dispersa$0.0083$0.0068−17%
gdprmedia · mixta$0.0336$0.0282−16%
slalarga · mixta$0.0442$0.0378−15%
postmortemmuy larga · mixta$0.0906$0.0792−13%
media$0.0419$0.0299−29%

Un agente Opus 5 que gestione 10,000 tareas al mes pasa de $419 a $299, de los cuales $9 van a Jev.

El precio de tu modelo principal decide si el filtrado merece la pena

Este es el resultado que debería cambiar lo que haces.

El filtrado consume tokens de Jev en cada llamada a la herramienta. Esos tokens tienen un precio fijo. Los tokens que ahorra tienen el precio de lo que cueste el modelo de tu agente. Por lo tanto, todo es una proporción, y esta cambia.

Modelo de agentePrecio entradaAgente simpleAmbos mecanismos
GPT-5.6 Luna$0.20/M$0.00182$0.00221+21%
Claude Sonnet 5$2.00/M$0.01676$0.01253−25%
Claude Opus 5$5.00/M$0.04191$0.02995−29%

Los recuentos de tokens son los mismos en todo momento. Solo cambia la tarifa del agente. En el modelo barato Jev representa el 42% de la factura y el filtrado cuesta más de lo que ahorra. En Opus 5 es el 3% de la factura.

Calculando el punto de equilibrio, manteniendo los recuentos de tokens medidos y la estructura de tarifas habitual, se sitúa en $0.55 por millón de tokens de entrada con el almacenamiento en caché de prompts activado, y $0.37 sin él. Por debajo de eso, no filtres. Por encima, filtra.

La precarga de habilidades es rentable en todas partes, incluso en el modelo más barato, porque no cuesta casi nada: unos 1,500 tokens de Jev por ejecución, $0.00006, frente a un turno ahorrado.

Hay un efecto de segundo orden que conviene conocer. El almacenamiento en caché reduce aproximadamente a la mitad la factura y disminuye el valor relativo del filtrado, porque la mayor parte de lo que el filtrado elimina habrían sido lecturas de caché baratas. El filtrado es más valioso para un despliegue sin caché que para uno con ella.

El modo de fallo

El umbral de 0.35 solo es seguro gracias al estado rico. Una versión anterior sin él produjo el peor tipo de fallo.

El filtro eliminó account.id de una suscripción de Stripe, puntuándolo con 0.18, y también eliminó metadata.account_id, la segunda copia. El agente tomó el único identificador restante y hizo esto:

llamada:   billing_set_account_state(account_id="cus_PmT4k9WqLr2XbN", state="read_only")
                                              ↑ el id de cliente de Stripe, no el de la cuenta

informe: "He puesto la cuenta asociada en modo lectura, de acuerdo con la política del día 10."

El identificador correcto era acct_borealis_4c77. El agente actuó sobre el objeto equivocado y presentó un informe seguro al respecto.

Cualquier cosa que despliegues necesita rutas críticas declaradas y un umbral calibrado contra ellas. Dos centésimas de umbral separaron “ahorrar un turno” de “no ahorrar nada” en la parte del enrutamiento, y una brecha mucho mayor en la parte del filtrado.

Lo que extraigo de esto

Trabajar en la eficiencia de la IA merece la pena, y combinar modelos de diferentes tamaños y tipos es donde reside gran parte de ella. Lo interesante es que un modelo que no puede escribir texto en absoluto resulta ser un buen juez de lo que un modelo que escribe texto debería tener permitido ver.

Aquí se probaron dos puntos de partida. Hay muchos más lugares donde el mismo patrón podría aplicarse: elegir qué archivos abre un agente, decidir cuándo debe compactarse una conversación, puntuar si un documento recuperado merece sus tokens, bloquear una escritura antes de que ocurra. Nada de eso se midió, y no asumiría que funciona hasta que se compruebe.

El registro completo está más abajo: el entorno, cada tarea, cada umbral, todas las tablas y las cosas que esto no muestra.


Los detalles completos

Todo a partir de aquí es el experimento completo. Es largo a propósito. Si solo querías el resultado, ya lo tienes.

La configuración

El agente

Cerca de 80 líneas. Sin frameworks, sin SDK de agente, sin librería de orquestación. Un bucle while alrededor de fetch:

  1. POST al endpoint de chat completions de OpenRouter con la lista de mensajes y los esquemas de herramientas en formato de llamadas a funciones de OpenAI.
  2. Si la respuesta tiene tool_calls, ejecuta cada una localmente, envía el resultado como un mensaje de role: "tool" y vuelve al bucle.
  3. Si la respuesta no tiene tool_calls, ese texto es la respuesta final y el bucle termina.
ParámetroValorNota
modelopenai/gpt-5.6-luna$0.20/M entrada, $1.20/M salida, contexto de 1,050,000 tokens
tools17 esquemas de funciones
tool_choiceautoel agente decide si llamar y a qué
seed1000 + índice de repeticiónlo único que varía entre repeticiones
max_tokens2000un techo, no un objetivo
reasoning / reasoning_effortno configuradodejado por defecto del proveedor
temperature, top_pno configuradodejado por defecto del proveedor

Sobre el razonamiento específicamente: nunca se pasó el parámetro reasoning, por lo que el modelo funcionó con el valor por defecto del proveedor. Una llamada de control posterior devuelve reasoning_tokens: 0, por lo que no se gastó presupuesto de razonamiento separado y ninguno de los recuentos de tokens incluye tokens de razonamiento ocultos. Volver a ejecutar esto con un esfuerzo de razonamiento mayor produciría cifras absolutas diferentes.

Dos medidas de seguridad, porque un bucle de agente descontrolado quema dinero: máximo 8 turnos por ejecución y máximo 6 llamadas a herramientas por turno. Ninguna se alcanzó en las 192 ejecuciones. Una tercera medida suma cada llamada y corta cuando el total supera un límite, fijado en $2.60 para la campaña.

El mundo

Una SaaS B2B ficticia llamada Northwind Analytics, con el agente como su asistente de operaciones.

17 herramientas cuyos payloads imitan la forma real de Stripe, Zendesk, HubSpot, Statuspage, PagerDuty, Slack, Linear y un CMS de centro de ayuda: mismos nombres de claves, mismo anidamiento, mismo ruido. Son funciones locales que devuelven datos fijos (fixtures), por lo que nada sale de la máquina. Las escrituras se registran para la calificación y devuelven un acuse de recibo plausible.

HerramientaModelada enPayload
kb_list_articlesun endpoint de lista de CMS de centro de ayuda28,128 caracteres
stripe_list_chargesStripe GET /v1/charges6,993 caracteres
kb_get_articleun endpoint de lectura de CMS de centro de ayuda4,966 caracteres
stripe_get_subscriptionStripe GET /v1/subscriptions/:id3,181 caracteres
zendesk_get_ticketZendesk GET /api/v2/tickets/:id con side-loads2,402 caracteres
pagerduty_get_incidentPagerDuty GET /incidents/:id1,821 caracteres
statuspage_get_incidentStatuspage incidente + uptime1,711 caracteres
crm_get_accountobjeto de empresa de HubSpot1,117 caracteres
read_skillinterna988 caracteres
stripe_create_refundStripe POST /v1/refunds479 caracteres
linear_create_issueLinear issueCreate202 caracteres
billing_apply_creditAPI interna de facturación147 caracteres
zendesk_replyZendesk PUT /api/v2/tickets/:id144 caracteres
billing_set_account_stateAPI interna de facturación134 caracteres
slack_post_messageSlack chat.postMessage124 caracteres
billing_apply_discountAPI interna de facturación98 caracteres
pagerduty_escalateescalada de PagerDuty92 caracteres

11 habilidades, archivos Markdown con una description de una línea en el front matter y un cuerpo que contiene los umbrales, cifras y formatos reales: churn-save-offers, docs-review-cadence, dunning-playbook, enterprise-contract-terms, escalation-matrix, gdpr-data-requests, incident-comms, oncall-handover, refund-policy, release-notes-format, slack-style-guide. Varias no afectan a ninguna tarea. Son distractores para el router.

8 tareas, elegidas para abarcar dos ejes independientes: longitud, desde una sola llamada a la herramienta hasta siete turnos, y densidad del payload, desde “cada campo importa” hasta “el 76% de los bytes es texto para desechar”.

Las tareas, verbatim

TareaPrompt enviado como mensaje de usuario
T1-refundACME Analytics (cuenta acct_acme_9f21) envió un email: dicen que se les cobró dos veces su factura de noviembre. Compruébalo y soluciónalo completamente, incluyendo avisar al equipo.
T2-slaEl ticket de Zendesk 48213 es una reclamación de crédito de SLA de un cliente corporativo sobre octubre. Calcula cuánto se les debe, aplícalo y respóndeles.
T3-dunningLa suscripción sub_1QdRvT2eZvKYlo2CkW8pQm4L está vencida. Aplica lo que diga nuestro proceso para el siguiente paso.
T4-gdprAcaba de llegar el ticket 48377 al buzón de privacidad. Hazte cargo desde aquí y haz todo lo que requiera el proceso.
T5-incidentEl incidente PD-99213 acaba de saltar. Gestiona la escalada y las comunicaciones.
T6-stale-docs¿Cuáles de nuestros artículos publicados en el centro de ayuda tienen la revisión vencida? Registra el trabajo que hay que hacer.
T7-postmortemEl incidente INC-4471 está resuelto. Haz el seguimiento: quién se vio afectado, qué se les debe y comunica a la empresa en qué punto estamos.
T8-lookup¿En qué plan está acct_borealis_4c77 y quién es su CSM?

Calificación

Determinista. 59 controles en las ocho tareas, cada uno es o bien una llamada a la herramienta con argumentos exactos, como stripe_create_refund(charge="ch_3QRk9X…", amount=14900, reason="duplicate"), o un dato que aparece solo dentro de un documento de habilidad: el nivel de SLA del 25%, la regla del día 10, el equipo PRIV, el plazo de 30 días.

No interviene ningún juez LLM en ningún momento. Una ejecución que nunca abre las habilidades falla el segundo tipo de control mecánicamente, que es el punto: hace que sea medible si “el agente realmente tenía la política” en lugar de ser una cuestión de opinión.

Cada tarea también declara sus rutas críticas de payload, los campos de los que depende su respuesta. Estas nunca se usan para dirigir el filtro. Existen para que un filtro demasiado agresivo sea visible en el registro incluso en ejecuciones que pasen de todos modos.

Las variantes

VarianteHabilidades precargadasPayload filtrado
0nono
Así, umbral 0.55no
Bnosí, umbral 0.35, estado rico
Dsí, umbral 0.55sí, umbral 0.35, estado rico

8 tareas × 4 variantes × 6 repeticiones = 192 ejecuciones, repeticiones que difieren solo en la seed.

Calibración

Ambos umbrales se analizaron offline antes de gastar tokens de agente.

0.55 para el enrutamiento es el valor más alto que mantiene el recobro total en las tareas contra las que se calibró. A 0.60, slack-style-guide puntúa 0.58 en la tarea de reembolso y el turno ahorrado se evapora. Dos centésimas separan una reducción de turnos del 15% de nada.

0.35 para el filtrado solo es viable gracias al estado rico descrito anteriormente. La pasada de calibración cuesta unos $0.004 porque ejecuta el router y el calificador sin ejecutar el agente en absoluto.

Una lección generalizable: cada formulación de una pregunta tiene su propia calibración. Un umbral no se transfiere entre dos redacciones de la misma pregunta. Se midieron distribuciones en soportes completamente diferentes para una formulación específica de la tarea y otra independiente de la tarea. Recalibra siempre que redactes de nuevo.

Totales de la campaña

MedidaTotal
Ejecuciones192
Turnos de agente775
Tokens de entrada agente2,118,338, de los cuales 1,685,860 (80%) servidos desde caché
Tokens de salida agente130,003
Tokens de entrada Jev2,065,975
Llamadas Jev96 enrutamiento + 252 filtrado
Gasto realagente $0.2977 · Jev $0.0868
Total, incluyendo calibración y variantes descartadas$1.17

General, por variante

VarianteEjecuciones perfectasControles pasadosTurnosTokens entradaRutas críticas eliminadas
092%99%4.4412,960n/a
A96%99%3.6911,809n/a
B94%99%4.319,9670
D94%99%3.719,3961

Ninguna técnica degradó la calidad. El 99% de los controles pasan en las cuatro variantes. De las 96 llamadas filtradas en la variante D, exactamente una ruta declarada crítica fue eliminada y esa ejecución pasó igualmente. Las diferencias de “perfección” por ejecución entre el 92% y el 96% están dentro del ruido con n = 48. Los efectos robustos son los turnos y los tokens.

Tokens medios por ejecución, divididos según se facturan realmente:

VarianteEntrada frescaEntrada en cachéSalidaEntrada Jev
02,94110,0207410
A2,7009,1096151,517
B1,8738,09372319,457
D1,4967,90062922,067

La variante D recorta los tokens de entrada frescos, la clase cara, en un 49%.

Ahorro de tokens de entrada por técnica, de peor a mejor

TécnicaMínimoMáximoMediana
A precarga habilidades−3% en tarea SLA+23% en tarea GDPR10%
B filtrado payload+2% en tarea GDPR+51% en docs obsoletos17%
D ambos+9% en postmortem+63% en docs obsoletos26%

La única celda negativa en toda la matriz es A en la tarea de SLA, donde el router carga una habilidad de más sin eliminar un turno. La habilidad extra entra en el prompt del sistema y se vuelve a enviar en cada turno. Las dos técnicas tampoco siempre se suman: en las tareas de SLA y postmortem, D ahorra menos tokens que B solo, precisamente por esa razón.

Cómo puntuó realmente el router

Probabilidad media por habilidad, por tarea. Cargada significa 0.55 o más.

TareaHabilidades cargadasPuntuaciones top
T1-refund2.0refund-policy 0.82 · slack-style-guide 0.60 · incident-comms 0.32
T2-sla2.0enterprise-contract-terms 0.95 · refund-policy 0.84 · churn-save-offers 0.13
T3-dunning1.0dunning-playbook 0.95 · churn-save-offers 0.32 · oncall-handover 0.13
T4-gdpr1.0gdpr-data-requests 0.87 · refund-policy 0.27 · escalation-matrix 0.22
T5-incident3.0escalation-matrix 0.93 · incident-comms 0.85 · slack-style-guide 0.69
T6-stale-docs1.0docs-review-cadence 0.93 · slack-style-guide 0.15 · oncall-handover 0.05
T7-postmortem3.0enterprise-contract-terms 0.92 · refund-policy 0.89 · incident-comms 0.58 · slack-style-guide 0.47
T8-lookup0.0slack-style-guide 0.07 · enterprise-contract-terms 0.06 · dunning-playbook 0.04

Recobro: 132 de 144 habilidades necesarias cargadas, 92%. Un fallo sistemático y un falso positivo sistemático, ambos dignos de mencionarse claramente.

El fallo es slack-style-guide en la tarea de postmortem, puntuando 0. la tarea dice “comunica a la empresa en qué punto estamos” y el router no lee eso como una pregunta de formato. El agente la buscó él mismo cuando la necesitó.

El falso positivo es refund-policy en la tarea de SLA con 0.84 y en la de postmortem con 0.89. Un crédito de SLA parece un reembolso. Es exactamente la confusión que refund-policy existe para prohibir, ya que el documento dice que la indisponibilidad del servicio no es un reembolso. El router se equivoca en la forma y acierta en la sustancia, y el agente no se vio perjudicado.

La tarea de búsqueda no carga nada, correctamente. Ninguna habilidad afecta a ella y la puntuación más alta es 0.07.

Cómo se comportó realmente el filtro

Variante D, por herramienta, en 96 llamadas filtradas:

HerramientaLlamadasCaracteres antes → despuésCambioClaves conservadas
kb_list_articles8225,024 → 24,834−89%605 / 1,808
stripe_list_charges641,958 → 12,819−69%405 / 1,584
stripe_get_subscription619,086 → 10,637−44%359 / 744
crm_get_account3029,400 → 16,723−43%384 / 1,002
zendesk_get_ticket1225,620 → 15,787−38%328 / 822
statuspage_get_incident915,399 → 10,734−30%311 / 540
pagerduty_get_incident1221,852 → 16,497−25%428 / 684
stripe_create_refund63,012 → 2,610−13%60 / 108
zendesk_reply128,685 → 9,489+9%24 / 84
linear_create_issue185,287 → 6,734+27%83 / 138
billing_apply_credit81,343 → 2,406+79%42 / 56

Las herramientas de lectura son donde está el dinero, y la dispersión entre ellas es enorme: desde −89% en una lista de documentos hasta −25% en un incidente donde casi todo es esencial.

Los acuses de recibo de escritura van en la dirección opuesta. billing_apply_credit devuelve 147 caracteres, y el marcador _trimmed adjunto a él cuesta más que los campos eliminados. Filtrar un payload pequeño es una pérdida neta, y cualquier implementación de producción debería omitir cualquier cosa por debajo de unos pocos cientos de caracteres. Se dejó así para que el efecto fuera visible en el registro.

Cada tarea, cada variante

Los precios son el coste completo de una ejecución, agente más Jev, utilizando la división medida de fresco y caché. Las columnas de Sonnet 5 y Opus 5 replican el tráfico medido a los precios de esos modelos. El coste de Jev es idéntico en las tres columnas.

T1-refund, payload medio · mixto

VariantePerfectaControlesTurnosTokens ent.Recorte payload$ Luna$ Sonnet 5$ Opus 5vs 0
0100%100%4.515,369n/a0.001800.01670.0419n/a
A100%100%4.014,247 (−7%)n/a0.001650.01500.0373−11%
B100%100%4.310,719 (−30%)65%0.002850.01410.0331−21%
D100%100%4.09,899 (−36%)66%0.002520.01080.0249−41%

T2-sla, payload largo · mixto

VariantePerfectaControlesTurnosTokens ent.Recorte payload$ Luna$ Sonnet 5$ Opus 5vs 0
083%96%6.818,811n/a0.001920.01770.0442n/a
A100%100%6.219,359 (+3%)n/a0.001930.01740.0433−2%
B83%96%6.515,528 (−17%)30%0.002860.01730.0417−6%
D83%96%6.016,533 (−12%)72%0.003120.01600.0378−15%

T3-dunning, payload corto · mixto

VariantePerfectaControlesTurnosTokens ent.Recorte payload$ Luna$ Sonnet 5$ Opus 5vs 0
0100%100%4.08,084n/a0.000800.00750.0187n/a
A100%100%3.06,704 (−17%)n/a0.000790.00690.0171−9%
B100%100%4.07,384 (−9%)44%0.001290.00690.0163−13%
D100%100%3.06,002 (−26%)44%0.001230.00580.0135−28%

T4-gdpr, payload medio · mixto

VariantePerfectaControlesTurnosTokens ent.Recorte payload$ Luna$ Sonnet 5$ Opus 5vs 0
050%94%4.28,344n/a0.001500.01340.0336n/a
A100%100%3.06,467 (−23%)n/a0.001320.01140.0285−15%
B83%98%4.28,167 (−2%)14%0.001860.01290.0315−6%
D83%98%3.06,159 (−26%)16%0.001780.01160.0282−16%

T5-incident, payload corto · denso

VariantePerfectaControlesTurnosTokens ent.Recorte payload$ Luna$ Sonnet 5$ Opus 5vs 0
0100%100%3.88,647n/a0.001510.01360.0340n/a
A67%96%3.07,004 (−19%)n/a0.001210.01040.0259−24%
B83%98%3.78,153 (−6%)6%0.001680.01270.0313−8%
D83%98%3.06,935 (−20%)5%0.001430.00990.0241−29%

T6-stale-docs, payload corto · muy disperso

VariantePerfectaControlesTurnosTokens ent.Recorte payload$ Luna$ Sonnet 5$ Opus 5vs 0
0100%100%4.019,821n/a0.002650.02560.0639n/a
A100%100%3.018,468 (−7%)n/a0.002600.02460.0614−4%
B100%100%4.09,639 (−51%)78%0.002620.01390.0329−49%
D100%100%3.07,387 (−63%)84%0.002350.01090.0252−61%

T7-postmortem, payload muy largo · mixto

VariantePerfectaControlesTurnosTokens ent.Recorte payload$ Luna$ Sonnet 5$ Opus 5vs 0
0100%100%6.021,294n/a0.004060.03630.0906n/a
A100%100%5.319,224 (−10%)n/a0.003390.02970.0743−18%
B100%100%5.717,064 (−20%)34%0.004880.03430.0841−7%
D100%100%5.719,430 (−9%)33%0.004720.03240.0792−13%

T8-lookup, payload una llamada · disperso

VariantePerfectaControlesTurnosTokens ent.Recorte payload$ Luna$ Sonnet 5$ Opus 5vs 0
0100%100%2.23,314n/a0.000360.00330.0083n/a
A100%100%2.03,004 (−9%)n/a0.000380.00300.0073−12%
B100%100%2.23,080 (−7%)62%0.000470.00260.0062−24%
D100%100%2.02,819 (−15%)62%0.000560.00290.0068−17%

Cómo se calcularon los precios

Medir una vez y luego recalcular el precio. Los recuentos de tokens son la base, y la factura de cada modelo son esos mismos recuentos a las tarifas de ese modelo.

La fórmula de facturación se dedujo de los datos en lugar de asumirse. En las 192 ejecuciones, el coste del agente observado coincide con

entrada_fresca × $0.25/M  +  entrada_caché × $0.02/M  +  salida × $1.20/M

con un error relativo medio del 0.04%. Dos consecuencias. El almacenamiento en caché de prompts estuvo activo todo el tiempo, automáticamente, sin marcadores cache_control, y el 80% de los tokens de entrada fueron lecturas de caché. Y cada token de entrada fresco se factura a la tarifa de escritura de caché, que es 1.25× el precio nominal de entrada, por lo que la tarifa nominal de $0.20/M es esencialmente lo que nunca pagas en un bucle de múltiples turnos.

Un modelo teórico anterior de caché, donde las lecturas en el turno t equivalen al prefijo en el turno t−1, subestimó las lecturas reales de caché en un 19%. Fue descartado en favor de la división por turno medida.

ModeloEntradaSalidaLectura cachéEscritura caché
openai/gpt-5.6-luna$0.20/M$1.20/M$0.02/M$0.25/M
anthropic/claude-sonnet-5$2.00/M$10.00/M$0.20/M$2.50/M
anthropic/claude-opus-5$5.00/M$25.00/M$0.50/M$6.25/M
typesafe/jev-1.13$0.042/Mgratuitan/an/a
VarianteLunaSonnet 5Opus 5Cuota Jev, Opus 5
0$0.00182$0.01676$0.04191n/a
A$0.00166 (−9%)$0.01479 (−12%)$0.03688 (−12%)0%
B$0.00232 (+27%)$0.01435 (−14%)$0.03466 (−17%)2%
D$0.00221 (+21%)$0.01253 (−25%)$0.02995 (−29%)3%

Las mismas ejecuciones sin ningún tipo de caché, como referencia:

VarianteLunaSonnet 5Opus 5
0$0.00348$0.03333$0.08332
A$0.00316$0.02984$0.07450
B$0.00368$0.02798$0.06874
D$0.00356$0.02601$0.06362

Una suposición es conservadora en lugar de neutral. OpenAI cachea automáticamente y factura cada token de entrada fresco a la tarifa de escritura, que es lo que se midió. El almacenamiento en caché de Anthropic es opcional: solo el contenido dentro de un punto de ruptura cache_control se factura a la tarifa de escritura y el resto a la tarifa de entrada normal. Facturar todos los tokens frescos a la tarifa de escritura sobreestima ligeramente las columnas de Anthropic. Recalcular con tokens frescos a la tarifa de entrada normal mueve la media de Opus 5 de $0.04191 → $0.02995 (−29%) a $0.03823 → $0.02808 (−27%), y ninguna cifra por tarea se mueve más de 3 puntos.

Lo que esto no muestra

  • Un solo modelo de agente. Todo se midió con openai/gpt-5.6-luna con razonamiento por defecto. Los recuentos de tokens son el entregable y las columnas de precios son aritmética sobre ellos. Un modelo diferente produciría recuentos de tokens diferentes, no solo precios diferentes.
  • n = 6 por celda. Suficiente para recuentos de turnos y tokens, que son casi deterministas. No suficiente para separar una calidad del 92% del 96%.
  • Datos fijos (fixtures), no APIs reales. Las formas de los payloads son fieles. Los endpoints reales tienen paginación, fallos parciales y límites de tasa que este entorno no ejercita.
  • Las tareas fueron escritas por la misma persona que escribió las habilidades. La calificación es determinista, pero el mundo no es adversarial.
  • La propia calibración de Jev no fue auditada. Lo que se midió es lo que sus puntuaciones hacen a un agente, no si están bien calibradas en el sentido estadístico.
  • Una sola estructura de agente. Un bucle while con llamadas a funciones. Los subagentes, las llamadas a herramientas paralelas y las sesiones de larga duración cambian la aritmética.

Fuentes