Oefening: de .NET SDK voor Azure OpenAI installeren en uw eerste app maken

Voltooid

Nu we inzicht hebben in tekst- en chatvoltooiingen, gaan we een basistoepassing maken die ze gebruikt.

U werkt voor een organisatie die wandelaars helpt de buitenlucht te verkennen door paden aan te bevelen. U overweegt om een conversationele AI toe te voegen aan de aanbevelingsfunctionaliteit en een prototype te maken.

U besluit dat u de CHAT-voltooiings-API moet gebruiken die wordt geleverd door het GPT-35-Turbo-model.

De Azure OpenAI-resource maken

De eerste stap is het maken van de Azure OpenAI-resource en het implementeren van het model. In deze oefening gaan we het TURBO-model GPT-3 gebruiken. Zoals u in de documentatie ziet, maakt GPT-3.5 Turbo gebruik van de API voor chatvoltooiingen en is dit handig voor onze use-case.

Vereisten

  • Een Azure-abonnement

  • Toegang verleend aan Azure OpenAI in het gewenste abonnement

    Op dit moment wordt alleen toegang tot deze service verleend door een aanvraag te doen. U kunt toegang tot Azure OpenAI aanvragen door het formulier in te vullen op https://aka.ms/oai/access.

  • Azure CLI is geïnstalleerd

Een resource maken en een model implementeren

Het maken van de resource en het implementeren van het model is een proces met meerdere stappen. Gebruik de Azure CLI omdat dit sneller kan zijn dan het gebruik van Azure Portal. Houd er rekening mee dat u de Azure-portal kunt gebruiken als u dat wilt.

  1. Voer de az login opdracht uit om u aan te melden als u dat nog niet hebt gedaan.

  2. Wanneer u een nieuwe Azure-resource maakt, kunt u een nieuwe resourcegroep maken of een bestaande resourcegroep gebruiken. Deze opdracht laat zien hoe u een nieuwe resourcegroep maakt. Gebruik de naam HikingConversations-RG , maar u kunt de naam van uw keuze vervangen of de naam van een bestaande groep gebruiken.

    az group create \
    --name HikingConversations-RG \
    --location eastus
    
    az group create `
    --name HikingConversations-RG `
    --location eastus
    
  3. Voer de volgende opdracht uit om een OpenAI-resource te maken in de resourcegroep HikingConversations-RG . Noem de OpenAI-resource HikingConversationsAI.

    az cognitiveservices account create \
    -n HikingConversationsAI \
    -g HikingConversations-RG \
    -l eastus \
    --kind OpenAI \
    --sku s0
    
    az cognitiveservices account create `
    -n HikingConversationsAI `
    -g HikingConversations-RG `
    -l eastus `
    --kind OpenAI `
    --sku s0
    
  4. Vervolgens willen we het GPT-35-Turbo-model implementeren in de OpenAI-resource die we hebben gemaakt. Roep de modelimplementatie HikingRecommendationTurbo aan. Let op: we gebruiken HikingConversations-RG als de naam van de resourcegroep, HikingConversationsAI als de OpenAI-resourcenaam, als u verschillende waarden hebt gebruikt, zorg ervoor dat u deze waarden vervangt.

    az cognitiveservices account deployment create \
    -g HikingConversations-RG \
    -n HikingConversationsAI \
    --deployment-name HikingRecommendationTurbo \
    --model-name gpt-35-turbo \
    --model-version "0301" \
    --model-format OpenAI \
    --scale-settings-scale-type "Standard"
    
    az cognitiveservices account deployment create `
    -g HikingConversations-RG `
    -n HikingConversationsAI `
    --deployment-name HikingRecommendationTurbo `
    --model-name gpt-35-turbo `
    --model-version "0301" `
    --model-format OpenAI `
    --scale-settings-scale-type "Standard"
    
  5. Zodra de resource en het model zijn gemaakt, moeten we de basis-URL en toegangssleutels ophalen, zodat de .NET SDK toegang heeft tot de Azure OpenAI-resource. Gebruik deze opdrachten om het eindpunt en de primaire API-sleutels op te halen en noteer deze voor later gebruik:

    Het eindpunt

    az cognitiveservices account show \
    -g HikingConversations-RG \
    -n HikingConversationsAI \
    --query "properties.endpoint"
    
    az cognitiveservices account show `
    -g HikingConversations-RG `
    -n HikingConversationsAI `
    --query "properties.endpoint"
    

    De primaire API-sleutel

    az cognitiveservices account keys list \
    -g HikingConversations-RG \
    -n HikingConversationsAI \
    --query "key1"
    
    az cognitiveservices account keys list `
    -g HikingConversations-RG `
    -n HikingConversationsAI `
    --query "key1"
    

