Delen via


Een toepassing implementeren die gebruikmaakt van OpenAI in Azure Kubernetes Service (AKS)

In dit artikel leert u hoe u een toepassing implementeert die gebruikmaakt van Azure OpenAI of OpenAI op AKS. Met OpenAI kunt u eenvoudig verschillende AI-modellen aanpassen, zoals het genereren van inhoud, samenvatting, semantische zoekopdrachten en natuurlijke taal voor het genereren van code, voor uw specifieke taken. U begint met het implementeren van een AKS-cluster in uw Azure-abonnement. Vervolgens implementeert u uw OpenAI-service en de voorbeeldtoepassing.

De voorbeeldcloudeigen toepassing is representatief voor echte implementaties. De toepassing met meerdere containers bestaat uit toepassingen die zijn geschreven in meerdere talen en frameworks, waaronder:

  • Golang met Gin
  • Roest met Actix-Web
  • JavaScript met Vue.js en Fastify
  • Python met FastAPI

Deze toepassingen bieden front-ends voor klanten en slaan beheerders, REST API's op voor het verzenden van gegevens naar rabbitMQ-berichtenwachtrij en MongoDB-database en console-apps om verkeer te simuleren.

Notitie

Het wordt afgeraden stateful containers, zoals MongoDB en Rabbit MQ, uit te voeren zonder permanente opslag voor productie. We gebruiken ze hier voor het gemak, maar we raden u aan beheerde services te gebruiken, zoals Azure CosmosDB of Azure Service Bus.

Zie AKS Store-demo voor toegang tot de GitHub-codebase voor de voorbeeldtoepassing.

Voordat u begint

  • U hebt een Azure-account met een actief abonnement nodig. Als u nog geen account hebt, maakt u gratis een account.
  • Voor deze demo kunt u de Azure OpenAI-service of de OpenAI-service gebruiken.
    • Als u van plan bent om de Azure OpenAI-service te gebruiken, moet u toegang aanvragen om deze in te schakelen in uw Azure-abonnement met behulp van het formulier Toegang aanvragen tot Azure OpenAI-service.
    • Als u van plan bent om OpenAI te gebruiken, meldt u zich aan op de OpenAI-website.

Vereisten

Een brongroep maken

Een Azure-resourcegroep is een logische groep waarin u Azure-resources implementeert en beheert. Wanneer u een resourcegroep maakt, wordt u gevraagd een locatie op te geven. Deze locatie is de opslaglocatie van de metagegevens van uw resourcegroep en waar uw resources worden uitgevoerd in Azure als u geen andere regio opgeeft tijdens het maken van de resource.

In het volgende voorbeeld wordt een resourcegroep met de naam myResourceGroup gemaakt op de locatie VS - oost.

  • Maak een resourcegroep met behulp van de az group create opdracht.

    az group create --name myResourceGroup --location eastus
    

    In de volgende voorbeelduitvoer ziet u dat de resourcegroep is gemaakt:

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

Een AKS-cluster maken

In het volgende voorbeeld wordt een cluster met de naam myAKSCluster gemaakt in myResourceGroup.

  • Maak een AKS-cluster met behulp van de az aks create opdracht.

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

    Na enkele minuten is de opdracht voltooid en retourneert deze informatie over het cluster in JSON-indeling.

Verbinding maken met het cluster

