Wdrażanie aplikacji korzystającej z interfejsu OpenAI w usłudze Azure Kubernetes Service (AKS)

Z tego artykułu dowiesz się, jak wdrożyć aplikację korzystającą z usługi Azure OpenAI lub OpenAI w usłudze AKS. Za pomocą interfejsu OpenAI można łatwo dostosować różne modele sztucznej inteligencji, takie jak generowanie zawartości, podsumowywanie, wyszukiwanie semantyczne i język naturalny do generowania kodu dla określonych zadań. Zacznij od wdrożenia klastra usługi AKS w ramach subskrypcji platformy Azure. Następnie wdrożysz usługę OpenAI i przykładową aplikację.

Przykładowa aplikacja natywna w chmurze jest reprezentatywna dla rzeczywistych implementacji. Aplikacja wielokontenerowa składa się z aplikacji napisanych w wielu językach i strukturach, w tym:

  • Golang z ginem
  • Rust with Actix-Web
  • Język JavaScript z bibliotekami Vue.js i Fastify
  • Python z interfejsem FastAPI

Te aplikacje udostępniają frontony dla klientów i administratorów sklepów, interfejsów API REST do wysyłania danych do kolejki komunikatów RabbitMQ i bazy danych MongoDB oraz aplikacji konsoli w celu symulowania ruchu.

Uwaga

Nie zalecamy uruchamiania kontenerów stanowych, takich jak MongoDB i Rabbit MQ, bez trwałego przechowywania w środowisku produkcyjnym. Używamy ich tutaj dla uproszczenia, ale zalecamy korzystanie z usług zarządzanych, takich jak Azure CosmosDB lub Azure Service Bus.

Aby uzyskać dostęp do bazy kodu usługi GitHub dla przykładowej aplikacji, zobacz Pokaz sklepu AKS.

Zanim rozpoczniesz

  • Potrzebujesz konta platformy Azure z aktywną subskrypcją. Jeśli go nie masz, utwórz bezpłatne konto.
  • Na potrzeby tego pokazu możesz użyć usługi Azure OpenAI lub usługi OpenAI.
    • Jeśli planujesz korzystanie z usługi Azure OpenAI, musisz zażądać dostępu, aby włączyć go w subskrypcji platformy Azure przy użyciu formularza Żądanie dostępu do usługi Azure OpenAI Service.
    • Jeśli planujesz korzystanie z interfejsu OpenAI, zarejestruj się w witrynie internetowej OpenAI.

Wymagania wstępne

Tworzenie grupy zasobów

Grupa zasobów platformy Azure to grupa logiczna, w której wdrażasz zasoby platformy Azure i zarządzasz nimi. Podczas tworzenia grupy zasobów zostanie wyświetlony monit o określenie lokalizacji. Ta lokalizacja to lokalizacja magazynu metadanych grupy zasobów i lokalizacja, w której zasoby są uruchamiane na platformie Azure, jeśli nie określisz innego regionu podczas tworzenia zasobów.

W poniższym przykładzie tworzona jest grupa zasobów o nazwie myResourceGroup w lokalizacji eastus.

  • Utwórz grupę zasobów przy użyciu az group create polecenia .

    az group create --name myResourceGroup --location eastus
    

    Następujące przykładowe dane wyjściowe pokazują pomyślne utworzenie grupy zasobów:

    {
      "id": "/subscriptions/<guid>/resourceGroups/myResourceGroup",
      "location": "eastus",
      "managedBy": null,
      "name": "myResourceGroup",
      "properties": {
        "provisioningState": "Succeeded"
      },
      "tags": null,
      "type": "Microsoft.Resources/resourceGroups"
    }
    

Tworzenie klastra AKS

Poniższy przykład tworzy klaster o nazwie myAKSCluster w grupie myResourceGroup.

  • Utwórz klaster usługi AKS przy użyciu az aks create polecenia .

    az aks create --resource-group myResourceGroup --name myAKSCluster --generate-ssh-keys
    

    Po kilku minutach polecenie zostanie wykonane i zwróci informacje o klastrze w formacie JSON.

