Как бот обращается к модели
Что проверяют
Можете ли вы описать путь от сообщения пользователя до ответа модели как инженерную систему: где живёт модель, как её вызывают и что происходит при медленном или упавшем инференсе. Следом обычно спрашивают, как это масштабировать и как выкатывать новую версию модели.
Как отвечать
Опишите конкретную цепочку, лучше из своего проекта:
- приём: бот получает апдейт через webhook или long polling (для Telegram, например, на aiogram), быстро подтверждает его платформе и дальше обрабатывает асинхронно;
- сервис бота: собирает контекст (историю диалога из Redis или базы, данные пользователя) и делает ту же предобработку, что при обучении: тот же токенизатор, те же признаки;
- вызов модели: модель развёрнута отдельным сервисом, бот ходит к ней по HTTP или gRPC. Варианты: своя обёртка на FastAPI, Triton Inference Server, TorchServe, для LLM vLLM с OpenAI-совместимым API или внешний провайдер;
- долгий инференс: если ответ занимает секунды, задачу кладут в очередь (RabbitMQ, Kafka, Celery), воркер с GPU её разбирает, а бот показывает статус «печатает» или стримит токены по мере генерации;
- надёжность: таймаут на каждом вызове, повторы с экспоненциальной задержкой только для идемпотентных запросов, запасной ответ при недоступности модели.
Отдельно скажите про эксплуатацию. Сервер инференса выигрывает на батчинге: Triton собирает запросы в динамические батчи, vLLM использует continuous batching. Версии модели ведут в реестре, например MLflow, а новую выкатывают сначала на часть трафика. Мониторят задержку по перцентилям и логируют входы для контроля дрифта.
Где спотыкаются
Вызывают модель синхронно прямо в обработчике апдейта. Пока идёт инференс, бот не отвечает остальным, а платформа по таймауту шлёт тот же апдейт повторно.
Загружают модель в процесс бота. Тогда её не масштабировать отдельно, и каждый перезапуск бота означает минуты загрузки весов.
Забывают про расхождение предобработки: при обучении текст чистили одним способом, в боте другим, и качество падает без единой ошибки в логах.