Als u een Kubernetes-cluster wilt beheren, gebruikt u de Kubernetes-opdrachtregelclient kubectl. kubectl is al geïnstalleerd als u Azure Cloud Shell gebruikt.

  1. Installeer kubectl lokaal met behulp van de az aks install-cli opdracht.

    az aks install-cli
    

    Notitie

    Als voor uw Linux-systeem verhoogde machtigingen zijn vereist, kunt u de sudo az aks install-cli opdracht gebruiken.

  2. Configureer kubectl deze om verbinding te maken met uw Kubernetes-cluster met behulp van de az aks get-credentials opdracht.

    Met deze opdracht worden de volgende bewerkingen uitgevoerd:

    • Hiermee downloadt u referenties en configureert u de Kubernetes CLI om deze te gebruiken.
    • Gebruikt ~/.kube/config, de standaardlocatie voor het Kubernetes-configuratiebestand. Geef een andere locatie op voor uw Kubernetes-configuratiebestand met behulp van het argument --file .
    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    
  3. Controleer de verbinding met uw cluster met behulp van de kubectl get opdracht. Met deze opdracht wordt een lijst met de clusterknooppunten geretourneerd.

    kubectl get nodes
    

    In de volgende voorbeelduitvoer ziet u de knooppunten die in de vorige stappen zijn gemaakt. Zorg ervoor dat de status van het knooppunt gereed is.

    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
    

Notitie

Voor privéclusters zijn de knooppunten mogelijk onbereikbaar als u er verbinding mee probeert te maken via het openbare IP-adres. Om dit probleem op te lossen, moet u een eindpunt maken binnen hetzelfde VNET als het cluster waaruit u verbinding wilt maken. Volg de instructies voor het maken van een privé-AKS-cluster en maak er vervolgens verbinding mee.

De toepassing implementeren

Architectuurdiagram van AKS AI-demo.

Het AKS Store-toepassingsmanifest bevat de volgende Kubernetes-implementaties en -services:

  • Productservice: toont productgegevens.
  • Orderservice: Orders plaatsen.
  • Makeline-service: verwerkt orders uit de wachtrij en voltooit de orders.
  • Webwinkel: Webtoepassing voor klanten om producten te bekijken en bestellingen te plaatsen.
  • Winkelbeheerder: Webtoepassing voor het opslaan van werknemers om orders in de wachtrij te bekijken en productgegevens te beheren.
  • Virtuele klant: simuleert het maken van bestellingen op een geplande basis.
  • Virtuele werkrol: simuleert ordervoltooiing op geplande basis.
  • Mongo DB: NoSQL-exemplaar voor persistente gegevens.
  • Rabbit MQ: Berichtenwachtrij voor een orderwachtrij.

Notitie

Het wordt afgeraden stateful containers, zoals MongoDB en Rabbit MQ, uit te voeren zonder permanente opslag voor productie. We gebruiken ze hier voor het gemak, maar we raden u aan beheerde services te gebruiken, zoals Azure CosmosDB of Azure Service Bus.

  1. Controleer het YAML-manifest voor de toepassing.

  2. Implementeer de toepassing met behulp van de kubectl apply opdracht en geef de naam van uw YAML-manifest op.

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

    In de volgende voorbeelduitvoer ziet u de gemaakte implementaties en services:

    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
    

OpenAI implementeren

U kunt Azure OpenAI of OpenAI gebruiken en uw toepassing uitvoeren op AKS.

  1. Schakel Azure OpenAI in voor uw Azure-abonnement door het formulier Aanvraagtoegang in te vullen voor Azure OpenAI Service .
  2. Maak in Azure Portal een Azure OpenAI-exemplaar.
  3. Selecteer het Azure OpenAI-exemplaar dat u hebt gemaakt.
  4. Selecteer Sleutels en eindpunten om een sleutel te genereren.
  5. Selecteer Beheerde implementaties>voor modelimplementaties om de Azure OpenAI-studio te openen.
  6. Maak een nieuwe implementatie met behulp van het gpt-35-turbo-model .

Zie Aan de slag met het genereren van tekst met behulp van De Azure OpenAI-service voor meer informatie over het maken van een implementatie in Azure OpenAI.

De AI-service implementeren

