- Ploy cambió el agente que planifica, construye y valida sitios web de marketing en producción de Claude Opus 4.8 a GPT-5.6 Sol y lo estableció como modelo predeterminado para todos los workspaces
- Tras corregir las suposiciones por modelo en el harness de evaluación, el tiempo promedio de ejecución en la tarea de reconstrucción de la página principal se redujo de 8 minutos a 3 minutos 42 segundos, el costo bajó 27% de $3.06 a $2.22 y la puntuación visual subió a 0.970
- GPT-5.6 llenaba con valores arbitrarios los 25 parámetros opcionales de las llamadas a herramientas, lo que hacía que entre 52% y 64% de las lecturas de archivos devolvieran resultados vacíos; al cambiar los campos opcionales a requeridos y nullable, las lecturas vacías bajaron a 0% y las llamadas a herramientas se redujeron cerca de 30%
- Debido a diferencias en el alcance del caché y la estructura de throughput entre OpenAI y Anthropic, al principio GPT-5.6 parecía costar cerca de 50% más, pero al aplicar una cache key por workspace y breakpoints por capas, la tasa de acierto en la primera llamada subió de 0% a 83.7% y los tokens de entrada sin caché bajaron 28%
- El costo y rendimiento de un cambio de modelo dependen no solo del modelo en sí, sino también del presupuesto de evaluación, el esquema de herramientas, la estructura del caché y la forma de reproducir el razonamiento, por lo que primero hay que detectar y corregir las suposiciones específicas del proveedor ajustadas al modelo anterior para lograr comparaciones confiables y una operación estable
GPT-5.6 Sol reemplaza a Claude Opus
- El agente de Ploy planifica páginas de sitios web de marketing en producción, lee la base de código, genera componentes e imágenes, verifica el resultado con capturas de pantalla y decide si la tarea quedó completa
- Durante varios meses no hubo un modelo que cumpliera el estándar para reemplazar a Claude Opus, y el modelo predeterminado se mantuvo durante 4 meses en el orden de Opus 4.7 y luego 4.8
- GPT-5.6 Sol fue el primero en superar a Opus en una evaluación uno a uno sobre la misma tarea y pasó a ser el modelo predeterminado en todos los workspaces de Ploy
- Incluso en la evaluación inicial, el tiempo de ejecución de los builds completados era menos de la mitad, el costo era 27% menor y la puntuación era igual o mejor que la del modelo anterior, dando base para avanzar con la migración
- Ploy usa el Vercel AI SDK, pero durante el cambio de modelo descubrió que en todo el stack seguían presentes suposiciones específicas del proveedor sobre la composición de argumentos de herramientas, el prompt caching y la reproducción del razonamiento entre turnos
- La migración avanzó corrigiendo, en este orden, el harness de evaluación, el esquema de herramientas, el prompt caching y la reproducción del razonamiento
Arreglar primero el harness antes de confiar en las métricas
- La suite de evaluación ejecuta el agente de producción en workspaces de prueba fijos y cubre cientos de casos, desde tareas de construir una página principal desde cero hasta tareas para decidir si una solicitud de réplica puede ejecutarse de forma segura
- En los casos de build, un evaluador visual realiza 10 verificaciones binarias comparando contra el diseño de referencia
- Verifica si la sección hero es una escena fotográfica que ocupa todo el ancho de la pantalla
- Confirma si el CTA principal es un rectángulo con esquinas redondeadas y no una pastilla
- También se ejecutan verificaciones de contenido, rutas de ejecución de herramientas y aserciones sobre archivos, y cuando algo falla se revisa el rastreo completo de ejecución, incluidas las llamadas a herramientas y el texto del modelo
-
Restricciones ajustadas al patrón de llamada del modelo anterior
- El presupuesto previo de llamadas a herramientas estaba ajustado al patrón secuencial de Opus, pero GPT-5.6 usa llamadas en paralelo y excedía ese presupuesto incluso en casos donde resolvía correctamente el problema
- El ejecutor de evaluación no soportaba lectura de archivos por lotes, que Opus casi no usaba, pero GPT-5.6 sí usaba con frecuencia
- Aproximadamente un tercio de los fallos brutos observados en la primera ejecución no venían del comportamiento del modelo sino de suposiciones del harness, y tampoco estaban distribuidos de forma uniforme entre modelos
- Si primero no se clasifican los rastreos de ejecución del modelo retador y del modelo existente, la evaluación favorece al modelo nuevo cuanto más se comporte como el modelo viejo
-
Umbrales de puntuación implícitos
- Los datasets sin
minScoreheredaban silenciosamente un valor predeterminado de 1.0 - Por eso GPT-5.6 fue marcado como fallo pese a obtener 0.98 en el hero, y Opus también fue marcado como fallo en casos donde pasaba todas las verificaciones individuales
- Ambos resultados eran diseños defendibles, pero quedaron fuera por un umbral implícito y no por el modelo
- Los datasets sin
Resultados del benchmark corregido
- Después de corregir el harness, volvieron a ejecutar la suite de evaluación para reconstruir una homepage de marca según el diseño de referencia
| Promedio por build completado | Claude Opus 4.8 (n=11) |
GPT-5.6 (n=10) |
|---|---|---|
| Costo | $3.06 | $2.22 |
| Tiempo de ejecución | 8 min 00 s | 3 min 42 s |
| Tokens de entrada | 2.6 millones | 1.7 millones |
| Tokens de salida | 33,000 | 17,100 |
| Puntuación visual | 0.936 | 0.970 |
- GPT-5.6 completó las páginas 2.2 veces más rápido, costó 27% menos y además usó aproximadamente la mitad de tokens de salida
- La cantidad de código generado también fue menor
- En un par de casos comparados, Opus generó 174 variables CSS y un
globals.cssde 17,957 caracteres, incluyendo gamas de color que casi no se usaban - GPT-5.6 usó 45 variables CSS y 2,508 caracteres, pero produjo un resultado renderizado similar o mejor
- En un par de casos comparados, Opus generó 174 variables CSS y un
-
Calidad y consistencia del diseño
- GPT-5.6 es fuerte en layouts limpios y con cuadrículas densas, pero tiende a converger hacia ese estilo si no se le guía con fuerza
- En el harness existente diseñado para Opus 4.8, con frecuencia generaba resultados limpios pero genéricos ignorando el sistema de diseño existente
- Después de que los equipos de diseño e ingeniería mejoraron la forma de guiar al modelo, cumplió con los estándares de marca necesarios para producción
Manejo de parámetros opcionales en llamadas a herramientas
- La herramienta
codedel agente tiene 25 parámetros de nivel superior; soloactiones obligatorio y el resto son opcionales - Claude envía solo los 2 o 3 parámetros que usa, pero GPT-5.6 mandaba los 25 en cada llamada y llenaba incluso los campos no usados con valores plausibles como
offset: 0,timeout: 120000,siteId: "00000000-0000-0000-0000-000000000000" - El mismo patrón apareció en rastreos de ejecución de
code(read)en producción recopilados durante 3 días
| Modelo | Número de llamadas | Llamadas que incluían las 25 propiedades |
|---|---|---|
gpt-5.6 |
6,635 | 6,635 casos, 100% |
claude-opus-4.8 |
2,898 | 4 casos, 0.1% |
claude-sonnet-5 |
1,933 | 0 casos |
-
La causa de las lecturas vacías de archivos
- El problema no era solo que los argumentos fueran verbosos, sino que la implementación de lectura de archivos no podía distinguir entre valores inventados por el modelo y valores realmente intencionados por el usuario
- La implementación trataba
offset: 0como un argumento real, y entre 52% y 64% de las lecturas de archivos de GPT-5.6 devolvían resultados vacíos - La herramienta devolvía
success: truetanto en lecturas válidas como en lecturas vacías, así que el modelo no podía saber que estaba leyendo archivos vacíos - Al hacer más llamadas para compensar esos resultados vacíos, también empeoraba la calidad del resultado
-
Un problema que no se resolvió con prompts ni con modo strict
- Aunque se agregó a la descripción de la herramienta la instrucción de omitir parámetros no usados, los 25 seguían apareciendo
- Incluso añadiendo
OPTIONAL, omit if unuseda cada propiedad, el comportamiento no cambió - En el modo
strictde OpenAI ocurrió lo mismo, y para adoptarlo había que eliminar de todos los esquemaspattern,formaty las validaciones de tamaño de arreglos - Como este comportamiento viene de cómo el modelo genera function calling, se cambió el esquema en lugar del prompt
-
Conversión del esquema en el límite entre proveedores
- Para los modelos de la familia OpenAI, todas las propiedades opcionales se reescribieron como propiedades requeridas y nullable con la forma
anyOf: [T, null] - El modelo llena los parámetros no usados con
nullexplícito y luego esosnullse eliminan antes de validar en el límite compartido de llamadas a herramientas - La implementación de la herramienta no cambió; solo se permitió en el esquema para el modelo representar valores no usados
// Antes: las 25 claves se llenaban con valores arbitrarios { "action": "read", "file_paths": ["..."], "offset": 0, "timeout": 120000 } // Después: envía 4 valores reales y 21 null; los null se eliminan antes de ejecutar la herramienta { "action": "read", "file_paths": ["..."], "offset": null, "timeout": null }- Después del cambio, las lecturas vacías de archivos bajaron de 52% a 0%
- También se redujo cerca de 30% el número de llamadas a herramientas necesarias para la misma tarea, porque desapareció el patrón de releer resultados vacíos
- Para los modelos de la familia OpenAI, todas las propiedades opcionales se reescribieron como propiedades requeridas y nullable con la forma
Prompt caching ajustado a la forma de OpenAI
- Ambos proveedores ofrecen prompt caching, pero su implementación es distinta
- Antes de reflejar esa diferencia, GPT-5.6 parecía costar cerca de 50% más que Opus, pero la causa no era el precio del modelo sino la configuración del caché
-
Caché a nivel de organización en Anthropic
- El prompt del agente comienza con un prefijo estático de unas 29,000 tokens compuesto por el esquema de herramientas y el prompt central del sistema, y es el mismo en todas las conversaciones
- En Claude,
cache_controlmarca breakpoints de caché y el prefijo se comparte a nivel de toda la organización - Cualquier conversación de cualquier workspace puede usar un elemento compartido y no hay límites de throughput por key
- La tasa de acierto del caché es de 92% a 96%
-
Cómo cambió el comportamiento del caché en GPT-5.6
- Los modelos GPT anteriores almacenaban implícitamente coincidencias parciales de prefijo, pero GPT-5.6 eliminó la coincidencia parcial de prefijo
- Como el caché implícito crea un elemento de prompt completo según el mensaje más reciente, incluso una conversación nueva que comparte el mismo prefijo estático de 29,000 tokens tiene 0% de acierto en la primera llamada
- Como resultado, en cada conversación se vuelve a cobrar todo el prefijo como entrada sin caché
- Use o no la aplicación el caché, GPT-5.6 aplica un recargo de escritura en caché de 1.25x a todos los prompts sin caché
-
Restricciones de las cache keys explícitas
- El caché explícito requiere
prompt_cache_breakpointy unprompt_cache_keyobligatorio - La key también forma parte de la identidad del caché, así que aunque el prompt sea idéntico, si la key cambia no hay acierto
- Cada key se asigna a un nodo de caché que procesa unas 15 solicitudes por minuto; si se supera ese nivel, OpenAI distribuye el tráfico a otros nodos con caché frío independiente
- Por eso, decidir la unidad de la key es una decisión clave de diseño
- Key por conversación: las conversaciones nuevas no acertaban el prefijo compartido y la tasa de acierto en la primera llamada era 0%
- Una sola key global: todas las solicitudes se hashean a un nodo, y si el tráfico de producción supera 15 rpm se desborda a nodos fríos
- Key por workspace: todas las conversaciones del workspace del cliente comparten el elemento y al mismo tiempo el tráfico por key se mantiene bajo
- El caché explícito requiere
-
Caché jerárquico por workspace
- La configuración real usa una key por workspace con formato
ws:{workspaceId}y divide el prompt del sistema en capas de breakpoint - El elemento A contiene las herramientas y el prefijo estático, reduciendo el costo de la primera llamada de la sesión
- El elemento B añade al prefijo estático el contexto del workspace
- El elemento C es la cadena completa de prompt por sesión, desde el primer turno hasta el mensaje más reciente
- Si cambia la memoria del workspace, el elemento B deja de acertar, pero el elemento A sigue acertando, así que solo se vuelve a escribir el tamaño del contexto modificado y no los 29,000 tokens completos
- El elemento C aprovecha la cadena implícita completa de prompt de OpenAI dentro de la sesión porque el prompt sigue una estructura estrictamente append-only
- Debido al particionamiento de keys de OpenAI, no es posible compartir el prefijo estático entre workspaces
- En cambio, Anthropic usa un caché a nivel de organización sin particionamiento por keys, así que sí puede compartir ese prefijo
- En GPT-5.6, cada workspace hace una sola escritura fría de 29,000 tokens por ventana de inactividad, con un costo aproximado de $0.18
- Ese costo está acotado y es predecible
- La configuración real usa una key por workspace con formato
-
Resultado tras corregir el caché
- La tasa de acierto en la primera llamada subió de cerca de 0% a 83.7%
- El total de tokens de entrada sin caché se redujo 28%
- El costo por suite de evaluación de GPT-5.6 quedó por debajo del de Opus, y toda la brecha inicial de costo provenía de una configuración incorrecta del caché
- Una comparación de costos entre modelos donde solo uno empieza con caché frío no es válida
Reproducción del razonamiento convertida en autocontenida
- La Responses API de GPT-5.6 reproduce por defecto el razonamiento del turno anterior mediante una referencia del servidor al elemento, y en conversaciones de producción aparecían errores intermitentes de
Item 'rs_...' not found - Al establecer
store: false, el SDK solicita encrypted reasoning content y reproduce un blob autocontenido en lugar de un puntero a estado del servidor - Aunque los bytes enviados por la aplicación sigan una estructura append-only, el estado de razonamiento del lado del servidor puede cambiar el prompt válido
- Con el harness de evaluación, el esquema de herramientas, el prompt cache y la reproducción del razonamiento ya corregidos, GPT-5.6 Sol ahora opera como el modelo predeterminado de producción en Ploy
1 comentarios
Opiniones de Hacker News
Frases como “con esas cifras, realmente vale la pena migrar el modelo” suenan demasiado ridículas. Ojalá quien hizo escribir el texto hubiera pulido al menos el típico estilo de LLM
La forma de encadenar frases cortas con dos puntos, comas y puntos también es pésima y frustrante. Hay buenas ideas, como que la caché por coincidencia de prefijo parcial desapareció en GPT-5.6, pero no es un texto cómodo de leer
Escribí reglas para evitar dos puntos innecesarios, guiones largos, fragmentos de oración disfrazados de énfasis y errores gramaticales que suelo cometer; también puse como referencia a Brian Kernighan y Rob Pike, por su escritura técnica clara, conversacional y sin pretensiones. Un documento no solo debe ser fácil de leer, también debe dar ganas de leerlo
Si generas documentos con frecuencia, vale mucho la pena hacer que el agente consulte WRITING.md. Muchas veces mejora la legibilidad mucho más que cambiar al modelo más reciente, y permite mantener un estilo consistente aunque cambies de modelo
Migré a 5.6 varios workflows variados, pequeños y simples que antes corrían en 5.4-nano y mini, y en general mejoraron dentro del rango que menciona el artículo; incluso mejoró la calidad en algunas tareas de clasificación
En muchas empresas, este tipo de actualización de modelo es básicamente cambiar una sola línea de código. Para workflows críticos usamos una excelente arquitectura de ruteo de modelos, pero no vale la pena armar eso para tareas simples, y también hay que considerar los problemas de estabilidad
En general funciona como se anuncia. Al enviar la mayor parte del trabajo actual a terra, el costo se redujo a la mitad y el tiempo de respuesta mejoró 50%. Usamos luna para complementar los resultados de detección de OpenCV; sus capacidades son muy limitadas, pero es rápido y casi gratis. En nuestro trabajo, Sol fue apenas un poco mejor que terra
Sol ultra también hizo un gran trabajo con la evaluación en sí. Generó un material grande con recomendaciones razonables, una lista de salidas para revisar y comparar manualmente, datos originales y procesados, y el CPM por consulta. Sin gastar más que la suscripción Pro, tras correrlo unas horas, el costo de referencia bajó 50% y el throughput aumentó 100%
Mi experiencia es parecida. Los servicios como OpenRouter, que presumen de failover, casi no sirven más allá de pruebas en sandbox. En producción, los modelos no son realmente intercambiables entre sí, y los entornos de ejecución que realizan trabajo serio con agentes dependen de muchas más características específicas de cada modelo de lo esperado
Aunque otro modelo funcione sin errores, el rendimiento y la eficiencia son otra cosa. Algunos modelos, como la familia Claude, requieren ajustar el prompt de sistema a las formas de expresión con las que se familiarizaron durante el entrenamiento; otros funcionan mejor con delimitadores distintos. Si importa el rendimiento óptimo, hay que ver el entorno de ejecución, el prompt y el modelo como un solo sistema, y no pensar que se pueden intercambiar libremente como piezas
He visto casos donde hacen una tabla de correspondencia del tipo
model -> {{prompts}, {tools descriptions}, ...}, pero eso es demasiado extremo. A partir de cierto punto, el modelo debe adaptarse a nuestros prompts; si no puede, se lo excluye de los candidatos de failover y no se envían solicitudes a su APIEs irónico que, debajo de un artículo lleno de ideas profundas sobre infraestructura, la mitad de los comentarios critiquen solo el estilo forzado. Aunque Claude haya ayudado a pulir las frases, si el texto contiene un plan aplicable de inmediato para reducir 30% el presupuesto de API y corregir lecturas de archivos vacíos, ¿no es eso más importante?
Personalmente, quejarse del estilo me parece algo ridículo. Tal vez porque soy malo con la gramática y la ortografía, me concentro más en el contenido central: conceptos, hechos y argumentos, que en la forma de transmitirlo. La gramática y la ortografía son los árboles; el bosque es lo importante
Si mis textos no tienen tantos errores es gracias al dictado y a atajos que hice yo mismo. Corrigen el texto seleccionado con un LLM local y luego lo reemplazan; nada ha mejorado tanto mi calidad de vida y la calidad de mi escritura como esas dos herramientas
“A partir de hoy, el agente de Ploy usa GPT-5.6 Sol, lanzado esta mañana”; entonces, ¿lo cambiaron con resultados de apenas medio día de pruebas? ¿La empresa la manejan adolescentes?
Las evaluaciones se ejecutan en GitHub CI, y pueden correr en unos 15 minutos el conjunto completo de más de 115 evaluaciones sobre tareas de diseño web y marketing en las que se especializa ploy.ai. Después de activar el modelo con feature flags de PostHog, monitorearon activamente las fallas.
Intentan trasladar a Ploy todo lo posible del conocimiento adquirido al operar Webflow, que soportaba más del 1% de internet, para poder soportar una porción aún mayor de internet.
Aunque el agente de Ploy crea y modifica sitios web reales de marketing, planifica, lee codebases, escribe componentes, genera imágenes, captura sus propios resultados y decide si terminó, incluso sin pruebas rigurosas esperaría que Fable sea mucho mejor que Opus para crear sitios de marketing. En la creación de presentaciones, definitivamente es muy superior.
La solución de cambiar solo en los modelos de la familia OpenAI todos los atributos opcionales para que sean obligatorios pero permitan null con
anyOf: [T, null]huele a que algo está mal. Solo he usado una forma modificada de MCP, pero no está claro por qué las definiciones de tipos de TypeScript afectarían el JSON Schema que el agente envía al backend de inferencia.La especificación de MCP tiene un campo explícito para representar parámetros opcionales, así que parece haber un bug en algún punto entre la capa de TypeScript y la descripción de herramientas que realmente se transmite. Puede que el backend de inferencia haya pasado de “generar una respuesta de herramienta válida” a “generar una respuesta válida ajustada a un JSON Schema sin parámetros opcionales”, pero no se puede juzgar sin ver la solicitud real.
required.Parte de la causa parece estar relacionada con que usar decodificación restringida reduce la inteligencia. Garantiza la validez del esquema, pero baja mucho la capacidad, así que puede estar bien para clasificación, resumen o mejora de prompts, pero hay que tener cuidado en ejecuciones iterativas de agentes.
Entornos de ejecución como Claude Code hacen mucho preprocesamiento, recuperación y limpieza, pero normalmente eso no se ve. En la práctica, suele ser más fácil y mejor hacer el entorno de ejecución más flexible y adaptarlo a las particularidades de cada modelo, en lugar de asumir y exigir una precisión perfecta. Los modelos también cambian cada uno o dos meses. Esta es la IA aplicada hecha a puro vibe.
Me gustaría saber el monto aproximado de cuánto cuesta realmente crear un sitio con Opus y con Sol, respectivamente.
Al mover el workflow a Reasonix y aprovechar los cache hits en DeepSeek, el costo por solicitud se volvió prácticamente cercano a cero incluso usando proveedores estadounidenses no subsidiados.
En lugar de usar GPT-5.6 Sol por defecto en todos los workspaces de Ploy, valdría la pena considerar Luna para algunas tareas que manejan herramientas reales. Es sorprendentemente capaz y rápida.
Sol es excelente para hablar con personas y coordinar llamadas de agentes, pero es demasiado caro para usarlo en todo. Por el precio de una ejecución de Sol se puede ejecutar Luna cinco veces, y estadísticamente la diferencia entre una muestra y cinco muestras es considerable.
0.9^5 = 0.59, es decir, 59%. La precisión de una sola ejecución de Sol quizá ronde el 95%. Los números reales variarán, pero puede resultar más barato verificar al final con Sol.Según cuántos agentes se usen para qué tipo de tarea, puede terminar costando más y dando peores resultados.