Självstudie: Köra chattrobot i App Service med ett Tillägg för Phi-4-sidovagn (Spring Boot)

Handledningen vägleder dig genom att distribuera en Spring Boot-baserad chattbotapplikation integrerad med Phi-4 sidecar-tillägg på Azure App Service. Genom att följa stegen får du lära dig hur du konfigurerar en skalbar webbapp, lägger till en AI-baserad sidovagn för förbättrade konversationsfunktioner och testar chattrobotens funktioner.

Att vara värd för din egen SLM (Small Language Model) erbjuder flera fördelar:

  • Fullständig kontroll över dina data. Känslig information exponeras inte för externa tjänster, vilket är viktigt för branscher med strikta efterlevnadskrav.
  • Lokalt installerade modeller kan finjusteras för att uppfylla specifika användningsfall eller domänspecifika krav.
  • Minimerad nätverksfördröjning och snabbare svarstider för en bättre användarupplevelse.
  • Fullständig kontroll över resursallokering, vilket säkerställer optimala prestanda för ditt program.

Förutsättningar

Distribuera exempelprogrammet

  1. I webbläsaren navigerar du till exempelprogrammets lagringsplats.

  2. Starta ett nytt Codespace från lagringsplatsen.

  3. Logga in med ditt Azure-konto:

    az login
    
  4. Öppna terminalen i Codespace och kör följande kommandon:

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

Lägg till sidvagnstillägget Phi-4

I det här avsnittet lägger du till sidotillägget Phi-4 i din ASP.NET Core-applikation som är värd på Azure App Service.

  1. Gå till Azure-portalen och gå till appens hanteringssida.
  2. I den vänstra menyn väljer du Distribution>Distributionscenter.
  3. På fliken Containrar väljer du Lägg till>tillägg för sidovagn.
  4. I alternativen för sidovagnstillägg väljer du AI: phi-4-q4-gguf (Experimental).
  5. Ange ett namn för sidovagnstillägget.
  6. Välj Spara för att tillämpa ändringarna.
  7. Vänta några minuter tills sidecar-tillägget distribueras. Fortsätt att välja Uppdatera tills kolumnen Status visar Körs.

Det här Phi-4-tillägget för sidovagn använder ett API för att slutföra chatten, till exempel OpenAI , som kan svara på svar om chattens slutförande på http://localhost:11434/v1/chat/completions. Mer information om hur du interagerar med API:et finns i:

Testa chattroboten

  1. På appens hanteringssida går du till den vänstra menyn och väljer Översikt.

  2. Under Standarddomän väljer du URL:en för att öppna webbappen i en webbläsare.

  3. Kontrollera att chattrobotprogrammet körs och svarar på användarindata.

    Skärmbild som visar den modeassistentapp som körs i webbläsaren.

Så här fungerar exempelprogrammet

Exempelprogrammet visar hur du integrerar en Java-tjänst med SLM-sidovagnstillägget. Klassen ReactiveSLMService kapslar in logiken för att skicka begäranden till SLM-API:et och bearbeta de strömmade svaren. Med den här integreringen kan programmet generera konversationssvar dynamiskt.

Om du tittar i use_sidecar_extension/springapp/src/main/java/com/example/springapp/service/ReactiveSLMService.java ser du följande:

  • Tjänsten läser URL:en från fashion.assistant.api.url, som anges i application.properties och har värdet http://localhost:11434/v1/chat/completions.

    public ReactiveSLMService(@Value("${fashion.assistant.api.url}") String apiUrl) {
        this.webClient = WebClient.builder()
                .baseUrl(apiUrl)
                .build();
    }
    
  • POST-nyttolasten innehåller systemmeddelandet och uppmaningen som har skapats från den valda produkten och användarfrågan.

    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();
    
  • Den reaktiva POST-begäran strömmar svaret rad för rad. Varje rad parsas för att extrahera det genererade innehållet (eller token).

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

Vanliga frågor


Hur påverkar prisnivån prestandan för SLM-sidovagnen?

Eftersom AI-modeller förbrukar stora resurser väljer du den prisnivå som ger dig tillräckligt med virtuella processorer och minne för att köra din specifika modell. Därför visas de inbyggda tilläggen för AI-sidovagn endast när appen är på en lämplig prisnivå. Om du skapar en egen SLM-sidovagnscontainer bör du också använda en CPU-optimerad modell, eftersom App Service-prisnivåerna är processorbaserade nivåer.

Till exempel är Phi-3-minimodellen med en 4K-kontextlängd från Hugging Face utformad för att köras med begränsade resurser och ger starka matematiska och logiska resonemang för många vanliga scenarier. Den levereras också med en CPU-optimerad version. I App Service testade vi modellen på alla premiumnivåer och fann att den presterade bra på P2mv3-nivån eller högre. Om dina krav tillåter kan du köra den på en lägre nivå.


Hur använder jag min egen SLM-sidovagn?

Exempellagringsplatsen innehåller en SLM-exempelcontainer som du kan använda som sidovagn. Den kör ett FastAPI-program som lyssnar på port 8000, enligt vad som anges i dockerfile. Programmet använder ONNX Runtime för att läsa in Phi-3-modellen och vidarebefordrar sedan HTTP POST-data till modellen och strömmar svaret från modellen tillbaka till klienten. Mer information finns i model_api.py.

Om du vill skapa sidovagnsavbildningen själv måste du installera Docker Desktop lokalt på datorn.

  1. Klona lagringsplatsen lokalt.

    git clone https://github.com/Azure-Samples/ai-slm-in-app-service-sidecar
    cd ai-slm-in-app-service-sidecar
    
  2. Ändra till Phi-3-avbildningens källkatalog och ladda ned modellen lokalt med hjälp av 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
    

    Dockerfile har konfigurerats för att kopiera modellen från ./Phi-3-mini-4k-instruct-onnx.

  3. Skapa Docker-avbildningen. Till exempel:

    docker build --tag phi-3 .
    
  4. Ladda upp den skapade avbildningen till Azure Container Registry med Skicka din första avbildning till Azure Container Registry med Docker CLI.

  5. På fliken Distributionscentercontainrar>(ny) väljer du Lägg till>anpassad container och konfigurerar den nya containern på följande sätt:

    • Namn: phi-3
    • Avbildningskälla: Azure Container Registry
    • Register: ditt register
    • Bild: den uppladdade bilden
    • Tagg: den bildtagg som du vill använda
    • Port: 8000
  6. Välj Använd.

Se bring_your_own_slm/src/webapp för ett exempelprogram som interagerar med den här anpassade sidovagnscontainern.

Nästa steg

Självstudie: Konfigurera en sidecar container för en Linux-app i Azure App Service