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
  • Rust met Actix-Web
  • JavaScript met Vue.js en Fastify
  • Python met FastAPI

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

Notitie

Wij raden niet aan om stateful containers, zoals MongoDB en Rabbit MQ, zonder permanente opslag in productie te draaien. 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 in de regio eastus.

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

    az group create --name myResourceGroup --location eastus
    

    In het volgende voorbeeldresultaat ziet u dat de resourcegroep succesvol is aangemaakt:

    {
      "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 om verbinding te maken met uw Kubernetes-cluster met de az aks get-credentials opdracht.

    Met deze opdracht worden de volgende bewerkingen uitgevoerd:

    • Hiervoor downloadt u credentials 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.
  • Store admin: Webtoepassing voor winkelmedewerkers om orders in de wachtrij te bekijken en productinformatie te beheren.
  • Virtuele klant: simuleert het maken van bestellingen op een geplande basis.
  • Virtuele werknemer: simuleert ordervoltooiing volgens planning.
  • Mongo DB: NoSQL-exemplaar voor persistente gegevens.
  • Rabbit MQ: Berichtenwachtrij voor een orderwachtrij.

Notitie

Wij raden niet aan om stateful containers, zoals MongoDB en Rabbit MQ, zonder permanente opslag in productie te draaien. 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. Maak in Azure Portal een Azure OpenAI-exemplaar.
  2. Navigeer naar het Azure OpenAI-exemplaar dat u hebt gemaakt.
  3. Navigeer vanuit het Overzicht-scherm naar de Azure AI Foundry portal.
  4. Maak een nieuwe chat-implementatie met behulp van het basismodel gpt-4o-mini .

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 AI Foundry 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 productie workloads gebruikt u Managed Identity voor authenticatie 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 draaien 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 voor winkelbeheer en de webtoepassing voor de winkelvoorzijde 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 toont aanvankelijk in afwachting totdat de service actief is en het IP-adres wordt getoond.

    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. In het hier getoonde voorbeeld, open 40.64.86.161 om Store Admin 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 Ask OpenAI te selecteren en >.

    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 Dog Smart Collar 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 Dog Smart Collar 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: