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
- Voer de stappen in deel 1 van de Visual Studio Code-snelstartgids.
- Voer de stappen in deel 1 van de Visual Studio Code-snelstartgids.
- Voer de stappen in deel 1 van de Visual Studio Code-snelstartgids.
- Voer de stappen in deel 1 van de Visual Studio Code-snelstartgids.
- Voer de stappen in deel 1 van de Visual Studio Code-snelstartgids.
- Voer de stappen in deel 1 van de Visual Studio Code-snelstartgids.
- 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.
- .NET Core CLI-hulpprogramma's installeren.
- 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.
Meld u aan met uw Azure-abonnement in Azure Portal.
Selecteer Een resource maken en zoek naar De Azure OpenAI. Wanneer u de service zoekt, selecteert u Maken.
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 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.
Selecteer Volgende een laatste keer om naar de laatste fase in het proces te gaan: Beoordelen en verzenden.
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.
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:
Meld u aan bij Azure OpenAI Studio.
Kies het abonnement en de Azure OpenAI-resource die u hebt gemaakt en selecteer Resource gebruiken.
Selecteer Implementaties onder Beheer.
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.
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
Open in Visual Studio Code het lokale codeproject dat u hebt gemaakt toen u het vorige artikel hebt voltooid.
Werk in het bestand local.settings.json in de hoofdmap van het project de
AzureWebJobsStorage
instelling bij naarUseDevelopmentStorage=true
. U kunt deze stap overslaan als deAzureWebJobsStorage
instelling in local.settings.json is ingesteld op de verbindingsreeks voor een bestaand Azure Storage-account in plaats vanUseDevelopmentStorage=true
.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.
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.
Voeg in uw bestaande
HttpExample
klassebestand dezeusing
instructie toe:using Microsoft.Azure.Functions.Worker.Extensions.OpenAI.TextCompletion;
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."); } }
Werk het
pom.xml
projectbestand bij om deze verwijzing naar deproperties
verzameling toe te voegen:<azure-functions-java-library-openai>0.3.0-preview</azure-functions-java-library-openai>
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>
Voeg in het bestaande
Function.java
projectbestand de volgendeimport
instructies toe:import com.microsoft.azure.functions.openai.annotation.textcompletion.TextCompletion; import com.microsoft.azure.functions.openai.annotation.textcompletion.TextCompletionResponse;
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(); }
Druk in Visual Studio Code op F1 en selecteer in het opdrachtpalettype
Azure Functions: Create Function...
de HTTP-trigger, typ de naamwhois
van de functie en druk op Enter.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() } } });
Druk in Visual Studio Code op F1 en selecteer in het opdrachtpalettype
Azure Functions: Create Function...
de HTTP-trigger, typ de naamwhois
van de functie en druk op Enter.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() } } });
Voeg in het bestaande
function_app.py
projectbestand dezeimport
instructie toe:import json
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)
Druk in Visual Studio Code op F1 en selecteer in het opdrachtpalettype
Azure Functions: Create Function...
de HTTP-trigger, typ de naamwhois
van de functie, selecteer Anoniem en druk op Enter.Open het nieuwe
whois/function.json
codebestand en vervang de inhoud door deze code, waarmee een definitie voor deTextCompletionResponse
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%" } ] }
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
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.Druk op F5 om het functie-app-project en Core Tools te starten in de foutopsporingsmodus.
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, zoalsAbraham%20Lincoln
.Het antwoord dat u ziet, is het antwoord op het voltooien van de tekst van uw Azure OpenAI-model.
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:
Druk in Visual Studio Code op F1 om het opdrachtenpalet te openen. In het opdrachtenpalet zoekt en selecteert u
Azure: Open in portal
.Kies uw functie-app en druk op Enter. De functie-app wordt geopend in de Azure-portal.
Selecteer op het tabblad Overzicht de benoemde koppeling naast Resourcegroep.
Controleer op de pagina Resourcegroep de lijst met opgenomen resources en controleer of ze de resources zijn die u wilt verwijderen.
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.