RAG-сервис: fail-fast, structured logs, Prometheus и Docker-образ 8.15GB до 1.35GB
Проект представляет собой RAG-сервис (Retrieval-Augmented Generation) — систему, которая сочетает языковую модель с внешним поиском. Она предназначена для проверки фактологических утверждений, встречающихся в бизнес-отчётах. Пользователь отправляет сервису документ, а тот поочерёдно сопоставляет каждое утверждение с авторитетными источниками — отчётами SEC EDGAR, данными Всемирного банка, статистическими рядами FRED и материалами «Википедии». Если факт не подтверждается, система сигнализирует об этом.
На этапе пиринговой проверки проект получил 42 балла из 42 возможных — максимальную оценку. Казалось бы, можно забыть об этой работе и переходить к новым задачам. Но автору хотелось, чтобы код не просто соответствовал критериям курса, а был настоящим инженерным артефактом, который можно показать на собеседовании. Ведь работодатели ценят не дипломы, а умение решать практические задачи.
Первым делом он внедрил в сервис принцип fail-fast. Суть его проста: если система замечает несоответствие данных, отсутствие критического параметра или невозможность подключиться к источнику, она должна немедленно завершиться с понятным сообщением об ошибке, а не работать в полурабочем состоянии. Такой подход резко сокращает время на поиск проблем в процессе эксплуатации.
Второй важной практикой стали структурированные логи. Вместо произвольного текста в консоль сервис теперь пишет события в виде однотипных объектов, содержащих временные метки, уровни серьёзности, идентификаторы запросов и прочие поля. Эти логи легко парсить, хранить и визуализировать. В сочетании со сторонними инструментами они образуют полноценную систему наблюдаемости.
Для мониторинга производительности автор подключил Prometheus. Метрики, собранные этим инструментом, показывают объём трафика, задержки обработки запросов, потребляемую память и другие показатели. Дашборды на основе этих данных позволяют быстро замечать аномалии и деградацию качества обслуживания.
Труднее всего оказалось работать с Docker-образом. Изначально его размер составлял 8,15 гигабайта — это непомерно много для сервиса, который планируется разворачивать на рядовых серверах. Причина обычно в больших пакетах, кэшах pip, зависимостях от системных библиотек и неэффективной сборке. Автор провёл детальный разбор каждого слоя, вынес тяжёлые компоненты в отдельные этапы, включил многоступенчатую сборку и удалил всё, что не нужно для работы. В результате образ похудел до 1,35 гигабайта — в шесть раз меньше первоначального. Это привело к более быстрым загрузкам, экономии дискового пространства и сокращению времени на деплой.
Описанная история наглядно демонстрирует, что даже небольшой проект, выполненный в рамках учебной программы, может перерасти в нечто большее. Ключ к этому — применение профессиональных практик: принцип fail-fast, структурированное журналирование, мониторинг и оптимизация артефактов. Каждая из этих составляющих не только повышает качество кода, но и делает процесс разработки более зрелым. Возможно, этот опыт вдохновит других разработчиков пересмотреть свои учебные проекты и довести их до состояния, когда их не стыдно показать в профессиональном портфолио.
Источник: habr.com
Поделиться