Łączenie z klastrem

Aby zarządzać klastrem Kubernetes, należy użyć klienta wiersza polecenia Kubernetes, kubectl. kubectl program jest już zainstalowany, jeśli używasz usługi Azure Cloud Shell.

  1. Zainstaluj kubectl lokalnie przy użyciu az aks install-cli polecenia .

    az aks install-cli
    

    Uwaga

    Jeśli system oparty na systemie Linux wymaga podwyższonych uprawnień, możesz użyć sudo az aks install-cli polecenia .

  2. Skonfiguruj kubectl , aby nawiązać połączenie z klastrem az aks get-credentials Kubernetes przy użyciu polecenia .

    To polecenie wykonuje następujące operacje:

    • Pobiera poświadczenia i konfiguruje interfejs wiersza polecenia platformy Kubernetes do ich używania.
    • Używa ~/.kube/configmetody , domyślnej lokalizacji pliku konfiguracji platformy Kubernetes. Określ inną lokalizację pliku konfiguracji platformy Kubernetes przy użyciu argumentu --file .
    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    
  3. Sprawdź połączenie z klastrem kubectl get przy użyciu polecenia . To polecenie zwraca listę węzłów klastra.

    kubectl get nodes
    

    Poniższe przykładowe dane wyjściowe pokazują węzły utworzone w poprzednich krokach. Upewnij się, że stan węzła to Gotowe.

    NAME                                STATUS   ROLES   AGE     VERSION
    aks-nodepool1-31469198-vmss000000   Ready    agent   3h29m   v1.25.6
    aks-nodepool1-31469198-vmss000001   Ready    agent   3h29m   v1.25.6
    aks-nodepool1-31469198-vmss000002   Ready    agent   3h29m   v1.25.6
    

Uwaga

W przypadku klastrów prywatnych węzły mogą być niedostępne, jeśli spróbujesz nawiązać z nimi połączenie za pośrednictwem publicznego adresu IP. Aby rozwiązać ten problem, należy utworzyć punkt końcowy w tej samej sieci wirtualnej co klaster do nawiązania połączenia. Postępuj zgodnie z instrukcjami, aby utworzyć prywatny klaster usługi AKS, a następnie nawiązać z nim połączenie.

Wdrażanie aplikacji

Architecture diagram of AKS AI demo.

Manifest aplikacji usługi AKS Store obejmuje następujące wdrożenia i usługi Kubernetes:

  • Usługa produktu: wyświetla informacje o produkcie.
  • Usługa zamawiania: umieszcza zamówienia.
  • Usługa makeline: przetwarza zamówienia z kolejki i kończy zamówienia.
  • Front sklepu: aplikacja internetowa dla klientów do wyświetlania produktów i składania zamówień.
  • Administrator sklepu: aplikacja internetowa do przechowywania pracowników do wyświetlania zamówień w kolejce i zarządzania informacjami o produkcie.
  • Klient wirtualny: symuluje tworzenie zamówień zgodnie z harmonogramem.
  • Wirtualny proces roboczy: symuluje ukończenie zamówienia zgodnie z harmonogramem.
  • Mongo DB: wystąpienie NoSQL dla utrwałych danych.
  • Rabbit MQ: kolejka komunikatów dla kolejki zamówień.

Uwaga

Nie zalecamy uruchamiania kontenerów stanowych, takich jak MongoDB i Rabbit MQ, bez trwałego przechowywania w środowisku produkcyjnym. Używamy ich tutaj dla uproszczenia, ale zalecamy korzystanie z usług zarządzanych, takich jak Azure CosmosDB lub Azure Service Bus.

  1. Przejrzyj manifest YAML dla aplikacji.

  2. Wdróż aplikację przy użyciu kubectl apply polecenia i określ nazwę manifestu YAML.

    kubectl apply -f https://raw.githubusercontent.com/Azure-Samples/aks-store-demo/main/aks-store-all-in-one.yaml
    

    W poniższych przykładowych danych wyjściowych przedstawiono pomyślnie utworzone wdrożenia i usługi:

    deployment.apps/mongodb created
    service/mongodb created
    deployment.apps/rabbitmq created
    service/rabbitmq created
    deployment.apps/order-service created
    service/order-service created
    deployment.apps/makeline-service created
    service/makeline-service created
    deployment.apps/product-service created
    service/product-service created
    deployment.apps/store-front created
    service/store-front created
    deployment.apps/store-admin created
    service/store-admin created
    deployment.apps/virtual-customer created
    deployment.apps/virtual-worker created
    

