Udostępnij przez


Samouczek: Uruchom czatbota w usłudze App Service z rozszerzeniem sidecar Phi-4 (Spring Boot)

Ten samouczek przeprowadzi Cię przez wdrażanie aplikacji czatbota opartej na frameworku Spring Boot, zintegrowanego z rozszerzeniem sidecar Phi-4 w usłudze Azure App Service. Wykonując kroki, dowiesz się, jak skonfigurować skalowalną aplikację internetową, dodać przyczepkę obsługiwaną przez sztuczną inteligencję na potrzeby rozszerzonych możliwości konwersacyjnych i przetestować funkcje czatbota.

Hosting własnego małego modelu językowego (SLM) oferuje kilka zalet:

  • Pełna kontrola nad danymi. Poufne informacje nie są widoczne dla usług zewnętrznych, co ma kluczowe znaczenie dla branż z rygorystycznymi wymaganiami dotyczącymi zgodności.
  • Modele hostowane samodzielnie można dostosować, aby spełnić określone przypadki użycia lub wymagania specyficzne dla domeny.
  • Zredukowane opóźnienia w sieci i szybsze czasy odpowiedzi dla lepszego doświadczenia użytkownika.
  • Pełna kontrola nad alokacją zasobów, zapewniając optymalną wydajność aplikacji.

Wymagania wstępne

  • Konto platformy Azure z aktywną subskrypcją.
  • Konto usługi GitHub.

Wdrażanie aplikacji przykładowej

  1. W przeglądarce przejdź do przykładowego repozytorium aplikacji.

  2. Rozpocznij nowy Codespace w repozytorium.

  3. Zaloguj się przy użyciu konta platformy Azure:

    az login
    
  4. Otwórz terminal w usłudze Codespace i uruchom następujące polecenia:

    cd use_sidecar_extension/springapp
    ./mvnw clean package
    az webapp up --sku P3MV3 --runtime "JAVA:21-java21" --os-type linux
    

Dodawanie rozszerzenia przyczepki Phi-4

W tej sekcji dodasz rozszerzenie przyczepki Phi-4 do aplikacji ASP.NET Core hostowanej w usłudze Azure App Service.

  1. Przejdź do witryny Azure Portal i przejdź do strony zarządzania aplikacją.
  2. W menu po lewej stronie wybierz pozycję Centrum wdrażania>.
  3. Na karcie Kontenery wybierz pozycję Dodaj>rozszerzenie przyczepki.
  4. W opcjach rozszerzenia przyczepki wybierz pozycję Sztuczna inteligencja: phi-4-q4-gguf (eksperymentalna).
  5. Podaj nazwę rozszerzenia przyczepki.
  6. Wybierz Zapisz, aby zastosować zmiany.
  7. Poczekaj kilka minut na wdrożenie rozszerzenia przyczepki. Kontynuuj wybieranie Odśwież, aż w kolumnie Stan pojawi się Uruchomiono.

To rozszerzenie przyczepki Phi-4 używa interfejsu API uzupełniania czatu, takiego jak OpenAI , który może odpowiedzieć na odpowiedź na zakończenie czatu na stronie http://localhost:11434/v1/chat/completions. Aby uzyskać więcej informacji na temat interakcji z interfejsem API, zobacz:

Testowanie czatbota

  1. Na stronie zarządzania aplikacją w menu po lewej stronie wybierz pozycję Przegląd.

  2. W obszarze Domena domyślna wybierz adres URL, aby otworzyć aplikację internetową w przeglądarce.

  3. Sprawdź, czy aplikacja czatbota jest uruchomiona i odpowiada na dane wejściowe użytkownika.

    Zrzut ekranu przedstawiający aplikację asystenta mody uruchomioną w przeglądarce.

Jak działa przykładowa aplikacja

Przykładowa aplikacja demonstruje, jak zintegrować usługę Java z rozszerzeniem sidecar SLM. Klasa ReactiveSLMService hermetyzuje logikę wysyłania żądań do interfejsu API SLM i przetwarzania przesyłanych strumieniowo odpowiedzi. Ta integracja umożliwia aplikacji dynamiczne generowanie odpowiedzi konwersacyjnych.

