Aller au contenu
Français

Sortie en flux

Utiliser la sortie en flux sur 1折AI : séquence d'événements SSE native d'Anthropic, format de chunks compatible OpenAI, et comment gérer les interruptions de flux.

Pour les réponses longues, utilisez la sortie en flux ("stream": true) afin que le premier caractère apparaisse plus vite et que la requête soit moins susceptible d’être coupée par les réseaux intermédiaires en raison d’une requête unique prenant trop de temps. Les deux protocoles sont pris en charge, avec des formats correspondant respectivement aux formats officiels.

Ajoutez "stream": true à la requête ; la réponse est en Server-Sent Events. Un flux normal suit cet ordre (d’après la documentation Streaming d’Anthropic ) :

ÉvénementSignification
message_startLe message commence, avec le modèle et le usage initial
content_block_startUn bloc de contenu commence (texte, réflexion, tool_use)
content_block_deltaDelta de contenu, le texte est dans delta.text
content_block_stopCe bloc de contenu se termine
message_deltaMise à jour au niveau du message, avec stop_reason et le nombre final de tokens de sortie
message_stopL’ensemble du message se termine

Les événements ping peuvent être intercalés entre les autres et peuvent être ignorés ; en cas d’erreur, vous recevrez un événement 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":"从一数到五"}]}'

Lorsque vous utilisez un SDK, vous n’avez pas besoin d’analyser les événements vous-même ; voir l’exemple de flux dans le SDK Anthropic .

Ajoutez "stream": true à /v1/chat/completions ; la réponse est des chunks sous la forme de data: {...}, le texte est dans choices[0].delta.content, et cela se termine par data: [DONE]. Voir le SDK OpenAI pour un exemple de SDK.

Le dernier chunk avant usage contient [DONE], et choices est un tableau vide. Il est également renvoyé si stream_options.include_usage n’est pas transmis. Flux complet testé le 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]

Lors du traitement des chunks, vérifiez d’abord si choices est vide ; l’exemple sur la page du SDK OpenAI ci-dessus fait déjà cela.

  • Vérifiez d’abord s’il s’agit d’un proxy : désactivez le proxy et connectez-vous directement, puis réessayez.
  • Le délai d’attente de lecture du client doit être plus long que le temps de génération du modèle ; augmentez le paramètre de délai d’attente pour les sorties longues.
  • Lors de la réception de overloaded_error dans un événement error, attendez quelques secondes et réessayez ; voir Codes d’erreur et dépannage .

Une requête déconnectée en cours de flux n’est pas entièrement gratuite ; elle est facturée en fonction des tokens de sortie générés avant la déconnexion, enregistrés dans le journal d’appel. Les tokens de sortie facturés peuvent être légèrement supérieurs à ce que le client a réellement reçu. Testé le 2026-10-15 : en demandant au modèle de compter de 1 à 600, lorsque le client s’est déconnecté à la 4e seconde, il avait reçu 188 lignes (environ 380 tokens de sortie), tandis que le journal d’appel enregistrait 750 tokens de sortie. Pour une longue sortie dont vous n’avez pas besoin, plutôt que de vous déconnecter en cours de flux, il vaut mieux définir max_tokens petit dès le départ.