Интеграция веб-интерфейсов с сервисами платформы для размещения ИИ-проектов

 

 

Введение

В последние годы количество интеллектуальных приложений стремительно растет: от чат-ботов и рекомендательных систем до сервисов компьютерного зрения и голосовых ассистентов. Однако успех таких решений во многом определяется не только качеством самой модели, но и скоростью превращения прототипа в полноценный продукт. Именно поэтому сегодня особенно актуальна задача ускорения перехода от обученной модели к готовому сервису, доступному конечному пользователю.

В процессе реализации интеллектуальных решений разработчики постоянно сталкиваются с целым набором трудностей, связанных с переходом от обученной модели к полноценному сервису. Часто процесс усложняется из-за необходимости ручного управления жизненным циклом модели, сложной интеграции с существующими системами, отсутствии автоматизации, и ресурсоемкого сопровождение инфраструктуры. Эти проблемы замедляют запуск продукта, усложняют взаимодействие между командами и мешают своевременному обновлению сервиса без прерывания его работы.

Наша платформа призвана решить эти задачи: она автоматизирует развертывание, интеграцию и управление сервисами машинного обучения, позволяя быстро переходить от созданной модели к ее промышленной эксплуатации на удобной и современной инфраструктуре.

Далее показан пример, как обученная модель превращается в готовый сервис для извлечения платежных реквизитов из чеков. Разработчик разместил модуль с LLM-моделью QWEN используя преимущества платформы:  обеспечение сервисом аутентификации, объектное хранилище для данных модели и файлов запросов и API сервисы.

В этой конфигурации платформа берет на себя развертывание и публикацию модели как REST‑сервиса, настраивает механизмы аутентификации, а также предоставляет объектное хранилище и его API для загрузки изображений платежных документов в рамках единого потока данных.


Со стороны команды модели добавлено веб-приложение: оно реализует веб‑интерфейс и предобработку изображений, обращаясь к готовым API эндпоинтам предсказаний и файлового сервиса.


1. Путь разработчика: от модели к готовому сервису

Исходное состояние - наличие обученной модели (PyTorch, TensorFlow, scikit-learn, LLM и др.).

Цель - за минимальное время создать веб-сервис с современным UI на основе данной модели.

Технические требования к размещенному сервису включают:

  • REST API.
     
  • Механизмы аутентификации и авторизации пользователей.
     
  • Подсистему логирования и аналитики.
     

1.1. Создание и обновление ИИ-сервиса

Процесс развертывания модели на платформе:

  1. Регистрацию проекта:
    1. Оставьте заявку на сайте MLOps
    2. Наши специалисты с вами свяжутся и предоставят необходимые доступы
  2. Создание шаблонного приложения в Личном кабинете
  3. Подготовку репозитория с исходным кодом, загрузку кода в систему управления версиями платформы
  4. Реализацию inference:

Реализуйте функцию inference в репозитории с исходным кодом со следующей сигнатурой:

def inference(
    parameters: List[Dict[str, Any]],
    inputs: List[Dict[str, Any]],
    output_fields: List[Dict[str, Any]],
    model_key: str,
    model: Any = None
    ) -> Union[List[Dict[str, Any]], Any]:

    """

    Здесь разработчик должен задать описание API

     которое должна предоставить платформа:

    :param inputs.image: Input image for visual analysis

    :type inputs.image: FILE or image/jpeg or image/png

 

    :param outputs.response: Generated response from the model

    :type outputs.response: str

    """

 


Функция inference интегрирует модуль с предсказательной моделью в сервис запуска моделей через API. Модуль предоставляет API, который принимает именованные входные данные, и возвращает также именованные данные.

Формат самих входных данных, которые передаются в аргументе inputs при вызове функции, и выходных данных, возвращаемых функцией, должен быть указан в docstring-спецификации.

Для подробного описания как задать свой API обратитесь к документации

  1. Упаковку модели при помощи:
    1. CI/CD процессов(платформа соберет docker-образ сервиса из коммита помеченного git-тегом)
    2. загрузки весов модели в объектное хранилище
  2. Изменение манифестов модуля

Платформа позволяет управлять компонентами приложения через манифесты расположенные в репозитории с исходным кодом. Используя манифесты разработчик может создать, обновить или удалить:

  1. Модуль с моделью
  2. API для модуля
  3. Объектное хранилище
  4. Пайплайн