De consoletoepassing maken en de OpenAI SDK toevoegen

Vervolgens willen we een .NET Console-toepassing met lege botten maken en de Azure OpenAI SDK toevoegen.

  1. Voer de volgende opdracht uit om een nieuwe .NET-toepassing met de naam HikingConversationsAI te maken.

    dotnet new console -n HikingConversationsAI
    
  2. Schakel over naar de zojuist gemaakte map HikingConversationsAI .

    cd HikingConversationsAI
    
  3. Voeg vervolgens de Azure Open AI SDK toe.

    dotnet add package Azure.AI.OpenAI --prerelease
    
  4. Open het project in VS Code of Visual Studio.

  5. Verwijder in het bestand Program.cs alle bestaande code.

  6. Voeg using Azure.AI.OpenAI; toe aan het begin van Program.cs.

  7. Voeg using Azure; toe aan het begin van Program.cs.

  8. Voeg drie variabelen op klasseniveau toe die verwijzingen bevatten naar het eindpunt van de Azure OpenAI-resource, de primaire API-sleutel en de naam van het model dat u hebt geïmplementeerd.

    string openAIEndpoint = "<YOUR ENDPOINT URL VALUE>";
    string openAIAPIKey = "<YOUR PRIMARY API KEY VALUE>";
    string openAIDeploymentName = "HikingRecommendationTurbo";
    

    In de bovenstaande stappen hebben we de implementatie HikingRecommendationTurbo genoemd, als u een andere waarde hebt gebruikt, zorg ervoor dat u dat in plaats daarvan gebruikt.

  9. Ten slotte instantieert u de klasse die nodig is om te communiceren met de Azure OpenAI-resource.

    var endpoint = new Uri(openAIEndpoint);
    var credentials = new AzureKeyCredential(openAIAPIKey);
    var openAIClient = new AzureOpenAIClient(endpoint, credentials);
    

De systeemprompt maken

Laten we de eerste systeemrolprompt maken die de eerste instructies voor het model geeft.

  1. Maak eerst de prompt waarmee het model wordt geïnstrueerd hoe u dit tijdens het gesprek wilt laten optreden wanneer u wandelingen aanbeveelt.

    var systemPrompt = 
    """
    You are a hiking enthusiast who helps people discover fun hikes. You are upbeat and friendly. 
    You ask people what type of hikes they like to take and then suggest some.
    """;
    
  2. Maak vervolgens een List<ChatMessage> bestand met alle berichten die naar en van het model worden verzonden.

    List<ChatMessage> chatHistory = new();
    
  3. Maak vervolgens een nieuw SystemChatMessage object en voeg het toe aan de chatHistory lijst. We stellen de ChatMessage instelling in die afkomstig is van de systeemrol.

    SystemChatMessage systemMessage = ChatMessage.CreateSystemMessage(systemPrompt);
    
    chatHistory.Add(systemMessage);
    

Het gesprek starten