Wdrażanie interfejsu OpenAI

Możesz użyć usługi Azure OpenAI lub OpenAI i uruchomić aplikację w usłudze AKS.

  1. Włącz usługę Azure OpenAI w ramach subskrypcji platformy Azure, wypełniając formularz Żądanie dostępu do usługi Azure OpenAI Service.
  2. W witrynie Azure Portal utwórz wystąpienie usługi Azure OpenAI.
  3. Wybierz utworzone wystąpienie usługi Azure OpenAI.
  4. Wybierz pozycję Klucze i punkty końcowe , aby wygenerować klucz.
  5. Wybierz pozycję Wdrożenia modelu Zarządzane wdrożenia>, aby otworzyć program Azure OpenAI Studio.
  6. Utwórz nowe wdrożenie przy użyciu modelu gpt-35-turbo .

Aby uzyskać więcej informacji na temat tworzenia wdrożenia w usłudze Azure OpenAI, zobacz Wprowadzenie do generowania tekstu przy użyciu usługi Azure OpenAI Service.

Wdrażanie usługi sztucznej inteligencji

Po wdrożeniu aplikacji można wdrożyć mikrousługę opartą na języku Python, która używa interfejsu OpenAI do automatycznego generowania opisów nowych produktów dodawanych do katalogu sklepu.

  1. Utwórz plik o nazwie ai-service.yaml i skopiuj go w następującym manifeście:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: ai-service
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: ai-service
      template:
        metadata:
          labels:
            app: ai-service
        spec:
          nodeSelector:
            "kubernetes.io/os": linux
          containers:
          - name: ai-service
            image: ghcr.io/azure-samples/aks-store-demo/ai-service:latest
            ports:
            - containerPort: 5001
            env:
            - name: USE_AZURE_OPENAI 
              value: "True"
            - name: AZURE_OPENAI_DEPLOYMENT_NAME 
              value: ""
            - name: AZURE_OPENAI_ENDPOINT 
              value: ""
            - name: OPENAI_API_KEY 
              value: ""
            resources:
              requests:
                cpu: 20m
                memory: 50Mi
              limits:
                cpu: 50m
                memory: 128Mi
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: ai-service
    spec:
      type: ClusterIP
      ports:
      - name: http
        port: 5001
        targetPort: 5001
      selector:
        app: ai-service
    
  2. Ustaw zmienną środowiskową USE_AZURE_OPENAI na "True".

  3. Pobierz nazwę wdrożenia usługi Azure OpenAI z programu Azure OpenAI Studio i wypełnij AZURE_OPENAI_DEPLOYMENT_NAME wartość .

  4. Pobierz punkt końcowy usługi Azure OpenAI i klucz interfejsu API usługi Azure OpenAI z witryny Azure Portal, wybierając pozycję Klucze i punkt końcowy w lewym bloku zasobu. Odpowiednio zaktualizuj element AZURE_OPENAI_ENDPOINT i OPENAI_API_KEY w języku YAML.

  5. Wdróż aplikację przy użyciu kubectl apply polecenia i określ nazwę manifestu YAML.

    kubectl apply -f ai-service.yaml
    

    W poniższych przykładowych danych wyjściowych przedstawiono pomyślnie utworzone wdrożenia i usługi:

      deployment.apps/ai-service created
      service/ai-service created
    

Uwaga