Для подробного описания обратитесь к документации.
 


1.2. Интеграция клиентского приложения с сервисом платформы

После размещения сервиса платформа формирует для модуля уникальную ссылку и сопровождающую документацию (OpenAPI).

Для интеграции клиентского приложения с модулем нужно:

  1. Запросить в поддержке платформы добавление домена клиентского приложения в разрешенные для перенаправлений
  2. Добавить настройки cors в API сервисов. Пример:

spec:
 restfulApi:
   cors:
     enabled: true
     allowOrigin:
       - "https:example.com/*"

В allowOrigin перечислите все домены с которых будут приходить запросы к сервису

Пример вызова API с клиентского приложения на JavaScript:

import Keycloak from "keycloak-js";

const outputElement = document.getElementById("output");
const userElement = document.getElementById("user");

function output(content) {
 if (typeof content === "object") {
   content = JSON.stringify(content, null, 2);
 }

 outputElement.textContent = content;
}

const keycloak = new Keycloak({
 url: "https://platform-sso.stratpro.hse.ru",
 realm: "platform.stratpro.hse.ru",
 clientId: "end-users",
});

async function showFile() {
 const headers = {
     'Authorization': `Bearer ${keycloak.token}`
 };
 const apiUrl = document.getElementById('fileApiUrl').value;

 try {
   const response = await fetch(apiUrl, {
     headers: headers,
     method: "GET"
   });
   if (!response.ok) {
     throw new Error(`Response status: ${response.status}`);
   }
   const json = await response.json();
   output(respJson);
 } catch (error) {
   console.error(error.message);
   output(error.message);
 }
 const respJson = await apiResp.json()
}

document
 .getElementById("getFile")
 .addEventListener("click", async () => {
   await showFile()
 });

document
 .getElementById("initAdapter")
 .addEventListener("click", async () => {
   await keycloak.init({ onLoad: "login-required" });
 });

 


2. Логирование и метрики

Все обращения к API фиксируются в системе мониторинга.
Возможности включают:

  • Просмотр детализированных логов запросов и ответов, логи контейнера с сервисом
     
  • Отображение статистики вызовов.
     
  • Анализ производительности (latency, throughput и пр.).
     
  • Версионирование и история публикаций моделей(на основе git репозитория).
     

3. Обновление и версионирование

Все изменения в модель вносятся через обновление кода в git-репозитории - разработчик отмечает новую версию модели git-тегом, после чего платформа автоматически собирает и загружает образ в Harbor-реестр. Разработчик может выбрать нужный образ для сервиса из реестра, и развертывание новой версии происходит без остановки работы приложения.

Такая схема обновления сервиса обеспечивает простоту перехода на новую версию или откат к стабильной при необходимости, фиксирует историю изменений и облегчает совместную разработку. Все обновления прозрачны, удобны в мониторинге и документир[1] овании - так повышается контроль над релизами, снижается риск ошибок и ускоряется внедрение новых функциональных возможностей.

К дополнительным преимуществам относятся:

  • Минимизация времени на интеграцию и тестирование модели до промышленной эксплуатации.
  • Улучшение взаимодействия между командами - все специалисты работают по единой схеме обновлений, без ручных вмешательств и простоев.
  • Возможность запускать эксперименты и быстро возвращаться к проверенным версиям без сложных процедур развертывания.
  • Повышение надежности и безопасности продукта за счет снижения вероятности человеческих ошибок и автоматического контроля за процессом обновлений.

4. Пример запросов к модулям из галереи

Примеры запросов в postman:

Для обращения к API развернутого компонента приложения, необходимо иметь учетную запись в реестре пользователей платформы и состоять в пользовательской группе:

  • /pu-gallery-pa-tesseract-ocr/gallery-tesseract-users для Tesseract OCR
  • /pu-gallery-pa-qwen/gallery-qwen-users для QWEN

Для добавления в эти группы или получения учетной записи обратитесь к администраторам платформы через заявку в поддержке


Заключение

Благодаря нашей платформе путь от готовой обученной модели до полноценного веб-сервиса может занять считанные минуты. Регистрация, размещение и интеграция с клиентским приложением происходят по упрощенной схеме, при этом предоставляются средства мониторинга, управления версиями и безопасного взаимодействия с пользователями.