Nu de toepassing is geïmplementeerd, kunt u de op Python gebaseerde microservice implementeren die Gebruikmaakt van OpenAI om automatisch beschrijvingen te genereren voor nieuwe producten die worden toegevoegd aan de catalogus van de store.

  1. Maak een bestand met de naam ai-service.yaml en kopieer dit in het volgende manifest:

    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. Stel de omgevingsvariabele USE_AZURE_OPENAI in op "True".

  3. Haal de naam van uw Azure OpenAI-implementatie op uit Azure OpenAI Studio en vul de AZURE_OPENAI_DEPLOYMENT_NAME waarde in.

  4. Haal uw Azure OpenAI-eindpunt en de Azure OpenAI API-sleutel op in Azure Portal door sleutels en eindpunt te selecteren in de linkerblade van de resource. Werk de AZURE_OPENAI_ENDPOINT en OPENAI_API_KEY in de YAML dienovereenkomstig bij.

  5. Implementeer de toepassing met behulp van de kubectl apply opdracht en geef de naam van uw YAML-manifest op.

    kubectl apply -f ai-service.yaml
    

    In de volgende voorbeelduitvoer ziet u de gemaakte implementaties en services:

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

Notitie

Het rechtstreeks toevoegen van gevoelige informatie, zoals API-sleutels, aan uw Kubernetes-manifestbestanden is niet beveiligd en kan per ongeluk worden doorgevoerd in codeopslagplaatsen. We hebben het hier toegevoegd om het eenvoudig te maken. Voor productieworkloads gebruikt u Managed Identity om te verifiëren bij de Azure OpenAI-service of om uw geheimen op te slaan in Azure Key Vault.

De toepassing testen

  1. Controleer de status van de geïmplementeerde pods met behulp van de opdracht kubectl get pods .

    kubectl get pods
    

    Zorg ervoor dat alle pods worden uitgevoerd voordat u verdergaat met de volgende stap.

    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. Haal het IP-adres van de webtoepassing winkelbeheerder op en sla de front-webtoepassing op met behulp van de kubectl get service opdracht.

    kubectl get service store-admin
    

    De toepassing maakt de Store-beheersite beschikbaar op internet via een openbare load balancer die is ingericht door de Kubernetes-service. Dit proces kan enkele minuten duren. EXTERN IP-adres wordt in eerste instantie in behandeling weergegeven totdat de service wordt weergegeven en het IP-adres wordt weergegeven.

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

    Herhaal dezelfde stap voor de service met de naam 'store-front'.

  3. Open een webbrowser en blader naar het externe IP-adres van uw service. Open in het voorbeeld dat hier wordt weergegeven 40.64.86.161 om Store-beheerder in de browser te zien. Herhaal dezelfde stap voor Store Front.

  4. Selecteer in de winkelbeheerder het tabblad Producten en selecteer vervolgens Producten toevoegen.

  5. Wanneer de 'ai-service' wordt uitgevoerd, ziet u de knop Ask OpenAI naast het beschrijvingsveld. Vul de naam, prijs en trefwoorden in en genereer vervolgens een productbeschrijving door Het product Ask OpenAI>Save te selecteren.

    Schermopname van het gebruik van openAI om een productbeschrijving te genereren.

  6. U kunt nu het nieuwe product zien dat u hebt gemaakt in storebeheerder die door verkopers wordt gebruikt. Op de foto ziet u dat Jungle Monkey Chew Toy is toegevoegd.

    Schermopname van het nieuwe product op de winkelbeheerderspagina.

  7. U kunt ook het nieuwe product zien dat u hebt gemaakt op Store Front dat door kopers wordt gebruikt. Op de foto ziet u dat Jungle Monkey Chew Toy is toegevoegd. Vergeet niet om het IP-adres van de winkelfront op te halen met behulp van de kubectl get service opdracht.

    Schermopname van het nieuwe product op de voorpagina van de winkel.

Volgende stappen

Nu u OpenAI-functionaliteit hebt toegevoegd aan een AKS-toepassing, kunt u vanuit Azure Kubernetes Service (AKS) de toegang tot Azure OpenAI beveiligen.

Zie de volgende bronnen voor meer informatie over generatieve AI-gebruiksvoorbeelden: