Share via


Zelfstudie: Hints voor het voltooien van Azure OpenAI-tekst toevoegen aan uw functies in Visual Studio Code

In dit artikel leest u hoe u Visual Studio Code gebruikt om een HTTP-eindpunt toe te voegen aan de functie-app die u in het vorige quickstart-artikel hebt gemaakt. Wanneer dit nieuwe HTTP-eindpunt wordt geactiveerd, wordt een Invoerbinding voor tekstvoltooiing van Azure OpenAI gebruikt om hints voor tekstvoltooiing op te halen uit uw gegevensmodel.

Tijdens deze zelfstudie leert u hoe u deze taken uitvoert:

  • Resources maken in Azure OpenAI.
  • Implementeer een model in OpenAI de resource.
  • Stel toegangsmachtigingen in voor de modelresource.
  • Schakel uw functie-app in om verbinding te maken met OpenAI.
  • Voeg OpenAI-bindingen toe aan uw door HTTP geactiveerde functie.

1. Controleer de vereisten

  • Verkrijg toegang tot Azure OpenAI in uw Azure-abonnement. Als u nog geen toegang hebt gekregen, vult u dit formulier in om toegang aan te vragen.
  • De Emulator van de Azurite-opslag. Hoewel u ook een werkelijk Azure Storage-account kunt gebruiken, wordt ervan uitgegaan dat u deze emulator gebruikt.

2. Uw Azure OpenAI-resources maken

In de volgende stappen ziet u hoe u een Azure OpenAI-gegevensmodel maakt in Azure Portal.

  1. Meld u aan met uw Azure-abonnement in Azure Portal.

  2. Selecteer Een resource maken en zoek naar De Azure OpenAI. Wanneer u de service zoekt, selecteert u Maken.

  3. Geef op de pagina Azure OpenAI maken de volgende informatie op voor de velden op het tabblad Basisbeginselen :

    Veld Beschrijving
    Abonnement Uw abonnement, dat is onboarded voor het gebruik van Azure OpenAI.
    Resourcegroep De resourcegroep die u in het vorige artikel hebt gemaakt voor de functie-app. U vindt deze naam van de resourcegroep door met de rechtermuisknop op de functie-app te klikken in de browser Azure-resources, eigenschappen te selecteren en vervolgens te zoeken naar de resourceGroup instelling in het geretourneerde JSON-resourcebestand.
    Regio Idealiter dezelfde locatie als de functie-app.
    Naam Een beschrijvende naam voor uw Azure OpenAI-serviceresource, zoals mySampleOpenAI.
    Prijscategorie De prijscategorie voor de resource. Momenteel is alleen de Standard-laag beschikbaar voor de Azure OpenAI-service. Ga naar de pagina met prijzen van Azure OpenAI voor meer informatie over prijzen

    Schermopname van het configureren van een Azure OpenAI-resource in Azure Portal.

  4. Selecteer Volgende twee keer om de standaardwaarden voor de tabbladen Netwerk en Tags te accepteren. De service die u maakt, heeft geen netwerkbeperkingen, waaronder van internet.

  5. Selecteer Volgende een laatste keer om naar de laatste fase in het proces te gaan: Beoordelen en verzenden.

  6. Bevestig uw configuratie-instellingen en selecteer Maken.

    In Azure Portal wordt een melding weergegeven wanneer de nieuwe resource beschikbaar is. Selecteer Ga naar de resource in de melding of zoek op naam naar uw nieuwe Azure OpenAI-resource.

  7. Selecteer op de azure OpenAI-resourcepagina voor uw nieuwe resource klik hier om eindpunten onder Essentials-eindpunten> weer te geven. Kopieer de eindpunt-URL en de sleutels. Sla deze waarden op, u hebt ze later nodig.

Nu u de referenties hebt om verbinding te maken met uw model in Azure OpenAI, moet u deze toegangsreferenties instellen in de toepassingsinstellingen.

3. Een model implementeren

U kunt nu een model implementeren. U kunt kiezen uit een van de verschillende beschikbare modellen in Azure OpenAI Studio.

Voer de volgende stappen uit om een model te implementeren:

  1. Meld u aan bij Azure OpenAI Studio.

  2. Kies het abonnement en de Azure OpenAI-resource die u hebt gemaakt en selecteer Resource gebruiken.

  3. Selecteer Implementaties onder Beheer.

  4. Selecteer Nieuwe implementatie maken en configureer de volgende velden:

    Veld Beschrijving
    Naam van implementatie Kies zorgvuldig een naam. De implementatienaam wordt gebruikt in uw code om het model aan te roepen met behulp van de clientbibliotheken en de REST API's, dus u moet het later opslaan voor gebruik.
    Een model selecteren De modelbeschikbaarheid varieert per regio. Zie de overzichtstabel van het model en de beschikbaarheid van regio's voor een lijst met beschikbare modellen per regio.

    Belangrijk

    Wanneer u het model opent via de API, moet u verwijzen naar de implementatienaam in plaats van de onderliggende modelnaam in API-aanroepen. Dit is een van de belangrijkste verschillen tussen OpenAI en Azure OpenAI. OpenAI vereist alleen de modelnaam. Azure OpenAI vereist altijd de implementatienaam, zelfs wanneer u de modelparameter gebruikt. In onze documenten hebben we vaak voorbeelden waarin implementatienamen worden weergegeven als identiek aan modelnamen om aan te geven welk model met een bepaald API-eindpunt werkt. Uiteindelijk kunnen uw implementatienamen de naamconventie volgen die het beste is voor uw use-case.

  5. Accepteer de standaardwaarden voor de rest van de instelling en selecteer Maken.

    In de tabel implementaties ziet u een nieuwe vermelding die overeenkomt met het zojuist gemaakte model.

U hebt nu alles wat u nodig hebt om op Azure OpenAI gebaseerde tekstvoltooiing toe te voegen aan uw functie-app.

4. Toepassingsinstellingen bijwerken

  1. Open in Visual Studio Code het lokale codeproject dat u hebt gemaakt toen u het vorige artikel hebt voltooid.

  2. Werk in het bestand local.settings.json in de hoofdmap van het project de AzureWebJobsStorage instelling bij naar UseDevelopmentStorage=true. U kunt deze stap overslaan als de AzureWebJobsStorage instelling in local.settings.json is ingesteld op de verbindingsreeks voor een bestaand Azure Storage-account in plaats van UseDevelopmentStorage=true.

  3. Voeg in het bestand local.settings.json deze instellingen toe:

    • AZURE_OPENAI_ENDPOINT: vereist door de bindingsextensie. Stel deze waarde in op het eindpunt van de Azure OpenAI-resource die u eerder hebt gemaakt.
    • AZURE_OPENAI_KEY: vereist door de bindingsextensie. Stel deze waarde in op de sleutel voor de Azure OpenAI-resource.
    • CHAT_MODEL_DEPLOYMENT_NAME: wordt gebruikt om de invoerbinding te definiëren. Stel deze waarde in op de naam die u hebt gekozen voor uw modelimplementatie.
  4. Sla het bestand op. Wanneer u in Azure implementeert, moet u deze instellingen ook toevoegen aan uw functie-app.

5. Bindingsextensies registreren

Omdat u een Azure OpenAI-uitvoerbinding gebruikt, moet de bijbehorende bindingsextensie zijn geïnstalleerd voordat u het project uitvoert.

Met uitzondering van HTTP- en timertriggers worden bindingen geïmplementeerd als uitbreidingspakketten. Als u het Azure OpenAI-extensiepakket wilt toevoegen aan uw project, voert u de opdracht Dotnet Add Package uit in het Terminal-venster :

dotnet add package Microsoft.Azure.Functions.Worker.Extensions.OpenAI --prerelease

5. Werk de uitbreidingsbundel bij

Als u toegang wilt krijgen tot de Preview Azure OpenAI-bindingen, moet u een preview-versie van de extensiebundel gebruiken die deze extensie bevat.

Vervang de extensionBundle instelling in uw huidige host.json bestand door deze JSON:

 "extensionBundle": {
   "id": "Microsoft.Azure.Functions.ExtensionBundle.Preview",
   "version": "[4.*, 5.0.0)"
 }

U kunt nu de Azure OpenAI-uitvoerbinding in uw project gebruiken.

6. Retourneer tekstvoltooiing van het model

