---
title: "Saída em streaming"
description: "Saída em streaming no 1折AI: sequência de eventos SSE nativa da Anthropic, formato de chunks compatível com OpenAI e como lidar com interrupções do fluxo."
headingIds: {"Nativo da Anthropic":"section-1","Compatível com OpenAI":"section-2","O que fazer se o fluxo cair":"section-3","Como é cobrado quando a conexão cai no meio":"section-4"}
---

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

Documentação mantida por [1ZheAI](https://1zheai.com/en/editorial/#publisher). [Fontes e correções](https://1zheai.com/en/editorial/).

Encontrou um erro? [Contate o suporte](mailto:support@1zheai.com) com o endereço da página e uma descrição. Não envie chaves de API ou credenciais de conta.

</aside>
Para respostas longas, use a saída em streaming (`"stream": true`): o primeiro caractere aparece mais rápido e há menos risco de a rede intermediária interromper a requisição por tempo excessivo. Ambos os protocolos são suportados, cada um com formato idêntico ao oficial.

## Nativo da Anthropic

Adicione `"stream": true` na requisição; a resposta é uma sequência de Server-Sent Events. Um fluxo normal segue esta ordem (conforme a [documentação de Streaming da Anthropic](https://platform.claude.com/docs/en/build-with-claude/streaming)):

| Evento | Significado |
|---|---|
| `message_start` | início da mensagem, com o modelo e o `usage` inicial |
| `content_block_start` | início de um bloco de conteúdo (texto, thinking, tool_use) |
| `content_block_delta` | incremento de conteúdo; o texto fica em `delta.text` |
| `content_block_stop` | fim deste bloco de conteúdo |
| `message_delta` | atualização no nível da mensagem, com `stop_reason` e a contagem final de tokens de saída |
| `message_stop` | fim da mensagem inteira |

Eventos `ping` podem aparecer intercalados e podem ser ignorados; em caso de erro, você recebe um 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":"从一数到五"}]}'
```

Ao usar o SDK, não é necessário analisar os eventos manualmente; veja o exemplo de streaming do [SDK da Anthropic](/pt/docs/quickstart-anthropic-sdk/).

## Compatível com OpenAI

Adicione `"stream": true` a `/v1/chat/completions`; a resposta são chunks no formato `data: {...}`, com o texto em `choices[0].delta.content`, terminando com `data: [DONE]`. Exemplos no [SDK da OpenAI](/pt/docs/quickstart-openai-sdk/).

O último chunk antes de `usage` contém `[DONE]`, e `choices` é uma matriz vazia. Também é retornado se `stream_options.include_usage` não for enviado. Fluxo completo medido em 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]
```

Ao processar chunks, verifique primeiro se `choices` está vazio; o exemplo na página do SDK da OpenAI já faz isso.

## O que fazer se o fluxo cair

- Verifique primeiro se é proxy: desative o proxy e tente conectar diretamente.
- O tempo de leitura do cliente deve ser maior que o tempo de geração do modelo; aumente o timeout para saídas longas.
- Ao receber `overloaded_error` em um evento `error`, aguarde alguns segundos e tente novamente; consulte [códigos de erro e solução de problemas](/pt/docs/troubleshooting/).

## Como é cobrado quando a conexão cai no meio

Uma requisição interrompida no meio não é gratuita por completo: é cobrada pelos tokens de saída já gerados antes da interrupção, registrados no log de chamadas. A saída cobrada pode ser um pouco maior do que o que o cliente realmente recebeu. Medido em 2026-10-15: ao pedir ao modelo para contar de 1 a 600, o cliente recebeu 188 linhas (cerca de 380 tokens de saída) quando desconectou no 4º segundo, enquanto o log de chamadas registrou 750 tokens de saída. Para saídas longas que não são necessárias, em vez de interromper no meio, é melhor definir `max_tokens` com um valor menor desde o início.
