Все статьи
Разработка8 минут

Streaming ответов AI через SSE: практическое руководство

Streaming уменьшает время до первого видимого фрагмента ответа: приложение показывает текст по мере генерации. Для этого сервер возвращает последовательность SSE-событий вместо одного JSON.

Как читать SSE-поток

Клиент читает response.body как поток байтов, декодирует UTF-8 и разделяет события по пустой строке. Каждая строка data содержит фрагмент или служебное событие. Нельзя считать, что один сетевой chunk равен одному SSE-событию: граница может пройти внутри строки.

  • накапливать неполный хвост между чтениями
  • разбирать только завершённые события
  • обрабатывать финальный маркер
  • закрывать reader при отмене пользователем

Ошибки до и после начала ответа

До отправки заголовков API может вернуть обычный JSON с HTTP-ошибкой. После начала SSE статус уже не меняется, поэтому ошибка может прийти отдельным событием. Интерфейс должен сохранить полученный текст и явно показать, что генерация прервалась.

Поддержка маршрутов NormaHub

Потоковый режим следует проверять для конкретного endpoint. Responses API поддерживает streaming. Для Chat Completions и Messages API потоковая выдача сейчас может возвращать 503 streaming_not_enabled, поэтому интеграция обязана иметь непотоковый fallback и не обещать streaming для всех моделей.

  • проверить маршрут тестовым запросом
  • добавить AbortController
  • не повторять оборванную генерацию автоматически без контроля дублей
Следующий материалКак подключить OpenAI-compatible API