Met de code die u toevoegt, wordt een whois HTTP-functie-eindpunt in uw bestaande project gemaakt. In deze functie worden gegevens die zijn doorgegeven in een URL-parameter name van een GET-aanvraag gebruikt om dynamisch een voltooiingsprompt te maken. Deze dynamische prompt is gebonden aan een invoerbinding voor tekstvoltooiing, die een antwoord van het model retourneert op basis van de prompt. De voltooiing van het model wordt geretourneerd in het HTTP-antwoord.

  1. Voeg in uw bestaande HttpExample klassebestand deze using instructie toe:

    using Microsoft.Azure.Functions.Worker.Extensions.OpenAI.TextCompletion;
    
  2. Voeg in hetzelfde bestand deze code toe waarmee een nieuw HTTP-triggereindpunt wordt gedefinieerd met de naam whois:

    [Function(nameof(WhoIs))]
    public IActionResult WhoIs([HttpTrigger(AuthorizationLevel.Function, Route = "whois/{name}")] HttpRequest req,
    [TextCompletionInput("Who is {name}?", Model = "%CHAT_MODEL_DEPLOYMENT_NAME%")] TextCompletionResponse response)
    {
        if(!String.IsNullOrEmpty(response.Content))
        {
            return new OkObjectResult(response.Content);
        }
        else
        {
            return new NotFoundObjectResult("Something went wrong.");
        }
    }
    
  1. Werk het pom.xml projectbestand bij om deze verwijzing naar de properties verzameling toe te voegen:

    <azure-functions-java-library-openai>0.3.0-preview</azure-functions-java-library-openai>
    
  2. Voeg in hetzelfde bestand deze afhankelijkheid toe aan de dependencies verzameling:

    <dependency>
        <groupId>com.microsoft.azure.functions</groupId>
        <artifactId>azure-functions-java-library-openai</artifactId>
        <version>${azure-functions-java-library-openai}</version>
    </dependency>
    
  3. Voeg in het bestaande Function.java projectbestand de volgende import instructies toe:

    import com.microsoft.azure.functions.openai.annotation.textcompletion.TextCompletion;
    import com.microsoft.azure.functions.openai.annotation.textcompletion.TextCompletionResponse;
    
  4. Voeg in hetzelfde bestand deze code toe waarmee een nieuw HTTP-triggereindpunt wordt gedefinieerd met de naam whois:

    @FunctionName("WhoIs")
    public HttpResponseMessage whoIs(
        @HttpTrigger(
            name = "req", 
            methods = {HttpMethod.GET},
            authLevel = AuthorizationLevel.ANONYMOUS, 
            route = "whois/{name}") 
            HttpRequestMessage<Optional<String>> request,
        @BindingName("name") String name,
        @TextCompletion(prompt = "Who is {name}?", model = "%CHAT_MODEL_DEPLOYMENT_NAME%", name = "response") TextCompletionResponse response,
        final ExecutionContext context) {
        return request.createResponseBuilder(HttpStatus.OK)
            .header("Content-Type", "application/json")
            .body(response.getContent())
            .build();
    }
    
  1. Druk in Visual Studio Code op F1 en selecteer in het opdrachtpalettype Azure Functions: Create Function...de HTTP-trigger, typ de naam whoisvan de functie en druk op Enter.

  2. Vervang in het nieuwe whois.js codebestand de inhoud van het bestand door deze code:

    const { app, input } = require("@azure/functions");
    
    // This OpenAI completion input requires a {name} binding value.
    const openAICompletionInput = input.generic({
        prompt: 'Who is {name}?',
        maxTokens: '100',
        type: 'textCompletion',
        model: '%CHAT_MODEL_DEPLOYMENT_NAME%'
    })
    
    app.http('whois', {
        methods: ['GET'],
        route: 'whois/{name}',
        authLevel: 'function',
        extraInputs: [openAICompletionInput],
        handler: async (_request, context) => {
            var response = context.extraInputs.get(openAICompletionInput)
            return { body: response.content.trim() }
        }
    });
    
  1. Druk in Visual Studio Code op F1 en selecteer in het opdrachtpalettype Azure Functions: Create Function...de HTTP-trigger, typ de naam whoisvan de functie en druk op Enter.

  2. Vervang in het nieuwe whois.ts codebestand de inhoud van het bestand door deze code:

    import { app, input } from "@azure/functions";
    
    // This OpenAI completion input requires a {name} binding value.
    const openAICompletionInput = input.generic({
        prompt: 'Who is {name}?',
        maxTokens: '100',
        type: 'textCompletion',
        model: '%CHAT_MODEL_DEPLOYMENT_NAME%'
    })
    
    app.http('whois', {
        methods: ['GET'],
        route: 'whois/{name}',
        authLevel: 'function',
        extraInputs: [openAICompletionInput],
        handler: async (_request, context) => {
            var response: any = context.extraInputs.get(openAICompletionInput)
            return { body: response.content.trim() }
        }
    });
    
  1. Voeg in het bestaande function_app.py projectbestand deze import instructie toe:

    import json
    
  2. Voeg in hetzelfde bestand deze code toe waarmee een nieuw HTTP-triggereindpunt wordt gedefinieerd met de naam whois:

    @app.route(route="whois/{name}", methods=["GET"])
    @app.text_completion_input(arg_name="response", prompt="Who is {name}?", max_tokens="100", model = "%CHAT_MODEL_DEPLOYMENT_NAME%")
    def whois(req: func.HttpRequest, response: str) -> func.HttpResponse:
        response_json = json.loads(response)
        return func.HttpResponse(response_json["content"], status_code=200)
    
    
    @app.route(route="genericcompletion", methods=["POST"])
    @app.text_completion_input(arg_name="response", prompt="{Prompt}", model = "%CHAT_MODEL_DEPLOYMENT_NAME%")
    def genericcompletion(req: func.HttpRequest, response: str) -> func.HttpResponse:
        response_json = json.loads(response)
        return func.HttpResponse(response_json["content"], status_code=200)
    
  1. Druk in Visual Studio Code op F1 en selecteer in het opdrachtpalettype Azure Functions: Create Function...de HTTP-trigger, typ de naam whoisvan de functie, selecteer Anoniem en druk op Enter.

  2. Open het nieuwe whois/function.json codebestand en vervang de inhoud door deze code, waarmee een definitie voor de TextCompletionResponse invoerbinding wordt toegevoegd:

    {
      "bindings": [
        {
          "authLevel": "function",
          "type": "httpTrigger",
          "direction": "in",
          "name": "Request",
          "route": "whois/{name}",
          "methods": [
            "get"
          ]
        },
        {
          "type": "http",
          "direction": "out",
          "name": "Response"
        },
        {
          "type": "textCompletion",
          "direction": "in",
          "name": "TextCompletionResponse",
          "prompt": "Who is {name}?",
          "maxTokens": "100",
          "model": "%CHAT_MODEL_DEPLOYMENT_NAME%"
        }
      ]
    }
    
  3. Vervang de inhoud van het whois/run.ps1 codebestand door deze code, die het antwoord van de invoerbinding retourneert:

    using namespace System.Net
    
    param($Request, $TriggerMetadata, $TextCompletionResponse)
    
    Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
            StatusCode = [HttpStatusCode]::OK
            Body       = $TextCompletionResponse.Content
        })
    