Bezpośrednie dodawanie poufnych informacji, takich jak klucze interfejsu API, do plików manifestu kubernetes nie jest bezpieczne i może zostać przypadkowo zatwierdzone w repozytoriach kodu. Dodaliśmy to tutaj dla uproszczenia. W przypadku obciążeń produkcyjnych użyj tożsamości zarządzanej do uwierzytelniania w usłudze Azure OpenAI zamiast tego lub zapisania wpisów tajnych w usłudze Azure Key Vault.

Testowanie aplikacji

  1. Sprawdź stan wdrożonych zasobników przy użyciu polecenia kubectl get pods .

    kubectl get pods
    

    Przed przejściem do następnego kroku upewnij się, że wszystkie zasobniki są uruchomione .

    NAME                                READY   STATUS    RESTARTS   AGE
    makeline-service-7db94dc7d4-8g28l   1/1     Running   0          99s
    mongodb-78f6d95f8-nptbz             1/1     Running   0          99s
    order-service-55cbd784bb-6bmfb      1/1     Running   0          99s
    product-service-6bf4d65f74-7cbvk    1/1     Running   0          99s
    rabbitmq-9855984f9-94nlm            1/1     Running   0          99s
    store-admin-7f7d768c48-9hn8l        1/1     Running   0          99s
    store-front-6786c64d97-xq5s9        1/1     Running   0          99s
    virtual-customer-79498f8667-xzsb7   1/1     Running   0          99s
    virtual-worker-6d77fff4b5-7g7rj     1/1     Running   0          99s
    
  2. Pobierz adres IP aplikacji internetowej administratora sklepu i zapisz aplikację internetową frontonu kubectl get service przy użyciu polecenia .

    kubectl get service store-admin
    

    Aplikacja uwidacznia witrynę Store Administracja z Internetem za pośrednictwem publicznego modułu równoważenia obciążenia aprowizowanego przez usługę Kubernetes. Ten proces może potrwać kilka minut. Zewnętrzny adres IP początkowo wyświetla oczekujące, dopóki usługa nie pojawi się i wyświetli adres IP.

    NAME          TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)        AGE
    store-admin   LoadBalancer   10.0.142.228   40.64.86.161    80:32494/TCP   50m    
    

    Powtórz ten sam krok dla usługi o nazwie "store-front".

  3. Otwórz przeglądarkę internetową i przejdź do zewnętrznego adresu IP usługi. W przykładzie pokazanym tutaj otwórz plik 40.64.86.161, aby wyświetlić Administracja Sklepu w przeglądarce. Powtórz ten sam krok dla aplikacji Store Front.

  4. W obszarze administrator sklepu wybierz kartę Produkty, a następnie wybierz pozycję Dodaj produkty.

  5. Po pomyślnym uruchomieniu polecenia "ai-service" obok pola opisu powinien zostać wyświetlony przycisk Ask OpenAI (Zapytaj interfejs OpenAI). Wypełnij nazwę, cenę i słowa kluczowe, a następnie wygeneruj opis produktu, wybierając pozycję Zapytaj o zapisanie produktu OpenAI>.

    Screenshot of how to use openAI to generate a product description.

  6. Teraz możesz zobaczyć nowy produkt utworzony w sklepie Administracja używany przez sprzedawców. Na zdjęciu widać, że dodawana jest dżungla Monkey Chew Toy.

    Screenshot viewing the new product in the store admin page.

  7. Możesz również zobaczyć nowy produkt utworzony w sklepie Front używany przez kupujących. Na zdjęciu widać, że dodawana jest dżungla Monkey Chew Toy. Pamiętaj, aby uzyskać adres IP magazynu frontu kubectl get service przy użyciu polecenia .

    Screenshot viewing the new product in the store front page.

Następne kroki

Po dodaniu funkcji OpenAI do aplikacji usługi AKS możesz zabezpieczyć dostęp do usługi Azure OpenAI z poziomu usługi Azure Kubernetes Service (AKS).

Aby dowiedzieć się więcej na temat generowania przypadków użycia sztucznej inteligencji, zobacz następujące zasoby: