Freigeben über


Zusammenfassen von Text mithilfe der Azure KI-Chat-App mit .NET

Erste Schritte mit Semantic Kernel durch Erstellen einer einfachen .NET 8-Chat-Konsolenanwendung. Die Anwendung wird lokal ausgeführt und verwendet das in einem Azure OpenAI-Konto bereitgestellte gpt-35-turbo-OpenAI-Modell. Führen Sie die folgenden Schritte aus, um Azure OpenAI bereitzustellen und zu erfahren, wie Sie Semantic Kernel verwenden.

Erste Schritte mit dem .NET Azure OpenAI SDK durch Erstellen einer einfachen .NET 8-Chat-Konsolenanwendung. Die Anwendung wird lokal ausgeführt und verwendet das in einem Azure OpenAI-Konto bereitgestellte gpt-35-turbo-OpenAI-Modell. Führen Sie die folgenden Schritte aus, um Azure OpenAI bereitzustellen und zu erfahren, wie Sie das .NET Azure OpenAI SDK verwenden.

Voraussetzungen

Bereitstellen der Azure-Ressourcen

Stellen Sie sicher, dass Sie die Voraussetzungen erfüllen, um Zugriff auf Azure OpenAI Service sowie auf die Azure Developer CLI zu haben. Befolgen Sie dann den folgenden Leitfaden, um die ersten Schritte mit der Beispielanwendung zu machen.

  1. Klonen Sie das Repository dotnet/ai-samples.

  2. Navigieren Sie mithilfe eines Terminals oder einer Eingabeaufforderung zum Verzeichnis Schnellstart.

  3. Dadurch werden die Azure OpenAI-Ressourcen bereitgestellt. Es kann mehrere Minuten dauern, bis der Azure OpenAI-Dienst erstellt und das Modell bereitgestellt ist.

    azd up
    

Hinweis

Wenn Sie bereits über einen OpenAI-Dienst verfügen, können Sie die Bereitstellung überspringen und diesen Wert in der Datei Program.cs verwenden (vorzugsweise von einer IConfiguration).

Problembehandlung

Unter Windows werden nach dem Ausführen von azd up möglicherweise die folgenden Fehlermeldungen angezeigt:

postprovision.ps1 ist nicht digital signiert. Das Skript wird nicht auf dem System ausgeführt.

Das Skript postprovision.ps1 wird ausgeführt, um die in der Anwendung verwendeten .NET-Benutzergeheimnisse festzulegen. Führen Sie den folgenden PowerShell-Befehl aus, um diesen Fehler zu vermeiden:

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass

Führen Sie dann den azd up-Befehl erneut aus.

Ein weiterer möglicher Fehler:

„pwsh“ wird nicht als interner oder externer Befehle, als operierbare Programm- oder Batchdatei erkannt. WARNUNG: Fehler beim „postprovision“-Hook mit dem Ausgangscode: „1“, Pfad: „.\infra\post-script\postprovision.ps1“. : Exitcode: 1 Ausführung wird fortgesetzt, da ContinueOnError auf „true“ festgelegt wurde.

Das Skript postprovision.ps1 wird ausgeführt, um die in der Anwendung verwendeten .NET-Benutzergeheimnisse festzulegen. Um diesen Fehler zu vermeiden, führen Sie das Skript mithilfe des folgenden PowerShell-Befehls manuell aus:

.\infra\post-script\postprovision.ps1

Die .NET KI-Apps haben jetzt die geheimen Benutzerschlüssel konfiguriert und können getestet werden.

Testen der Beispielanwendung zum Zusammenfassen von Text (Hiking Benefits Summary)

  1. Navigieren Sie mithilfe eines Terminals oder einer Eingabeaufforderung zum Verzeichnis semantic-kernel\01-HikeBenefitsSummary.
  1. Navigieren Sie mithilfe eines Terminals oder einer Eingabeaufforderung zum Verzeichnis azure-openai-sdk\01-HikeBenefitsSummary.
  1. Es ist jetzt an der Zeit, die Konsolenanwendung auszuprobieren. Geben Sie Folgendes ein, um die App auszuführen:

    dotnet run
    

    Wenn Sie eine Fehlermeldung erhalten, ist die Bereitstellung der Azure OpenAI-Ressourcen möglicherweise noch nicht abgeschlossen. Warten Sie ein paar Minuten, und versuchen Sie es dann noch einmal.

Grundlegendes zum Code

Unsere Anwendung verwendet das Microsoft.SemanticKernel-Paket, das auf NuGetverfügbar ist, um Anforderungen an einen Azure OpenAI-Dienst, der in Azure bereitgestellt wird, zu senden und von ihm zu empfangen.