7. Voer de functie uit

  1. Druk in Visual Studio Code op F1 en in het opdrachtpalettype Azurite: Start en druk op Enter om de Emulator voor de Opslag van Azurite te starten.

  2. Druk op F5 om het functie-app-project en Core Tools te starten in de foutopsporingsmodus.

  3. Als de Core Tools worden uitgevoerd, verzendt u een GET-aanvraag naar de whois eindpuntfunctie, met een naam in het pad, zoals deze URL:

    http://localhost:7071/api/whois/<NAME>

    Vervang de <NAME> tekenreeks door de waarde die u aan de "Who is {name}?" prompt wilt doorgeven. De <NAME> naam moet de url-gecodeerde naam van een openbare afbeelding zijn, zoals Abraham%20Lincoln.

    Het antwoord dat u ziet, is het antwoord op het voltooien van de tekst van uw Azure OpenAI-model.

  4. Nadat een antwoord is geretourneerd, drukt u op Ctrl+C om Core Tools te stoppen.

8. Resources opschonen

In Azure verwijzen Resources naar functie-apps, functies, opslagaccounts enzovoort. Deze zijn gegroepeerd in resourcegroepen. U kunt alle resources in een groep verwijderen door de groep zelf te verwijderen.

U hebt resources gemaakt om deze snelstartgidsen te voltooien. Er kunnen kosten in rekening worden gebracht voor deze resources, afhankelijk van de status van uw account en de serviceprijzen. Als u de resources niet meer nodig hebt, kunt u ze als volgt verwijderen:

  1. Druk in Visual Studio Code op F1 om het opdrachtenpalet te openen. In het opdrachtenpalet zoekt en selecteert u Azure: Open in portal.

  2. Kies uw functie-app en druk op Enter. De functie-app wordt geopend in de Azure-portal.

  3. Selecteer op het tabblad Overzicht de benoemde koppeling naast Resourcegroep.

    Schermopname van het selecteren van de resourcegroep die u wilt verwijderen van de pagina van de functie-app.

  4. Controleer op de pagina Resourcegroep de lijst met opgenomen resources en controleer of ze de resources zijn die u wilt verwijderen.

  5. Selecteer Resourcegroep verwijderen en volg de instructies.

    Verwijderen kan enkele minuten duren. Wanneer dit is voltooid, verschijnt een aantal seconden een melding in beeld. U kunt ook het belpictogram bovenaan de pagina selecteren om de melding te bekijken.