Udostępnij przez


Samouczek: uruchomić czatbota w usłudze App Service z użyciem rozszerzenia typu sidecar Phi-4 (ASP.NET Core)

Ten samouczek przeprowadzi Cię przez proces wdrażania aplikacji czatbota ASP.NET Core zintegrowanej z rozszerzeniem sidecar Phi-4 w 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.
  • Zminimalizowane opóźnienia sieci i szybsza reakcja dla lepszych doświadczeń 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 nową sesję Codespace z 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/dotnetapp
    az webapp up --sku P3MV3 --os-type linux
    

To polecenie uruchamiania jest typową konfiguracją wdrażania aplikacji ASP.NET Core w usłudze Azure App Service. Aby uzyskać więcej informacji, zobacz Szybki start: wdrażanie aplikacji internetowej ASP.NET.

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 sidecar. Kontynuuj wybieranie Odśwież aż do momentu, kiedy 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 pokazuje, jak zintegrować usługę .NET z rozszerzeniem typu sidecar SLM. Klasa SLMService 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/dotnetapp/Services/SLMService.cs, zobaczysz, że:

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

    public SLMService(HttpClient httpClient, IConfiguration configuration)
    {
        _httpClient = httpClient;
        _apiUrl = configuration["FashionAssistantAPI:Url"] ?? "httpL//localhost:11434";
    }
    
  • Ładunek POST zawiera komunikat systemowy i monit utworzony na podstawie wybranego produktu i zapytania użytkownika.

    var requestPayload = new
    {
        messages = new[]
        {
            new { role = "system", content = "You are a helpful assistant." },
            new { role = "user", content = prompt }
        },
        stream = true,
        cache_prompt = false,
        n_predict = 150
    };
    
  • Żądanie POST przesyła odpowiedź strumieniowo, linia po linii. Każdy wiersz jest analizowany w celu wyodrębnienia wygenerowanej zawartości (lub tokenu).

    var response = await _httpClient.SendAsync(request, HttpCompletionOption.ResponseHeadersRead);
    response.EnsureSuccessStatusCode();
    
    var stream = await response.Content.ReadAsStreamAsync();
    using var reader = new StreamReader(stream);
    
    while (!reader.EndOfStream)
    {
        var line = await reader.ReadLineAsync();
        line = line?.Replace("data: ", string.Empty).Trim();
        if (!string.IsNullOrEmpty(line) && line != "[DONE]")
        {
            var jsonObject = JsonNode.Parse(line);
            var responseContent = jsonObject?["choices"]?[0]?["delta"]?["content"]?.ToString();
            if (!string.IsNullOrEmpty(responseContent))
            {
                yield return responseContent;
            }
        }
    }
    

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 znajduje się na odpowiednim poziomie cenowym. Jeśli tworzysz własny kontener przyczepki SLM, należy również użyć modelu zoptymalizowanego pod kątem procesora CPU, ponieważ warstwy cenowe usługi App Service są warstwami tylko dla procesora CPU.

Na przykład mini model Phi-3 o długości kontekstu 4K od Hugging Face jest zaprojektowany do pracy z ograniczonymi zasobami i zapewnia silne zdolności matematyczne oraz logiczne rozumowanie dla wielu typowych scenariuszy. 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