Вопрос с собеседования · AI и LLM
Как реализовать потоковую выдачу ответа LLM пользователю?
MiddleLLM в продакшене
Ещё спрашивают так:
- Зачем стримить ответ модели?
- Что такое SSE?
Коротко
Модель генерирует ответ токен за токеном, и его можно показывать по мере генерации: воспринимаемая задержка падает с десятков секунд до времени первого токена. Провайдеры отдают поток через Server-Sent Events; бэкенд проксирует его клиенту (SSE или WebSocket), не буферизуя.
- Буферизация на прокси (nginx) ломает стриминг — её отключают
- Отмена: клиент ушёл — запрос к модели нужно прервать, иначе платите за ненужные токены
- Структурированный ответ (JSON) при стриминге парсят инкрементально или стримят только текстовые поля
А ещё Модерацию выхода приходится делать частями или с задержкой — компромисс со скоростью
Подробно
Цепочка: клиент ↔ ваш бэкенд ↔ API модели. Каждое звено должно передавать данные потоком:
- API модели — параметр stream, события с дельтами текста;
- бэкенд — асинхронный обработчик, который пересылает дельты сразу (SSE:
text/event-stream, flush после каждого события); - прокси и балансировщики — отключить буферизацию ответа, увеличить таймауты простоя;
- клиент — EventSource или fetch с чтением потока.
Тонкости:
- отмена — при закрытии соединения клиентом отменять запрос к модели;
- ошибки посреди потока — статус 200 уже отправлен, ошибку передают отдельным событием;
- инструменты — при tool calling поток содержит части вызова функции, их собирают до конца перед выполнением;
- подсчёт токенов и стоимости — провайдеры присылают итог в последнем событии.
Что хотят услышать
- Зачем стриминг и как он устроен по всей цепочке.
- Буферизация прокси и отмена.
- Ошибки и структурированный вывод при стриминге.
Проверьте себя
Несколько верных вариантов. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✓Отдавать поток клиенту через SSE или WebSocket без буферизации
- ✓Отключить буферизацию на прокси (nginx)
- ✓Прерывать запрос к модели, если клиент ушёл
- ✗Накопить весь ответ на бэкенде и отправить одним куском
Связанные вопросы
Партнёр платформы
Разбор собеседования
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.