Delen via


Een AI-chat-app bouwen met .NET

Ga aan de slag met OpenAI en Semantic Kernel door een eenvoudige .NET 8-console-chattoepassing te maken. De toepassing wordt lokaal uitgevoerd en gebruikt het OpenAI-model gpt-3.5-turbo . Volg deze stappen om toegang te krijgen tot OpenAI en leer hoe u Semantische kernel gebruikt.

Vereisten

  • .NET 8.0 SDK : installeer de .NET 8.0 SDK.
  • Een API-sleutel van OpenAI , zodat u dit voorbeeld kunt uitvoeren.
  • In Windows is PowerShell v7+ vereist. Als u uw versie wilt valideren, voert u deze uit pwsh in een terminal. De huidige versie moet worden geretourneerd. Als er een fout wordt geretourneerd, voert u de volgende opdracht uit: dotnet tool update --global PowerShell.

Ga aan de slag met OpenAI en Semantic Kernel door een eenvoudige .NET 8-console-chattoepassing te maken. De toepassing wordt lokaal uitgevoerd en maakt verbinding met het OpenAI-model gpt-35-turbo dat is geïmplementeerd in Azure OpenAI. Volg deze stappen om Azure OpenAI in te richten en te leren hoe u Semantische kernel gebruikt.

Vereisten

  • .NET 8 SDK - Installeer de .NET 8 SDK.
  • Een Azure-abonnement: maak er gratis een.
  • Azure Developer CLI: de Azure Developer CLI installeren of bijwerken.
  • Toegang tot de Azure OpenAI-service.
  • In Windows is PowerShell v7+ vereist. Als u uw versie wilt valideren, voert u deze uit pwsh in een terminal. De huidige versie moet worden geretourneerd. Als er een fout wordt geretourneerd, voert u de volgende opdracht uit: dotnet tool update --global PowerShell.

Het voorbeeldproject ophalen

Kloon de GitHub-opslagplaats die de voorbeeld-apps voor alle quickstarts bevat:

git clone https://github.com/dotnet/ai-samples.git

De Azure OpenAI-service maken

De GitHub-voorbeeldopslagplaats is gestructureerd als een Azure Developer CLI-sjabloon (azd) die azd kan worden gebruikt om de Azure OpenAI-service en het model voor u in te richten.

  1. Navigeer vanuit een terminal of opdrachtprompt naar de map src\quickstarts\azure-openai van de voorbeeldopslagplaats.

  2. Voer de azd up opdracht uit om de Azure OpenAI-resources in te richten. Het kan enkele minuten duren voordat de Azure OpenAI-service is gemaakt en het model is geïmplementeerd.

    azd up
    

    azd configureert ook de vereiste gebruikersgeheimen voor de voorbeeld-app, zoals de OpenAI-toegangssleutel.

    Notitie

    Als er een fout optreedt tijdens de azd up implementatie, gaat u naar de sectie probleemoplossing .

Probeer het HikerAI-voorbeeld

  1. Navigeer vanuit een terminal of opdrachtprompt naar de openai\02-HikerAI map.

  2. Voer de volgende opdrachten uit om uw OpenAI API-sleutel als geheim te configureren voor de voorbeeld-app:

    dotnet user-secrets init
    dotnet user-secrets set OpenAIKey <your-openai-key>
    
  3. Gebruik de dotnet run opdracht om de app uit te voeren:

    dotnet run
    
  1. Navigeer vanuit een terminal of opdrachtprompt naar de azure-openai\02-HikerAI map.

  2. Gebruik de dotnet run opdracht om de app uit te voeren:

    dotnet run
    

    Tip

    Als er een foutbericht wordt weergegeven, zijn de Azure OpenAI-resources mogelijk nog niet geïmplementeerd. Wacht een paar minuten en probeer het opnieuw.

De code verkennen

De app gebruikt het Microsoft.SemanticKernel pakket om aanvragen naar de OpenAI-service te verzenden en te ontvangen.

De app-code bevindt zich in het Program.cs-bestand . De eerste regels met configuratiewaarden voor codesets en ophalen de OpenAI-sleutel die eerder is ingesteld met behulp van de dotnet user-secrets opdracht.

var config = new ConfigurationBuilder().AddUserSecrets<Program>().Build();
string model = "gpt-3.5-turbo";
string key = config["OpenAIKey"];

