Delen via


Inzicht krijgen in uw gegevens uit een .NET AI-chat-app

Aan de slag met AI-ontwikkeling met behulp van een .NET 8-console-app om verbinding te maken met een OpenAI-model gpt-3.5-turbo . U maakt verbinding met het AI-model met behulp van Semantic Kernel om wandelgegevens te analyseren en inzichten te bieden.

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.

Aan de slag met AI-ontwikkeling met behulp van een .NET 8-console-app om verbinding te maken met een OpenAI-model gpt-3.5-turbo dat is geïmplementeerd in Azure. U maakt verbinding met het AI-model met behulp van Semantic Kernel om wandelgegevens te analyseren en inzichten te bieden.

Vereisten

Het voorbeeldproject ophalen

De voorbeeldopslagplaats klonen

U kunt uw eigen app maken met behulp van de stappen in de volgende secties of u kunt de GitHub-opslagplaats klonen die de voltooide voorbeeld-apps voor alle quickstarts bevat. Als u Azure OpenAI wilt gebruiken, is de voorbeeldopslagplaats ook gestructureerd als een Azure Developer CLI-sjabloon waarmee u een Azure OpenAI-resource kunt inrichten.

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 src\quickstarts\azure-openai map 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 het Azure OpenAI-eindpunt en de modelnaam.

Probeer het voorbeeld van een wandelchat

  1. Navigeer vanuit een terminal of opdrachtprompt naar de src\quickstarts\openai\semantic-kernel\03-ChattingAboutMyHikes 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 semantic-kernel\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 toepassing gebruikt het pakket voor het Microsoft.SemanticKernel verzenden en ontvangen van aanvragen naar een OpenAI-service.

De hele toepassing bevindt zich in het Program.cs-bestand . De eerste verschillende regels codesetconfiguratiewaarden en haalt de OpenAI-sleutel op 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);

Zodra de OpenAIChatCompletionService client is gemaakt, leest de app de inhoud van het bestand hikes.md en gebruikt deze om meer context aan het model te bieden door een systeemprompt toe te voegen. Dit beïnvloedt het gedrag van het model en de gegenereerde voltooiingen tijdens het gesprek.

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 geheimen en configuratiewaarden geladen 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"];

De AzureOpenAIChatCompletionService service faciliteert de aanvragen en antwoorden.

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

Zodra de OpenAIChatCompletionService client is gemaakt, leest de app de inhoud van het bestand hikes.md en gebruikt deze om meer context aan het model te bieden door een systeemprompt toe te voegen. Dit beïnvloedt het gedrag van het model en de gegenereerde voltooiingen tijdens het gesprek.

// Provide context for the AI model
ChatHistory chatHistory = new($"""
    You are upbeat and friendly. You introduce yourself when first saying hello. 
    Provide a short answer only based on the user hiking records below:  

    {File.ReadAllText("hikes.md")}
    """);
Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last().Content}");

Met de volgende code wordt een gebruikersprompt aan het model toegevoegd met behulp van de AddUserMessage functie. Met GetChatMessageContentAsync de functie wordt het model geïnstrueerd om een antwoord te genereren op basis van de systeem- en gebruikersprompts.

// Start the conversation
chatHistory.AddUserMessage("Hi!");
Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last().Content}");

chatHistory.Add(
    await service.GetChatMessageContentAsync(
        chatHistory,
        new OpenAIPromptExecutionSettings()
        { 
            MaxTokens = 400 
        }));
Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last().Content}");

De app voegt het antwoord van het model toe aan het chatHistory om de chatgeschiedenis of context te behouden.

// Continue the conversation with a question.
chatHistory.AddUserMessage(
    "I would like to know the ratio of the hikes I've done in Canada compared to other countries.");

Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last().Content}");

chatHistory.Add(await service.GetChatMessageContentAsync(
    chatHistory,
    new OpenAIPromptExecutionSettings()
    { 
        MaxTokens = 400 
    }));

Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last().Content}");

Pas het systeem of de gebruikersprompts aan om verschillende vragen en context te bieden:

  • Hoe vaak heb ik gewandeld toen het regende?
  • Hoe vaak heb ik in 2021 gelopen?

Het model genereert een relevant antwoord op elke prompt op basis van uw invoer.

Resources opschonen

Wanneer u de voorbeeldtoepassing of resources niet meer nodig hebt, verwijdert u de bijbehorende implementatie en alle resources.

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