---
title: "Salida en streaming"
description: "Salida en streaming en 1折AI: secuencia de eventos SSE nativa de Anthropic, formato de chunks compatible con OpenAI y cómo manejar la interrupción del flujo."
headingIds: {"Nativo de Anthropic":"section-1","Compatible con OpenAI":"section-2","Qué hacer si se corta el flujo":"section-3","Cómo se factura una desconexión a mitad de camino":"section-4"}
---

<aside className="docs-publication" data-pagefind-ignore>

Documentación mantenida por [1ZheAI](https://1zheai.com/en/editorial/#publisher). [Fuentes y correcciones](https://1zheai.com/en/editorial/).

¿Encontraste un error? [Contacta con soporte](mailto:support@1zheai.com) indicando la dirección de la página y una descripción. No envíes claves de API ni credenciales de cuenta.

</aside>
Para respuestas largas usa la salida en streaming (`"stream": true`), el primer carácter aparece antes y es menos probable que la red intermedia corte la petición por durar demasiado. Ambos protocolos son compatibles y el formato coincide con el oficial en cada caso.

## Nativo de Anthropic

Añade `"stream": true` a la petición; la respuesta es una secuencia de Server-Sent Events. Un flujo normal sigue este orden (procedente de [la documentación de streaming de Anthropic](https://platform.claude.com/docs/en/build-with-claude/streaming)):

| Evento | Significado |
|---|---|
| `message_start` | inicio del mensaje, con el modelo y el `usage` inicial |
| `content_block_start` | comienza un bloque de contenido (texto, thinking, tool_use) |
| `content_block_delta` | incremento de contenido; el texto va en `delta.text` |
| `content_block_stop` | fin de ese bloque de contenido |
| `message_delta` | actualización a nivel de mensaje, con `stop_reason` y el recuento final de tokens de salida |
| `message_stop` | fin de todo el mensaje |

Pueden intercalarse eventos `ping`, que se pueden ignorar; si hay un error se recibe un evento `error`.

```bash
curl -N https://1zheai.com/v1/messages \
  -H "x-api-key: $ONEZHE_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{"model":"claude-sonnet-5-5","max_tokens":128,"stream":true,
       "messages":[{"role":"user","content":"从一数到五"}]}'
```

Al usar el SDK no hace falta analizar los eventos a mano; consulta los ejemplos de streaming del [SDK de Anthropic](/es/docs/quickstart-anthropic-sdk/).

## Compatible con OpenAI

Añade `"stream": true` a `/v1/chat/completions` y la respuesta son chunks en forma de `data: {...}`, con el texto en `choices[0].delta.content` y el final marcado por `data: [DONE]`. Ejemplos de SDK en [el SDK de OpenAI](/es/docs/quickstart-openai-sdk/).

El último chunk antes de `[DONE]` lleva `usage` y `choices` es un array vacío. También se devuelve aunque no envíes `stream_options.include_usage`. Flujo completo medido el 2026-10-15:

```text
data: {"id":"msg_011Cg3ERqM8nN58LxLt7TVuG","object":"chat.completion.chunk","created":1792031230,"model":"claude-sonnet-4-6","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}

data: {"id":"msg_011Cg3ERqM8nN58LxLt7TVuG","object":"chat.completion.chunk","created":1792031230,"model":"claude-sonnet-4-6","choices":[{"index":0,"delta":{"content":"ok"},"finish_reason":null}]}

data: {"id":"msg_011Cg3ERqM8nN58LxLt7TVuG","object":"chat.completion.chunk","created":1792031230,"model":"claude-sonnet-4-6","choices":[{"index":0,"delta":{"content":""},"finish_reason":"stop"}]}

data: {"id":"msg_011Cg3ERqM8nN58LxLt7TVuG","object":"chat.completion.chunk","created":1792031230,"model":"claude-sonnet-4-6","choices":[],"usage":{"prompt_tokens":370,"completion_tokens":4,"total_tokens":374}}

data: [DONE]
```

Al procesar los chunks, comprueba primero si `choices` está vacío; el ejemplo de la página del SDK de OpenAI ya lo hace así.

## Qué hacer si se corta el flujo

- Primero descarta que sea el proxy: desactívalo y conecta directamente para volver a probar.
- El tiempo de lectura del cliente debe ser mayor que el tiempo de generación del modelo; con salidas largas aumenta el valor del timeout.
- Si recibes `overloaded_error` en un evento `error`, espera unos segundos y reintenta; consulta [códigos de error y solución de problemas](/es/docs/troubleshooting/).

## Cómo se factura una desconexión a mitad de camino

Una petición que se desconecta a mitad de camino no es gratis en su totalidad: se facturan los tokens de salida ya generados antes de la desconexión, y quedan registrados en el log de llamadas. Los tokens de salida facturados pueden ser algo más que los que el cliente llegó a recibir. Medido el 2026-10-15: al pedir al modelo que cuente del 1 al 600, el cliente recibió 188 líneas (unos 380 tokens de salida) cuando se desconectó en el segundo 4, y el log de llamadas registró 750 tokens de salida. Para salidas largas que no necesitas, en lugar de desconectarte a mitad de camino, mejor pon `max_tokens` pequeño desde el principio.
