Bagikan melalui


Tutorial: Menjalankan chatbot di App Service dengan ekstensi Phi-4 sidecar (Spring Boot)

Tutorial ini memandu Anda menyebarkan aplikasi chatbot berbasis Spring Boot yang terintegrasi dengan ekstensi sidecar Phi-4 di Azure App Service. Dengan mengikuti langkah-langkahnya, Anda akan mempelajari cara menyiapkan aplikasi web yang dapat diskalakan, menambahkan sidecar yang didukung AI untuk kemampuan percakapan yang ditingkatkan, dan menguji fungsionalitas chatbot.

Hosting model bahasa kecil (SLM) Anda sendiri menawarkan beberapa keuntungan:

  • Kontrol penuh atas data Anda. Informasi sensitif tidak terekspos ke layanan eksternal, yang sangat penting untuk industri dengan persyaratan kepatuhan yang ketat.
  • Model yang dihost sendiri dapat disempurnakan untuk memenuhi kasus penggunaan tertentu atau persyaratan khusus domain.
  • Meminimalkan latensi jaringan dan waktu respons yang lebih cepat untuk pengalaman pengguna yang lebih baik.
  • Kontrol penuh atas alokasi sumber daya, memastikan performa optimal untuk aplikasi Anda.

Prasyarat

  • Akun Azure dengan langganan aktif.
  • Akun GitHub.

Menyebarkan aplikasi sampel

  1. Di browser, navigasikan ke repositori aplikasi sampel.

  2. Mulai Codespace baru dari repositori.

  3. Masuk dengan akun Azure Anda:

    az login
    
  4. Buka terminal di Codespace dan jalankan perintah berikut:

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

Menambahkan ekstensi sidecar Phi-4

Di bagian ini, Anda menambahkan ekstensi sidecar Phi-4 ke aplikasi ASP.NET Core yang dihosting di Azure App Service.

  1. Buka portal Microsoft Azure dan buka halaman manajemen aplikasi Anda.
  2. Di menu sebelah kiri, pilihPusat Penyebaran>.
  3. Pada tab Kontainer , pilih Tambahkan>ekstensi Sidecar.
  4. Di opsi ekstensi sidecar, pilih AI: phi-4-q4-gguf (Eksperimental).
  5. Berikan nama untuk ekstensi sidecar.
  6. Pilih Simpan untuk menerapkan perubahan.
  7. Tunggu beberapa menit hingga ekstensi sidecar terpasang. Terus pilih Refresh hingga kolom Status memperlihatkan Berjalan.

Ekstensi sidecar Phi-4 ini menggunakan API penyelesaian obrolan seperti OpenAI yang dapat menanggapi respons penyelesaian obrolan di http://localhost:11434/v1/chat/completions. Untuk informasi selengkapnya tentang cara berinteraksi dengan API, lihat:

Menguji chatbot

  1. Di halaman manajemen aplikasi Anda, di menu sebelah kiri, pilih Gambaran Umum.

  2. Di bawah Domain default, pilih URL untuk membuka aplikasi web Anda di browser.

  3. Verifikasi bahwa aplikasi chatbot sedang berjalan dan merespons input pengguna.

    Cuplikan layar memperlihatkan aplikasi asisten mode yang berjalan di browser.

Cara kerja aplikasi sampel

Aplikasi sampel menunjukkan cara mengintegrasikan layanan Java dengan ekstensi sidecar SLM. Kelas ReactiveSLMService merangkum logika untuk mengirim permintaan ke API SLM dan memproses respons yang dialirkan. Integrasi ini memungkinkan aplikasi menghasilkan respons percakapan secara dinamis.

Melihat use_sidecar_extension/springapp/src/main/java/com/example/springapp/service/ReactiveSLMService.java, Anda melihat bahwa:

  • Layanan ini membaca URL dari fashion.assistant.api.url, yang ditetapkan di application.properties dan memiliki nilai sebesar http://localhost:11434/v1/chat/completions.

    public ReactiveSLMService(@Value("${fashion.assistant.api.url}") String apiUrl) {
        this.webClient = WebClient.builder()
                .baseUrl(apiUrl)
                .build();
    }
    
  • Payload POST menyertakan pesan sistem dan perintah yang dibuat dari produk yang dipilih dan kueri pengguna.

    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();
    
  • Permintaan POST reaktif mengalirkan respons baris demi baris. Setiap baris diurai untuk mengekstrak konten yang dihasilkan (atau 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"));
    

Tanya jawab umum


Bagaimana tingkat harga memengaruhi performa sidecar SLM?

Karena model AI menggunakan sumber daya yang cukup besar, pilih tingkat harga yang memberi Anda vCPU dan memori yang memadai untuk menjalankan model spesifik Anda. Untuk alasan ini, ekstensi sidecar AI bawaan hanya muncul ketika aplikasi berada dalam tingkat harga yang sesuai. Jika Anda membangun kontainer sidecar SLM Anda sendiri, Anda juga harus menggunakan model yang dioptimalkan CPU, karena tingkat harga App Service adalah tingkat khusus CPU.

Misalnya, model mini Phi-3 dengan panjang konteks 4K dari Hugging Face dirancang untuk berjalan dengan sumber daya terbatas dan memberikan penalaran matematika dan logis yang kuat untuk banyak skenario umum. Ini juga dilengkapi dengan versi yang dioptimalkan untuk CPU. Di App Service, kami menguji model pada semua tingkat premium dan menemukannya berkinerja baik di tingkat P2mv3 atau yang lebih tinggi. Jika persyaratan Anda memungkinkan, Anda dapat menjalankannya pada tingkat yang lebih rendah.


Bagaimana cara menggunakan sidecar SLM saya sendiri?

Repositori sampel berisi sampel kontainer SLM yang dapat Anda gunakan sebagai sidecar. Ini menjalankan aplikasi FastAPI yang mendengarkan pada port 8000, seperti yang ditentukan dalam Dockerfile-nya. Aplikasi ini menggunakan ONNX Runtime untuk memuat model Phi-3, lalu meneruskan data HTTP POST ke model dan mengalirkan respons dari model kembali ke klien. Untuk informasi selengkapnya, lihat model_api.py.

Untuk membangun gambar sidecar sendiri, Anda perlu menginstal Docker Desktop secara lokal di komputer Anda.

  1. Kloning repositori secara lokal.

    git clone https://github.com/Azure-Samples/ai-slm-in-app-service-sidecar
    cd ai-slm-in-app-service-sidecar
    
  2. Ubah menjadi direktori sumber gambar Phi-3 dan unduh model secara lokal menggunakan 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 dikonfigurasi untuk menyalin model dari ./Phi-3-mini-4k-instruct-onnx.

  3. Buat gambar Docker. Contohnya:

    docker build --tag phi-3 .
    
  4. Unggah gambar bawaan ke Azure Container Registry dengan Dorong gambar pertama Anda ke registri kontainer Azure Anda menggunakan Docker CLI.

  5. Di tab Pusat Penyebaran>Kontainer (baru), pilih Tambahkan>Kontainer Kustom dan konfigurasikan kontainer baru sebagai berikut:

    • Nama: phi-3
    • Sumber gambar: Azure Container Registry
    • Registri: registri Anda
    • Gambar: gambar yang diunggah
    • Tag: tag gambar yang Anda inginkan
    • Port: 8000
  6. Pilih Terapkan.

Lihat bring_your_own_slm/src/webapp untuk aplikasi sampel yang berinteraksi dengan kontainer sidecar kustom ini.

Langkah selanjutnya

Tutorial: Mengonfigurasi kontainer sidecar untuk aplikasi Linux di Azure App Service