Поток LLM завис после первого токена: какие тайм-ауты нужны кроме TTFT

Первый токен пришёл быстро, но затем пользователь минуту смотрит на незаконченный ответ. Дашборд TTFT показывает успех, а реальная задача не завершена. Для потокового ответа отдельно контролируйте начало, дальнейший прогресс и общее завершение. Один успешный первый фрагмент не отменяет оставшиеся ограничения времени.

Также различайте живое соединение и полезное продолжение. Технические события могут поступать регулярно, пока текст ответа больше не меняется.

Учебная ситуация

Данные ниже вымышлены: они показывают способ разбора, а не измерения действующего сервиса.

СобытиеВремя от запускаЧто известно
Первый текстЧетыреста миллисекундГенерация началась
Следующий текстСемьсот миллисекундЕсть прогресс
Служебный heartbeatОдна секундаКанал подаёт сигнал
Долгое отсутствие нового текстаПосле этогоЗавершение не подтверждено

Для учебного сервиса можно задать отдельный срок ожидания первого результата, предельный перерыв полезного прогресса и общий дедлайн. Конкретные числа выбирают по типам событий и пользовательскому сценарию. Пауза текста во время законного вызова инструмента отличается от зависания: приложение должно знать текущую фазу.

Если heartbeat сбрасывает таймер прогресса, формально живой канал способен удерживать запрос бесконечно. Но игнорировать любые служебные события тоже неверно: некоторые подтверждают реальные этапы работы. Классификация событий должна соответствовать контракту транспорта и приложения.

Проверка перед внедрением

В тестовом источнике выдайте два текстовых фрагмента, затем продолжайте только служебные сигналы. Проверьте, что срабатывает выбранная политика отсутствия прогресса, а не успешное завершение. Затем воспроизведите медленный, но допустимый инструмент и нормальный длинный ответ.

Отдельно оборвите соединение без итогового события. Сохраните полученную часть как незавершённую, если это позволяет продукт, и покажите точный статус. Не повторяйте автоматически всю задачу, если она уже могла выполнить внешнее действие. В журнале различайте транспортный обрыв, отсутствие прогресса, общий дедлайн и штатное окончание потока.

Границы применимости

Доступность heartbeat и завершающих событий зависит от канала. SSE допускает служебные сообщения, но не определяет бизнес-успех генерации. Локальная отмена ожидания также не доказывает остановку вычисления на стороне поставщика.

В SSE служебные комментарии могут поддерживать соединение; смысл прогресса и завершения задаёт приложение. Официальная документация помогает уточнить технический механизм; предложенный диагностический протокол — наш учебный пример.

Если хотите связать этот разбор с системной практикой, посмотрите программу LLMOps & Evaluation на Latorn: она охватывает контур оценки, версии промптов, мониторинг и выпуск LLM-приложений. Перед оплатой сопоставьте требования курса со своим опытом и задачей проекта.

Следующий шаг: LLMOps: измерение качества, расходы и выпуск изменений. По смежным вопросам: Тайм-ауты в LLM-eval: как не улучшить метрику удалением неудачных ответов, Манифест релиза LLM-приложения: что версионировать кроме промпта.