Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом руководстве содержится пошаговое руководство по развертыванию приложения чат-бота на основе Spring Boot, интегрированного с расширением-сайдкаром Phi-4 в Azure App Service. Следуя инструкциям, вы узнаете, как настроить масштабируемое веб-приложение, дополнить его вспомогательным модулем с ИИ для расширенных возможностей общения и протестировать возможности чат-бота.
Размещение собственной небольшой языковой модели (SLM) предоставляет несколько преимуществ:
- Полный контроль над данными. Конфиденциальная информация не предоставляется внешним службам, что крайне важно для отраслей с строгими требованиями к соответствию.
- Автономные модели можно точно настроить в соответствии с конкретными вариантами использования или требованиями к домену.
- Свести к минимуму задержку сети и ускорить время отклика для лучшего взаимодействия с пользователем.
- Полный контроль над выделением ресурсов, обеспечивая оптимальную производительность приложения.
Предпосылки
- Учетная запись Azure с активной подпиской.
- Учетная запись GitHub.
Развертывание примера приложения
В браузере перейдите к примеру репозитория приложений.
Запустите новый Codespace из репозитория.
Войдите в систему с помощью учетной записи Azure:
az loginОткройте терминал в пространстве Codespace и выполните следующие команды:
cd use_sidecar_extension/springapp ./mvnw clean package az webapp up --sku P3MV3 --runtime "JAVA:21-java21" --os-type linux
Добавьте расширение сайдкара Phi-4
В этом разделе вы добавите расширение Phi-4 для сайдкара в ваше приложение ASP.NET Core, размещенное в Службе приложений Azure.
- Перейдите на портал Azure и перейдите на страницу управления приложением.
- В меню слева выберитеЦентр развертывания>.
- На вкладке "Контейнеры" выберите "Добавить>расширение Sidecar".
- В параметрах расширения прицепа выберите AI: phi-4-q4-gguf (Экспериментальный).
- Укажите имя расширения sidecar.
- Выберите Сохранить, чтобы применить изменения.
- Подождите несколько минут, чтобы развернуть сайдкар-расширение. Продолжайте нажимать Обновить, пока в столбце Состояние не появится Работает.
Это расширение Phi-4 использует API завершения чата, например OpenAI, который может обрабатывать ответ завершения чата по адресу http://localhost:11434/v1/chat/completions. Дополнительные сведения о взаимодействии с API см. в следующих статье:
Тестирование чат-бота
На странице управления приложения в меню слева выберите "Обзор".
В разделе "Домен по умолчанию" выберите URL-адрес, чтобы открыть веб-приложение в браузере.
Убедитесь, что приложение чат-бота запущено и отвечает на входные данные пользователей.
Как работает пример приложения
В демонстрационном приложении показано, как интегрировать Java-сервис с сайдкар-расширением для SLM. Класс ReactiveSLMService инкапсулирует логику отправки запросов в API SLM и обработки потоковых ответов. Эта интеграция позволяет приложению динамически создавать ответы на беседы.
В файле use_sidecar_extension/springapp/src/main/java/com/example/springapp/service/ReactiveSLMService.java вы увидите, что:
Служба считывает URL-адрес из
fashion.assistant.api.url, который задан в application.properties и имеет значениеhttp://localhost:11434/v1/chat/completions.public ReactiveSLMService(@Value("${fashion.assistant.api.url}") String apiUrl) { this.webClient = WebClient.builder() .baseUrl(apiUrl) .build(); }Полезные данные POST включают системное сообщение и подсказку, созданную на основе выбранного продукта и запроса пользователя.
JSONObject requestJson = new JSONObject(); JSONArray messages = new JSONArray(); JSONObject systemMessage = new JSONObject(); systemMessage.put("role", "system"); systemMessage.put("content", "You are a helpful assistant."); messages.put(systemMessage); JSONObject userMessage = new JSONObject(); userMessage.put("role", "user"); userMessage.put("content", prompt); messages.put(userMessage); requestJson.put("messages", messages); requestJson.put("stream", true); requestJson.put("cache_prompt", false); requestJson.put("n_predict", 2048); String requestBody = requestJson.toString();Реактивный запрос POST передает строку ответа по строке. Каждая строка анализируется для извлечения созданного содержимого (или маркера).
return webClient.post() .contentType(MediaType.APPLICATION_JSON) .body(BodyInserters.fromValue(requestBody)) .accept(MediaType.TEXT_EVENT_STREAM) .retrieve() .bodyToFlux(String.class) .filter(line -> !line.equals("[DONE]")) .map(this::extractContentFromResponse) .filter(content -> content != null && !content.isEmpty()) .map(content -> content.replace(" ", "\u00A0"));
Часто задаваемые вопросы
- Как ценовая категория влияет на производительность бокового автомобиля SLM?
- Как использовать собственный сайдкар SLM?
Как ценовая категория влияет на производительность бокового автомобиля SLM?
Так как модели искусственного интеллекта используют значительные ресурсы, выберите ценовую категорию, которая дает достаточно виртуальных ЦП и памяти для запуска конкретной модели. По этой причине встроенные расширения на стороне искусственного интеллекта отображаются только в том случае, если приложение находится в подходящей ценовой категории. Если вы создаете собственный контейнер SLM, следует также использовать модель, оптимизированную для ЦП, поскольку тарифные планы службы приложений включают только уровни ЦП.
Например, мини-модель Phi-3 с длиной контекста 4K из Hugging Face предназначена для запуска с ограниченными ресурсами и обладает хорошими математическими и логическими способностями для многих распространенных сценариев. Она также поставляется с оптимизированной для ЦП версией. В Службе приложений мы проверили модель на всех уровнях уровня "Премиум" и обнаружили, что она хорошо работает на уровне P2mv3 или более поздней версии. Если ваши требования позволяют, его можно запустить на более низком уровне.
Как использовать собственный сайдкар SLM?
Пример репозитория содержит пример контейнера SLM, который можно использовать в качестве контейнера-сайдкара. Он запускает приложение FastAPI, которое прослушивает порт 8000, как указано в файле Dockerfile. Приложение использует среду выполнения ONNX для загрузки модели Phi-3, а затем перенаправит данные HTTP POST в модель и передает ответ от модели обратно клиенту. Дополнительные сведения см. в model_api.py.
Чтобы создать образ сайдкара самостоятельно, необходимо установить Docker Desktop на локальный компьютер.
Клонируйте репозиторий локально.
git clone https://github.com/Azure-Samples/ai-slm-in-app-service-sidecar cd ai-slm-in-app-service-sidecarПерейдите в исходный каталог образа Phi-3 и скачайте модель локально с помощью интерфейса командной строки Huggingface.
cd bring_your_own_slm/src/phi-3-sidecar huggingface-cli download microsoft/Phi-3-mini-4k-instruct-onnx --local-dir ./Phi-3-mini-4k-instruct-onnxDockerfile настроен для копирования модели из ./Phi-3-mini-4k-instruct-onnx.
Выполните сборку образа Docker. Рассмотрим пример.
docker build --tag phi-3 .Отправьте созданный образ в реестр контейнеров Azure с помощью отправки первого образа в реестр контейнеров Azure с помощью Интерфейса командной строки Docker.
На вкладке Центр развертывания>Контейнеры (новый) выберите Добавить>пользовательский контейнер и настройте новый контейнер следующим образом:
- Имя: phi-3
- Источник изображения: Реестр контейнеров Azure
- Реестр: ваш реестр
- Изображение: отправленное изображение
- Тег: тег изображения, который требуется
- Порт: 8000
Нажмите кнопку "Применить".
См. bring_your_own_slm/src/webapp для примера приложения, взаимодействующего с этим пользовательским сайдкар-контейнером.
Дальнейшие шаги
Руководство: Настройте сайдкар-контейнер для приложения Linux в Службе приложений Azure