Как получить потоковый ответ модели и показать его пользователю?
- Что такое Server-Sent Events?
- Как включить stream в API модели?
В запросе включают потоковый режим (stream), и API отдаёт ответ частями по протоколу Server-Sent Events: каждое событие — строка «data: {…}» с очередным фрагментом текста (delta). Клиент добавляет фрагменты к уже показанному тексту, а последнее событие сообщает причину остановки и расход токенов. Пользователь видит начало ответа через доли секунды вместо ожидания всего текста.
- SDK провайдеров дают итератор по фрагментам — вручную разбирать SSE обычно не нужно
- Ошибка может прийти посреди потока — интерфейс должен показать её, а не зависнуть
- Markdown рендерят по мере поступления, учитывая незакрытые блоки
А ещё В браузере SSE принимают через fetch с чтением потока или EventSource
Подробно
Python (схематично):
stream = client.chat.completions.create(
model=MODEL, messages=messages, stream=True)
for chunk in stream:
print(chunk.choices[0].delta.content or "", end="", flush=True)
Формат SSE:
data: {"delta": "При"}
data: {"delta": "вет"}
data: [DONE]
В интерфейсе: индикатор «печатает», кнопка «остановить», обработка обрыва, сохранение полного ответа после завершения.
Что хотят услышать
- Потоковый режим и SSE.
- Склейка фрагментов на клиенте.
- Финальное событие с причиной остановки и токенами.
- Обработка ошибок посреди потока.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Потоковый режим отдаёт весь ответ одним событием после генерации
- ✗Потоковый ответ стоит в два раза дороже обычного
- ✓Фрагменты по SSE дописывают к тексту, финал несёт причину остановки
- ✗Для стриминга клиент открывает новое HTTP-соединение на каждый токен ответа
Разбор темы
- LLM в продакшене — стоимость, надёжность и наблюдаемость
Как сделать LLM-функцию быстрой, недорогой и надёжной — стриминг, повторы, кэш, guardrails, трассировка и борьба с галлюцинациями.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.