Вопрос с собеседования · 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 минут бесплатно.

Разбор собеседования