Переход к production-паттернам

Проект RAG-сервиса, предназначенного для проверки фактов в бизнес-отчетах по данным SEC EDGAR, World Bank, FRED и Wikipedia, был доведен от учебного задания до состояния готового к эксплуатации кода. Основной упор был сделан на надежность и наблюдаемость системы, что критически важно для реального использования, в отличие от базовых требований учебного курса.

Для обеспечения стабильности в FastAPI был внедрен механизм lifespan. Теперь сервис проверяет наличие всех внешних зависимостей — модели эмбеддингов, реранкера и доступность LLM-провайдера через тестовый запрос — еще до того, как начнет принимать HTTP-трафик. Если API-ключ неверный или файлы моделей отсутствуют, контейнер завершает работу с ошибкой сразу при запуске, предотвращая появление «битых» запросов в работающем приложении.

Логирование и мониторинг

Для решения проблемы перемешивания логов при параллельных запросах внедрено структурированное логирование с использованием structlog. Каждому запросу присваивается уникальный request_id (uuid4), что позволяет отследить полный путь конкретного вызова через JSON-записи в общем потоке данных.

Для контроля состояния системы развернут полноценный стек мониторинга: Prometheus собирает метрики (количество запросов, ошибки, латентность) через ASGI-приложение, а Grafana визуализирует эти данные. Это позволяет не просто видеть эндпоинт с метриками, а отслеживать историю изменений состояния сервиса.

Оптимизация Docker-образа

Одним из ключевых этапов стала оптимизация веса контейнера. Изначальный образ весил 8.15 ГБ из-за автоматической установки тяжелых GPU-библиотек CUDA через зависимость torch. Чтобы радикально снизить объем, разработчик отказался от библиотеки sentence-transformers в пользу легковесного стека на базе onnxruntime и tokenizers.

Такой подход позволил заменить тяжелые зависимости на чистый инференс через ONNX, что сократило размер Docker-образа с 8.15 ГБ до 1.35 ГБ, сохранив при этом функциональность пайплайна (токенизация, прогон через ONNX-граф, mean pooling и L2-нормализация).