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 uitpwsh
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 uitpwsh
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.
Navigeer vanuit een terminal of opdrachtprompt naar de map src\quickstarts\azure-openai van de voorbeeldopslagplaats.
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
Navigeer vanuit een terminal of opdrachtprompt naar de
openai\02-HikerAI
map.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>
Gebruik de
dotnet run
opdracht om de app uit te voeren:dotnet run
Navigeer vanuit een terminal of opdrachtprompt naar de
azure-openai\02-HikerAI
map.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.