Vervolgens sturen we het eerste bericht naar het model, waardoor het gesprek wordt gestart.

  1. Maak een prompt voor de gebruiker en voeg deze toe aan het chatHistory bericht van de gebruiker.

    string userGreeting = """
    Hi there hiking recommendation bot! 
    Can't wait to hear what you have in store for me!
    """;
    
    UserChatMessage userGreetingMessage = ChatMessage.CreateUserMessage(userGreeting);
    chatHistory.Add(userGreetingMessage);
    
    Console.WriteLine($"User >>> {userGreeting}");
    
  2. Nu moet u een verwijzing naar het ChatClient object ophalen. Dit object is verantwoordelijk voor het faciliteren van chatgesprekken met het model. Als zodanig moet u het Azure OpenAI-clientobject vertellen welk model u hebt geïmplementeerd dat u wilt gebruiken.

    var chatClient = openAIClient.GetChatClient(openAIDeploymentName);
    
  3. Roep vervolgens de CompleteChatAsync functie aan van de ChatClient klasse die in de chatHistoryklasse wordt doorgegeven.

    var response = await chatClient.CompleteChatAsync(chatHistory);
    
  4. Lees ten slotte de waarde die het model heeft geretourneerd.

    Console.WriteLine($"AI >>> {response.Value.Content.Last().Text}");
    
  5. Laten we eens kijken wat we tot nu toe hebben. U kunt de toepassing uitvoeren door de terminal in te voeren dotnet run .

  6. Experimenteer door de waarde van het userGreetingMessagemodel te wijzigen om te zien hoe het model anders kan reageren.

In één voorbeelduitvoering hebben we het volgende ontvangen:

Hello! Great to hear from you. What type of hikes are you interested in? Do you enjoy easy scenic walks, challenging trails, or something in between? Do you prefer hikes with waterfalls, mountain views, or unique geological formations?

Mogelijk ontvangt u iets anders omdat het model niet-deterministisch is of een andere uitvoer kan produceren, zelfs met dezelfde invoer.

Doorgaan met het gesprek

Laten we doorgaan door te reageren op het gesprek en vervolgens het antwoord uit te voeren.

  1. Zorg ervoor dat we de context van het gesprek behouden, dus voeg het antwoord toe dat rechtstreeks aan de chatHistory lijst is teruggekomen.

    var assistantMessage = ChatMessage.CreateAssistantMessage(response.Value.Content.Last().Text);
    
    chatHistory.Add(assistantMessage); 
    
  2. Maak vervolgens een andere gebruikersprompt en verzend deze naar het model.

    var hikeRequest = 
    """
    I would like a strenuous hike near where I live that ends with
    a view that is amazing.
    """;
    
    Console.WriteLine($"User >>> {hikeRequest}");
    
    UserChatMessage hikeMessage = ChatMessage.CreateUserMessage(hikeRequest);
    
    chatHistory.Add(hikeMessage);
    
    response = await chatClient.CompleteChatAsync(chatHistory); 
    
    Console.WriteLine($"AI >>> {response.Value.Content.Last().Text}");
    
  3. U kunt experimenteren door de hikeRequest variabele te wijzigen om verschillende soorten wandelingen aan te vragen. In één voorbeelduitvoering hebben we het volgende ontvangen:

    Great choice! If you're up for a challenge, I recommend checking out the hike to Poo Poo Point in Issaquah, Washington. The hike is 7.2 miles roundtrip, with an elevation gain of 1,858 feet, so it's definitely a workout. But the stunning views of Mount Rainier and the Cascade Mountains make it all worthwhile. Plus, you'll get to see paragliders taking off from Poo Poo Point. It's a popular hike, so I recommend going early to avoid crowds. Let me know if you need more information!
    

Samenvatting

We kunnen nu de Azure OpenAI SDK gebruiken, samen met het gpt-35-turbo model om gesprekken te maken die u helpen bij het bieden van aanbevelingen voor wandelen. Laten we nu eens kijken hoe we de prompts die we naar het model verzenden, kunnen verbeteren.