Задача
Создать с нуля платформу, которая автоматизирует подготовку документов для подачи в суд. На входе — файлы с заранее неизвестным содержимым, на выходе — регламентированный комплект документов.
Система распознаёт текст, определяет типы и границы документов, извлекает реквизиты и формирует итоговый комплект.
От прототипа до эксплуатации
Я спроектировал и разработал платформу с нуля, довёл её от первых прототипов и пилотов до промышленной эксплуатации. Переводил правила предметной области и требования заказчиков в поведение продукта, выбирал модели и проектировал поток обработки, интерфейс, хранение и инфраструктуру.
После запуска сформировал команду из 3–5 разработчиков и продолжил развитие продукта как технический лидер и разработчик ключевых компонентов.
Результат
По состоянию на лето 2026 года продуктом пользуются один крупный банк, агентство взыскания и несколько МФО. Через платформу обрабатывают до 5 000 документов в день.
Мой вклад
- Многошаговые сценарии обработки документов на языковых и мультимодальных моделях.
- Оркестрационный слой с сохранением прогресса и перезапуском обработки с нужного этапа.
- Внутренний продукт для ручной корректировки ошибок и сбора обратной связи.
- Инфраструктура инференса в закрытом контуре и управление GPU-ресурсами.
- Наблюдаемость, продуктовая аналитика, контроль расходов и оценка качества ML-сервисов.
- Frontend, UX, декомпозиция задач, архитектурное и кодовое ревью.
Технические подробности
LLM-инженерия
Разработал многошаговые сценарии обработки документов на языковых моделях размером 3B–30B. Для устойчивой работы разделял сложные задачи на специализированные проходы, отбирал значимые данные, исключал лишний контекст и добавлял точечные уточняющие запросы.
Решал проблемы следования инструкциям, галлюцинаций и зависимости ответа от состава и порядка контекста. Для структурированных ответов использовал guided decoding и JSON Schema, для оценки уверенности — logprobs.
В стек моделей и инференса входили PyTorch, Transformers, vLLM, olmOCR, ONNX и OpenVINO Model Server.
Оркестрация
Разработал собственный оркестрационный слой на Django, Celery, RabbitMQ, PostgreSQL и S3. Он управляет общим контекстом и состоянием запусков, сохраняет прогресс и позволяет перезапускать обработку с нужного этапа.
Получилась система, близкая по назначению к Temporal, но учитывающая особенности бизнеса и документного конвейера.
Ручная обработка
Спроектировал отдельный внутренний продукт для корректировки ошибок и сбора обратной связи: очередь заданий, просмотр документов, исправление структуры, классов и атрибутов. Отвечал за требования, UX, backend и frontend.
Модуль работает на Event Sourcing. Ошибки автоматизированно анализируются и выгружаются в трекер задач с учётом специфики работы конвейера документов.
Инференс и Kubernetes
Настроил GitOps на базе FluxCD и непрерывную доставку через GitLab CI/CD. Построил инфраструктуру инференса в полностью закрытом контуре.
Разработал Kubernetes-контроллеры на Go для интеграции внешних GPU-провайдеров через Virtual Kubelet и масштабирования с учётом нагрузки, холодного старта и тарификации. Каждый элемент системы развёртывается из собственного Helm-чарта и включает наблюдаемость.
Реализовал политики управления GPU-пулами с учётом границ оплаченных часов и ограничений на развёртывание новых реплик. Это позволило контролировать расходы при переменной нагрузке. В инфраструктуре также использовались Crossplane, OCI registry, Docker, devpi, Poetry и uv.
Наблюдаемость и экономика
Спроектировал наблюдаемость на уровне инфраструктуры, ML-сервисов и продуктовых процессов: метрики, централизованные логи, трассировку и диагностику ошибок. Использовал Prometheus, Grafana, Loki, Alertmanager и Sentry; Langfuse — для анализа LLM-вызовов, промптов и ответов моделей.
Реализовал мониторинг времени обработки, ошибок, зависших задач, загрузки моделей и вычислительных затрат. Настроил контроль облачных расходов, прогноз месячного счёта и бюджетные алерты.
На основе подробной статистики вычислительных затрат разработал конструктор тарифов. Он упростил подготовку расчётов для клиентов при сложной модели потребления вычислительных ресурсов.
Data Science и оценка качества
Проводил прикладные исследования полного цикла: постановка задачи и ограничений, обзор и отбор моделей, тестирование на реальных данных портфелей, оценка precision, recall, F1 и latency, рекомендации и план внедрения.
Разработал общий eval-фреймворк для ML-сервисов: эталонные наборы, воспроизводимые прогоны, сохранение предсказаний, метрики и отчёты. С его помощью проверял изменения моделей, промптов и обработки данных на регрессии.
Frontend и руководство
Разработал веб-интерфейс постановки задач, мониторинга обработки и проверки результатов на TypeScript, React и Reatom с использованием Mantine. Проектировал сценарии просмотра документов и исправления структуры, классов и извлечённых атрибутов под предметную область.
Управлял командой из 3–5 разработчиков: декомпозиция, приоритизация, архитектурное и кодовое ревью. Ввёл общие стандарты разработки, тестирования, документации и межсервисных контрактов.
Backend-стек включал Python, Django / DRF, FastAPI, Pydantic, Redis и S3 / MinIO. Для проверки использовались pytest, pytest-bdd, Vitest, Playwright и playwright-bdd.