Поток LLM завис после первого токена: какие тайм-ауты нужны кроме TTFT
Первый токен пришёл быстро, но затем пользователь минуту смотрит на незаконченный ответ. Дашборд TTFT показывает успех, а реальная задача не завершена. Для потокового ответа отдельно контролируйте начало, дальнейший прогресс и общее завершение. Один успешный первый фрагмент не отменяет оставшиеся ограничения времени.
Также различайте живое соединение и полезное продолжение. Технические события могут поступать регулярно, пока текст ответа больше не меняется.
Учебная ситуация
Данные ниже вымышлены: они показывают способ разбора, а не измерения действующего сервиса.
| Событие | Время от запуска | Что известно |
|---|---|---|
| Первый текст | Четыреста миллисекунд | Генерация началась |
| Следующий текст | Семьсот миллисекунд | Есть прогресс |
| Служебный heartbeat | Одна секунда | Канал подаёт сигнал |
| Долгое отсутствие нового текста | После этого | Завершение не подтверждено |
Для учебного сервиса можно задать отдельный срок ожидания первого результата, предельный перерыв полезного прогресса и общий дедлайн. Конкретные числа выбирают по типам событий и пользовательскому сценарию. Пауза текста во время законного вызова инструмента отличается от зависания: приложение должно знать текущую фазу.
Если heartbeat сбрасывает таймер прогресса, формально живой канал способен удерживать запрос бесконечно. Но игнорировать любые служебные события тоже неверно: некоторые подтверждают реальные этапы работы. Классификация событий должна соответствовать контракту транспорта и приложения.
Проверка перед внедрением
В тестовом источнике выдайте два текстовых фрагмента, затем продолжайте только служебные сигналы. Проверьте, что срабатывает выбранная политика отсутствия прогресса, а не успешное завершение. Затем воспроизведите медленный, но допустимый инструмент и нормальный длинный ответ.
Отдельно оборвите соединение без итогового события. Сохраните полученную часть как незавершённую, если это позволяет продукт, и покажите точный статус. Не повторяйте автоматически всю задачу, если она уже могла выполнить внешнее действие. В журнале различайте транспортный обрыв, отсутствие прогресса, общий дедлайн и штатное окончание потока.
Границы применимости
Доступность heartbeat и завершающих событий зависит от канала. SSE допускает служебные сообщения, но не определяет бизнес-успех генерации. Локальная отмена ожидания также не доказывает остановку вычисления на стороне поставщика.
В SSE служебные комментарии могут поддерживать соединение; смысл прогресса и завершения задаёт приложение. Официальная документация помогает уточнить технический механизм; предложенный диагностический протокол — наш учебный пример.
Если хотите связать этот разбор с системной практикой, посмотрите программу LLMOps & Evaluation на Latorn: она охватывает контур оценки, версии промптов, мониторинг и выпуск LLM-приложений. Перед оплатой сопоставьте требования курса со своим опытом и задачей проекта.
Следующий шаг: LLMOps: измерение качества, расходы и выпуск изменений. По смежным вопросам: Тайм-ауты в LLM-eval: как не улучшить метрику удалением неудачных ответов, Манифест релиза LLM-приложения: что версионировать кроме промпта.