Die gesamte Anwendung ist in der Datei Program.cs enthalten. Mithilfe der ersten Codezeilen werden Geheimnisse und Konfigurationswerte geladen, die während der Anwendungsbereitstellung in dotnet user-secrets für Sie festgelegt wurden.

// == 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"];

// Create a Kernel containing the Azure OpenAI Chat Completion Service
Kernel kernel = Kernel.CreateBuilder()
    .AddAzureOpenAIChatCompletion(deployment, endpoint, key)
    .Build();

Die Kernel-Klasse unterstützt die Anforderungen und Antworten mit Hilfe vom AddAzureOpenAIChatCompletion-Dienst.

Kernel kernel = Kernel.CreateBuilder()
    .AddAzureOpenAIChatCompletion(deployment, endpoint, key)
    .Build();

Nachdem Kernel erstellt wurde, lesen wir den Inhalt der Datei benefits.md und erstellen prompt, um das Modell aufzufordern, diesen Text zusammenzufassen.

// Create and print out the prompt
string prompt = $"""
    Please summarize the the following text in 20 words or less:
    {File.ReadAllText("benefits.md")}
    """;
Console.WriteLine($"user >>> {prompt}");

Damit das Modell eine Antwort basierend auf prompt generiert, verwenden Sie die InvokePromptAsync-Funktion.

// Submit the prompt and print out the response
string response = await kernel.InvokePromptAsync<string>(prompt, new(new OpenAIPromptExecutionSettings() { MaxTokens = 400 }));
Console.WriteLine($"assistant >>> {response}");

Passen Sie den Textinhalt der Datei oder die Länge der Zusammenfassung an, um die Unterschiede in den Antworten anzuzeigen.

Grundlegendes zum Code

Unsere Anwendung verwendet das Azure.AI.OpenAI-Client-SDK, das auf NuGetverfügbar ist, um Anforderungen an einen Azure OpenAI-Dienst, der in Azure bereitgestellt wird, zu senden und von ihm zu empfangen.

Die gesamte Anwendung ist in der Datei Program.cs enthalten. Mithilfe der ersten Codezeilen werden Geheimnisse und Konfigurationswerte geladen, die während der Anwendungsbereitstellung in dotnet user-secrets für Sie festgelegt wurden.

// == Retrieve the local secrets saved during the Azure deployment ==========
var config = new ConfigurationBuilder()
    .AddUserSecrets<Program>()
    .Build();

string openAIEndpoint = config["AZURE_OPENAI_ENDPOINT"];
string openAIDeploymentName = config["AZURE_OPENAI_GPT_NAME"];
string openAiKey = config["AZURE_OPENAI_KEY"];

// == Creating the AIClient ==========
var endpoint = new Uri(openAIEndpoint);
var credentials = new AzureKeyCredential(openAiKey);

Die OpenAIClient-Klasse unterstützt die Anforderungen und Antworten. ChatCompletionOptions gibt Parameter an, wie das Modell reagieren wird.

var openAIClient = new OpenAIClient(endpoint, credentials);

var completionOptions = new ChatCompletionsOptions
{
    MaxTokens = 400,
    Temperature = 1f,
    FrequencyPenalty = 0.0f,
    PresencePenalty = 0.0f,
    NucleusSamplingFactor = 0.95f, // Top P
    DeploymentName = openAIDeploymentName
};

Nachdem der OpenAIClient-Client erstellt wurde, lesen Sie den Inhalt der Datei benefits.md. Anschließend können Sie mithilfe der ChatRequestUserMessage-Klasse dem Modell die Anforderung hinzufügen, um diesen Text zusammenzufassen.

string userRequest = """
Please summarize the the following text in 20 words or less:
""" + markdown;

completionOptions.Messages.Add(new ChatRequestUserMessage(userRequest));
Console.WriteLine($"\n\nUser >>> {userRequest}");

Verwenden Sie die GetChatCompletionsAsync-Funktion, damit das Modell eine Antwort basierend auf der Benutzeranforderung generiert.

ChatCompletions response = await openAIClient.GetChatCompletionsAsync(completionOptions);
ChatResponseMessage assistantResponse = response.Choices[0].Message;
Console.WriteLine($"\n\nAssistant >>> {assistantResponse.Content}");

Passen Sie den Textinhalt der Datei oder die Länge der Zusammenfassung an, um die Unterschiede in den Antworten anzuzeigen.

Bereinigen von Ressourcen

Wenn Sie die Beispielanwendung oder Ressourcen nicht mehr benötigen, entfernen Sie die entsprechende Bereitstellung und alle Ressourcen.

azd down

Nächste Schritte