Patrząc w use_sidecar_extension/springapp/src/main/java/com/example/springapp/service/ReactiveSLMService.java, zobaczysz, że:

  • Usługa odczytuje adres URL z fashion.assistant.api.url, który jest ustawiony w application.properties i ma wartość http://localhost:11434/v1/chat/completions.

    public ReactiveSLMService(@Value("${fashion.assistant.api.url}") String apiUrl) {
        this.webClient = WebClient.builder()
                .baseUrl(apiUrl)
                .build();
    }
    
  • Ładunek POST zawiera komunikat systemowy i monit utworzony na podstawie wybranego produktu i zapytania użytkownika.

    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();
    
  • Asynchroniczne żądanie POST przesyła odpowiedź strumieniowo, linia po linii. Każdy wiersz jest analizowany w celu wyodrębnienia wygenerowanej zawartości (lub tokenu).

    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"));
    

Najczęściej zadawane pytania


Jak warstwa cenowa wpływa na wydajność przyczepki SLM?

Ponieważ modele sztucznej inteligencji zużywają znaczne zasoby, wybierz warstwę cenową, która zapewnia wystarczającą ilość procesorów wirtualnych i pamięci do uruchomienia określonego modelu. Z tego powodu wbudowane rozszerzenia AI są wyświetlane tylko wtedy, gdy aplikacja jest w odpowiednim poziomie cenowym. Jeśli tworzysz własny kontener typu sidecar SLM, należy również użyć modelu zoptymalizowanego pod kątem CPU, ponieważ plany cenowe usługi App Service dotyczą wyłącznie CPU.

Na przykład minimodel Phi-3 o długości kontekstu 4K od Hugging Face jest zaprojektowany do działania z ograniczonymi zasobami i zapewnia silne rozumowanie matematyczne oraz logiczne w wielu typowych scenariuszach. Jest również dostępna wersja zoptymalizowana pod kątem CPU. W usłudze App Service przetestowaliśmy model we wszystkich warstwach Premium i ustaliliśmy, że działa dobrze w warstwie P2mv3 lub wyższej. Jeśli wymagania na to pozwalają, możesz uruchomić go na niższym poziomie.


Jak korzystać z własnego sidecara SLM?

Przykładowe repozytorium zawiera przykładowy kontener SLM, którego można użyć jako przyczepki. Uruchamia aplikację FastAPI, która nasłuchuje na porcie 8000, jak określono w pliku Dockerfile. Aplikacja używa środowiska uruchomieniowego ONNX do załadowania modelu Phi-3, a następnie przekazuje dane HTTP POST do modelu i przesyła strumieniowo odpowiedź z modelu z powrotem do klienta. Aby uzyskać więcej informacji, zobacz model_api.py.

Aby samodzielnie skompilować obraz przyczepki, musisz zainstalować program Docker Desktop lokalnie na maszynie.

  1. Sklonuj repozytorium lokalnie.

    git clone https://github.com/Azure-Samples/ai-slm-in-app-service-sidecar
    cd ai-slm-in-app-service-sidecar
    
  2. Przejdź do katalogu źródłowego obrazu Phi-3 i pobierz model lokalnie przy użyciu Huggingface CLI.

    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-onnx
    

    Plik Dockerfile jest skonfigurowany do kopiowania modelu z pliku ./Phi-3-mini-4k-instruct-onnx.

  3. Zbuduj obraz platformy Docker. Przykład:

    docker build --tag phi-3 .
    
  4. Przekaż utworzony obraz do usługi Azure Container Registry, używając polecenia „Wypchnięcie pierwszego obrazu” w interfejsie wiersza polecenia Docker.

  5. Na karcie Centrum wdrażania>Kontenery (nowe) wybierz pozycję Dodaj>niestandardowy kontener i skonfiguruj nowy kontener w następujący sposób:

    • Nazwa: phi-3
    • Źródło obrazu: Azure Container Registry
    • Rejestr: twój rejestr
    • Obraz: przesłany obraz
    • Tag: tag obrazu, który chcesz
    • Port: 8000
  6. Wybierz i zastosuj.

Zobacz bring_your_own_slm/src/webapp , aby zapoznać się z przykładową aplikacją, która współdziała z tym niestandardowym kontenerem przyczepki.

Dalsze kroki

Samouczek: konfigurowanie kontenera sidecar dla aplikacji Linux w usłudze Azure App Service