De OpenAIChatCompletionService service faciliteert de aanvragen en antwoorden.

// Create the OpenAI Chat Completion Service
OpenAIChatCompletionService service = new(model, key);

De code verkennen

De toepassing gebruikt het pakket voor het Microsoft.SemanticKernel verzenden en ontvangen van aanvragen naar een Azure OpenAI-service die is geïmplementeerd in Azure.

De hele toepassing bevindt zich in het Program.cs-bestand . Met de eerste regels code worden de geheimen en configuratiewaarden opgehaald die tijdens het inrichten van de toepassing voor u zijn ingesteld dotnet user-secrets .

// Retrieve the local secrets saved during the Azure deployment
var config = new ConfigurationBuilder().AddUserSecrets<Program>().Build();
string endpoint = config["AZURE_OPENAI_ENDPOINT"];
string deployment = config["AZURE_OPENAI_GPT_NAME"];
string key = config["AZURE_OPENAI_KEY"];

De AzureOpenAIChatCompletionService service faciliteert de aanvragen en antwoorden.

// Create the Azure OpenAI Chat Completion Service
AzureOpenAIChatCompletionService service = new(deployment, endpoint, key);

Voeg een systeemprompt toe om meer context te bieden aan het model, wat invloed heeft op het gedrag van het model en de gegenereerde voltooiingen tijdens het gesprek.

// Start the conversation with context for the AI model
ChatHistory chatHistory = new("""
    You are a hiking enthusiast who helps people discover fun hikes in their area. 
    You are upbeat and friendly. You introduce yourself when first saying hello.
    When helping people out, you always ask them for this information
    to inform the hiking recommendation you provide:

    1. Where they are located
    2. What hiking intensity they are looking for

    You will then provide three suggestions for nearby hikes that vary in length
    after you get that information. You will also share an interesting fact about
    the local nature on the hikes when making a recommendation.
    """);

Voeg een gebruikersbericht toe aan de chatgeschiedenis met behulp van de AddUserMessage functie. Gebruik de GetChatMessageContentAsync functie om het model te instrueren om een antwoord te genereren op basis van de systeemprompt en de gebruikersaanvraag.


// Add user message to chat history
chatHistory.AddUserMessage("Hi! Apparently you can help me find a hike that I will like?");

// Print User Message to console
Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last().Content}");

// Get response
var response = await service.GetChatMessageContentAsync(
    chatHistory, new OpenAIPromptExecutionSettings() { MaxTokens = 400 });

Voeg het antwoord van de modus toe om de chatgeschiedenis te behouden.

// Add response to chat history
chatHistory.Add(response);

// Print Response to console
Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last().Content}");

Pas de systeemprompt en het gebruikersbericht aan om te zien hoe het model reageert om u te helpen een wandeling te vinden die u leuk vindt.

Resources opschonen

Verwijder de bijbehorende implementatie en alle resources wanneer u de voorbeeldtoepassing of resources niet meer nodig hebt.

azd down

Problemen oplossen

In Windows krijgt u mogelijk de volgende foutberichten nadat u deze hebt uitgevoerd azd up:

postprovision.ps1 is niet digitaal ondertekend. Het script wordt niet uitgevoerd op het systeem

Het script postprovision.ps1 wordt uitgevoerd om de .NET-gebruikersgeheimen in te stellen die in de toepassing worden gebruikt. Voer de volgende PowerShell-opdracht uit om deze fout te voorkomen:

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass

Voer vervolgens de azd up opdracht opnieuw uit.

Een andere mogelijke fout:

'pwsh' wordt niet herkend als een interne of externe opdracht, beveiligbaar programma of batchbestand. WAARSCHUWING: 'postprovision' hook is mislukt met afsluitcode: '1', Pad: '.\infra\post-script\postprovision.ps1'. : afsluitcode: 1 uitvoering wordt voortgezet omdat ContinueOnError is ingesteld op true.

Het script postprovision.ps1 wordt uitgevoerd om de .NET-gebruikersgeheimen in te stellen die in de toepassing worden gebruikt. U kunt deze fout voorkomen door het script handmatig uit te voeren met behulp van de volgende PowerShell-opdracht:

.\infra\post-script\postprovision.ps1

De .NET AI-apps hebben nu de gebruikersgeheimen geconfigureerd en kunnen worden getest.

Volgende stappen