Skip to main content

Обзор

Потоковая передача позволяет получать токены ответа по мере их генерации, а не ждать полного ответа. Это идеально подходит для:
  • Чат-ботов - Отображение ответов по мере их ввода
  • Живых ассистентов - Показ прогресса в реальном времени
  • Длинных ответов - Немедленное начало отображения контента
  • Лучшего UX - Снижение воспринимаемой задержки

Как это работает

1

Включение потоковой передачи

Установите stream: true в вашем запросе
2

Получение фрагментов

Получайте токены ответа постепенно через SSE
3

Обработка событий

Парсите события data: содержащие фрагменты JSON
4

Обработка завершения

Следите за сигналом [DONE], чтобы узнать о завершении

Конечные точки

Потоковая передача работает с обоими форматами API:
Обе конечные точки поддерживают параметр stream: true.

Формат запроса

Формат OpenAI

Формат Anthropic

Формат ответа

Структура потока событий

Ответы отправляются как Server-Sent Events:

Жизненный цикл потока

  1. Начальный фрагмент - Содержит роль:
  1. Фрагменты контента - Инкрементальный текст:
  1. Финальный фрагмент - Включает finish_reason:
  1. Завершение потока:

Примеры реализации

Async Python

Расширенные функции

Вызов функций с потоковой передачей

Отслеживание прогресса

Буферизация для производительности

Обработка ошибок

Потоковые соединения могут прерваться в середине потока. Всегда реализуйте логику повторных попыток.

Лучшие практики

  1. Буферизация для обновлений UI - Не обновляйте DOM для каждого фрагмента (пакетная обработка улучшает производительность)
  2. Показывайте индикаторы загрузки - Отображайте индикаторы печати во время потоковой передачи
  3. Реализуйте таймауты - Устанавливайте разумные таймауты для соединений
  4. Обрабатывайте прерывания - Используйте логику повторных попыток с экспоненциальной задержкой
  5. Освобождайте ресурсы - Всегда правильно закрывайте потоки
  6. Тестируйте сценарии ошибок - Убедитесь, что ваше приложение корректно обрабатывает сбои сети

Советы по производительности

Объединяйте небольшие фрагменты перед обновлением UI, чтобы избежать избыточных обновлений DOM.
  • Используйте flush=True в print Python для немедленного вывода
  • Реализуйте debouncing для частых обновлений UI
  • Рассмотрите виртуализацию для длинных ответов
  • Используйте Web Workers для парсинга в браузерах
  • Отслеживайте использование памяти для длинных потоков

Связанное