En pocas palabras: Sí, conviene reintentar: los semantic voids son transitorios. Según el Cross-Vendor Semantic Void Matrix publicado en Zenodo el 29 de julio de 2026, el 37,09% de las ejecuciones exitosas devuelven cero bytes de contenido con stop_reason “end_turn”. Aplicá backoff exponencial con jitter en cada reintento.
Un estudio que publicaron en Zenodo el 29 de julio de 2026 reveló un dato incómodo: el 37,09% de las ejecuciones “exitosas” de varios LLMs terminan sin un solo byte de salida. Toca repensar la retry strategy ante respuestas vacías de Claude.
Un semantic void es una ejecución de un modelo de lenguaje que el proveedor marca como exitosa pero que entrega exactamente cero bytes visibles de salida en UTF-8. Según el Cross-Vendor Semantic Void Matrix, preprint difundido en Zenodo el 29 de julio de 2026, el fenómeno apareció en el 37,09% de 31.430 pruebas sobre 11 modelos de OpenAI, Anthropic, Google y Moonshot.
En 30 segundos
- 37,09% de tasa global. El estudio Cross-Vendor Semantic Void Matrix contabilizó 11.658 voids sobre 31.430 pruebas entre modelos de OpenAI, Anthropic, Google y Moonshot.
- No llega ningún error. La API responde con éxito y stop_reason “end_turn”, pero el campo content viene vacío.
- Sí conviene reintentar. Los voids suelen ser transitorios: aplicá backoff exponencial con jitter y un tope de 5 a 7 intentos.
- Fallback como plan B. Si el reintento se agota, cambiá de modelo, simplificá el prompt o escalá a una persona.
Claude es un modelo de lenguaje grande y asistente de inteligencia artificial desarrollado por Anthropic, diseñado para generar texto, responder preguntas, analizar documentos y asistir en tareas de programación. Fue lanzado en marzo de 2023.
¿Qué son los semantic voids y cuál es su tasa real de ocurrencia?
Un semantic void es una respuesta que la API entrega con estado de éxito pero sin contenido: cero bytes visibles. No es un timeout, no es un refusal y tampoco un bloqueo de seguridad; el proveedor da por terminada la ejecución y vos recibís un contenedor vacío donde esperabas texto.
El Cross-Vendor Semantic Void Matrix midió la escala del problema con datos duros. Los autores corrieron 31.430 pruebas de turno único contra 11 identificadores exactos de modelos de OpenAI, Anthropic, Google y Moonshot, y registraron 11.658 voids: el 37,09% del total (que no es poco).
Lo más interesante del diseño es el grupo de control. En 4.290 pares semánticos estrictos, los brazos nulos produjeron 2.505 voids mientras que los controles con licencia de salida produjeron cero. Mismas condiciones, distinta instrucción, resultados opuestos. Eso sugiere estructura semántica detrás del fenómeno, aunque el paper se cuida de no afirmar mecanismo interno, intención ni explicación causal. Más contexto en nuestra guía completa sobre Claude.
El estudio distingue cuatro subtipos de igual jerarquía (V0, V1, V2 y VU) que los metadatos de terminación del proveedor determinan, y conserva aparte las respuestas visibles, los near-voids, los refusals, los bloqueos de seguridad y los fallos operativos. Ojo con este detalle: al subir el techo a 16.000 tokens, 313 de 500 pruebas siguieron siendo voids, todos V0 o V2. Traducción: “se acabó el presupuesto de salida” no explica todo lo que pasa.
¿Es problema exclusivo de Claude? Para nada. La matriz cubre cuatro empresas a la vez, aunque el abstract no publica el desglose individual por modelo. El análisis completo de los datos está disponible en un repositorio de GitHub para quien quiera revisar los intentos crudos.
¿Por qué Claude Opus 4.6 devuelve respuestas vacías sin marcar error?
Ponele que le pedís a Opus 4.6 que te arme un JSON con datos de clientes. Tu agente llama a la API, recibe un 200 verde, el stop_reason dice end_turn, el parser busca el campo de texto y encuentra un array vacío, tus logs marcan la operación como exitosa porque el status code está en orden, y el flujo sigue adelante tomando decisiones sobre información que nunca existió. A eso lo llaman falso éxito, y es el escenario más peligroso del fenómeno.
Para interpretar estos casos, la referencia útil es la documentación de Anthropic sobre stop reasons, que explica cómo leer los metadatos de terminación de cada respuesta.
¿Cuál es la causa interna? Nadie lo sabe todavía. El estudio lo dice sin vueltas: establece una clase reproducible de ejecuciones exitosas sin bytes visibles, pero no afirma mecanismo, arquitectura compartida ni explicación causal. Lo que sí hicieron fue blindar los datos: la verificación reprodujo 62.968 hashes de eventos y revisó el set completo de 31.484 intentos crudos con registros enlazados por hash.
La caja negra sigue cerrada, pero el termómetro es confiable.
¿Cómo detectar una respuesta vacía de Claude en tu código?
Bastan tres chequeos que podés agregar hoy mismo a cualquier cliente de API, ya sea que uses el SDK crudo, LangChain o un wrapper casero. La regla de oro: nunca te guíes solo por el status code. Ya lo cubrimos antes en elegir entre Sonnet y Opus.
- Revisá el stop_reason. Un “end_turn” sin texto detrás es el patrón típico del void; guardalo en tus logs tal cual llega.
- Validá el campo content. Si el array viene vacío con respuesta exitosa, es un void y no una respuesta corta.
- Chequeá usage.output_tokens. Cero tokens de salida junto a una terminación normal confirma el caso.
Un guard mínimo en pseudocódigo:
if response.stop_reason == "end_turn" and len(response.content) == 0:
log_void(request_id, response.usage, metadata_del_proveedor)
return REINTENTAR_CON_BACKOFFSin esta validación, las respuestas vacías pasan como exitosas hasta que alguien mira debajo del capot.
¿Cuál es la mejor retry strategy para respuestas vacías de Claude?
Reintentar tiene sentido porque los voids suelen ser transitorios, pero solo con disciplina: backoff exponencial con jitter y un tope de 5 a 7 intentos. Antes de escribir el loop, clasificá el resultado, porque cada tipo de falla pide una respuesta distinta.
| Resultado | Cómo se presenta | ¿Reintentar? | Acción recomendada |
|---|---|---|---|
| Semantic void | Éxito + content vacío | Sí | Backoff exponencial con jitter |
| Refusal explícito | El modelo dice que no | No | Reformulá el prompt |
| Bloqueo de seguridad | Corte por filtros | No | Cambiá el enfoque de la solicitud |
| Rate limit o error operativo | 4xx/5xx o timeout | Depende | Backoff y respetá los headers |

El patrón que usa la industria arranca en 1 o 2 segundos y duplica la espera en cada intento, sumando jitter aleatorio para que mil clientes no golpeen la API al mismo tiempo:
| Intento | Espera base |
|---|---|
| 1 | 1 segundo |
| 2 | 2 segundos |
| 3 | 4 segundos |
| 4 | 8 segundos |
| 5 | 16 segundos |
Si trabajás en Python, librerías como tenacity implementan el patrón completo, y las guías de patrones de retry para agentes detallan las variantes según el tipo de error. Dos alertas de monitoreo que valen oro: tasa de voids por arriba del 5% y más de 10 reintentos por minuto en un mismo request, señal clásica de retry storm.
¿Cuándo usar un modelo fallback en lugar de reintentar?
Cuando el reintento agota sus 5 a 7 intentos, cortá el loop y activá el plan B en cascada. Seguir martillando la misma API con el mismo prompt es insistencia estéril. Cubrimos ese tema en detalle en integrar Claude en Make.com.
- Cambiá a un modelo fallback. Si otro modelo responde bien al mismo prompt, ganaste tiempo y confirmaste que el problema era puntual.
- Simplificá la solicitud. Salidas más cortas reducen la superficie de falla, aunque el experimento de 16.000 tokens muestra que el presupuesto no lo explica todo.
- Degradá con elegancia. Devolvé una respuesta parcial o un aviso claro al usuario en vez de un blanco silencioso.
- Escalá a una persona. En flujos de alto impacto, un humano en el circuito cuesta menos que una decisión tomada sin datos.
La guía de estrategias de fallback para LLMs de FutureAGI ordena estas opciones por costo y complejidad, y coincide en lo esencial: el fallback complementa al retry cuando el reintento deja de ser rentable.
¿Qué monitorear en producción para evitar sorpresas?
Tres métricas cubren la mayor parte del problema: tasa de respuestas vacías sobre el total, intentos promedio por request y latencia extra que mete el backoff. Con esas tres en un dashboard ya ves si el fenómeno es ruido o tendencia.
Para los registros, copiá la jugada del estudio: preservá los intentos crudos con metadatos del proveedor y hashes verificables, así cualquier void queda auditable después. Y si no querés sumar otro SaaS a la pila, montar tu propio stack de logs en un VPS de donweb.com te deja los registros bajo tu control y fuera de facturas por gigabyte ingestado.
¿Qué está confirmado y qué sigue abierto?
Confirmado:
- La existencia y magnitud del fenómeno, con verificación sobre 62.968 hashes de eventos.
- Que el presupuesto de salida no explica todos los casos: 313 de 500 pruebas siguieron en void con techo de 16.000 tokens.
Pendiente o sin confirmar:
- La causa interna: el paper no atribuye mecanismo, intención ni explicación causal.
- El desglose de tasas por modelo y por proveedor: el abstract no lo publica.
Tres errores comunes al manejar respuestas vacías
Confiar en el status code. Si persistís la respuesta porque llegó un 200, tu base de datos se llena de registros vacíos y tu producto empieza a mostrar blancos. Validá el contenido antes de guardar, siempre.
Reintentar sin tope ni jitter. Tras un incidente, todos tus clientes reintentan en el mismo segundo, la API se satura y el problema original se multiplica. Fijá un máximo de 5 a 7 intentos y dispersá los tiempos con aleatoriedad.
Tratar los refusals como fallas transitorias. Si el modelo dijo que no por política de contenido, reintentar el mismo prompt produce el mismo resultado y quema cuota en vano. Clasificá primero, reintentá después. Relacionado: la API de Claude 3 Opus.
Preguntas Frecuentes
¿Qué es un semantic void en modelos de lenguaje?
Es una ejecución que el proveedor marca como exitosa pero que devuelve cero bytes visibles de salida. Según el Cross-Vendor Semantic Void Matrix (2026), representó el 37,09% de 31.430 pruebas entre modelos de OpenAI, Anthropic, Google y Moonshot.
¿Cómo sé si Claude devolvió una respuesta vacía?
Chequeá tres cosas: stop_reason en “end_turn”, campo content como array vacío y usage.output_tokens en cero. Esa combinación, con status HTTP exitoso, es la firma del void.
¿Conviene reintentar cuando Claude devuelve una respuesta vacía?
Sí, porque los voids suelen ser transitorios. Aplicá backoff exponencial con jitter, empezando en 1 o 2 segundos, y cortá a los 5 o 7 intentos para pasar a un fallback.
¿Las respuestas vacías afectan solo a Claude?
No. El estudio registró voids en 11 identificadores de modelos de OpenAI, Anthropic, Google y Moonshot, aunque no publicó el desglose individual por proveedor en el abstract.
Conclusión
Lo que cambió es simple: las respuestas vacías dejaron de ser anécdotas de foro y pasaron a tener números, verificación por hash y un nombre. Con un 37,09% de voids medidos en laboratorio, tratar el status 200 como garantía de contenido dejó de ser defendible.
Si corrés agentes, el camino es corto: validá content antes de persistir, reintentá con backoff exponencial y tope de 7, prepará un fallback y medí la tasa de voids como cualquier otra métrica de calidad. Nada de esto requiere ciencia espacial; requiere dejar de confiar a ciegas en una respuesta “exitosa” que no trae nada.
