Freigeben über


Eine Antwort mit strukturiertem Output anfordern

In dieser Schnellstartanleitung erstellen Sie eine Chat-App, die eine Antwort mit strukturierter Ausgabe anfordert. Eine strukturierte Ausgabeantwort ist eine Chatantwort, die einen von Ihnen angegebenen Typ hat, anstelle von einfachem Text. Die chat-App, die Sie in dieser Schnellstartanleitung erstellen, analysiert die Stimmung verschiedener Produktbewertungen, kategorisiert jede Rezension entsprechend den Werten einer benutzerdefinierten Enumeration.

Voraussetzungen

Konfigurieren des KI-Diensts

Um eine Azure OpenAI Service-Instanz und ein Azure-Modell mithilfe des Azure-Portals bereitzustellen, führen Sie die Schritte im Artikel zum Erstellen und Bereitstellen einer Azure OpenAI Service-Ressource aus. Wählen Sie im Schritt "Modell bereitstellen" das gpt-4o Modell aus.

Erstellen der Chat-App

Führen Sie die folgenden Schritte aus, um eine Konsolen-App zu erstellen, die eine Verbindung mit dem gpt-4o KI-Modell herstellt.

  1. Navigieren Sie in einem Terminalfenster zu dem Verzeichnis, in dem Sie Ihre App erstellen möchten, und erstellen Sie eine neue Konsolen-App mit dem dotnet new Befehl:

    dotnet new console -o SOChat
    
  2. Navigieren Sie zum Verzeichnis SOChat, und fügen Sie Ihrer App die erforderlichen Pakete hinzu:

    dotnet add package Azure.AI.OpenAI
    dotnet add package Azure.Identity
    dotnet add package Microsoft.Extensions.AI
    dotnet add package Microsoft.Extensions.AI.OpenAI --prerelease
    dotnet add package Microsoft.Extensions.Configuration
    dotnet add package Microsoft.Extensions.Configuration.UserSecrets
    
  3. Führen Sie die folgenden Befehle aus, um App-Geheimnisse für Ihren Azure OpenAI-Endpunkt, den Modellnamen und die Mandanten-ID hinzuzufügen:

    dotnet user-secrets init
    dotnet user-secrets set AZURE_OPENAI_ENDPOINT <your-Azure-OpenAI-endpoint>
    dotnet user-secrets set AZURE_OPENAI_GPT_NAME gpt-4o
    dotnet user-secrets set AZURE_TENANT_ID <your-tenant-ID>
    

    Hinweis

    Je nach Umgebung ist die Mandanten-ID möglicherweise nicht erforderlich. Entfernen Sie es in diesem Fall aus dem Code, der das Instanziieren von DefaultAzureCredential.

  4. Öffnen Sie die neue App in Ihrem Editor der Wahl.

Hinzufügen des Codes

  1. Definieren Sie die Aufzählung, die die verschiedenen Stimmungen beschreibt.

    public enum Sentiment
    {
        Positive,
        Negative,
        Neutral
    }
    
  2. Erstellen Sie die IChatClient, die mit dem Modell kommuniziert.

    IConfigurationRoot config = new ConfigurationBuilder()
        .AddUserSecrets<Program>()
        .Build();
    
    string endpoint = config["AZURE_OPENAI_ENDPOINT"];
    string model = config["AZURE_OPENAI_GPT_NAME"];
    string tenantId = config["AZURE_TENANT_ID"];
    
    // Get a chat client for the Azure OpenAI endpoint.
    AzureOpenAIClient azureClient =
        new(
            new Uri(endpoint),
            new DefaultAzureCredential(new DefaultAzureCredentialOptions() { TenantId = tenantId }));
    IChatClient chatClient = azureClient
        .GetChatClient(deploymentName: model)
        .AsIChatClient();
    

    Hinweis

    DefaultAzureCredential sucht nach Anmeldedaten zur Authentifizierung aus Ihrer Umgebung oder lokalen Werkzeugen. Sie müssen die Azure AI Developer Rolle dem Konto zuweisen, das Sie zum Anmelden bei Visual Studio oder der Azure CLI verwendet haben. Weitere Informationen finden Sie unter Authentifizierung von Azure AI-Diensten mit .NET.

  3. Senden Sie eine Anforderung an das Modell mit einer einzelnen Produktbewertung, und geben Sie dann die analysierte Stimmung in der Konsole aus. Sie deklarieren den angeforderten strukturierten Ausgabetyp, indem Sie ihn als Typargument an die ChatClientStructuredOutputExtensions.GetResponseAsync<T>(IChatClient, String, ChatOptions, Nullable<Boolean>, CancellationToken) Erweiterungsmethode übergeben.

    string review = "I'm happy with the product!";
    var response = await chatClient.GetResponseAsync<Sentiment>($"What's the sentiment of this review? {review}");
    Console.WriteLine($"Sentiment: {response.Result}");
    

    Dieser Code erzeugt eine Ausgabe ähnlich wie:

    Sentiment: Positive
    
  4. Anstatt nur eine einzelne Rezension zu analysieren, können Sie eine Sammlung von Rezensionen analysieren.

    string[] inputs = [
        "Best purchase ever!",
        "Returned it immediately.",
        "Hello",
        "It works as advertised.",
        "The packaging was damaged but otherwise okay."
    ];
    
    foreach (var i in inputs)
    {
        var response2 = await chatClient.GetResponseAsync<Sentiment>($"What's the sentiment of this review? {i}");
        Console.WriteLine($"Review: {i} | Sentiment: {response2.Result}");
    }
    

    Dieser Code erzeugt eine Ausgabe ähnlich wie:

    Review: Best purchase ever! | Sentiment: Positive
    Review: Returned it immediately. | Sentiment: Negative
    Review: Hello | Sentiment: Neutral
    Review: It works as advertised. | Sentiment: Neutral
    Review: The packaging was damaged but otherwise okay. | Sentiment: Neutral
    
  5. Und anstatt nur den analysierten Enumerationswert anzufordern, können Sie die Textantwort zusammen mit dem analysierten Wert anfordern.

    Definieren Sie einen Datensatztyp , der die Textantwort enthält, und analysierte Stimmungen:

    record SentimentRecord(string ResponseText, Sentiment ReviewSentiment);
    

    (Dieser Datensatztyp wird mithilfe der primären Konstruktorsyntax definiert. Primäre Konstruktoren kombinieren die Typdefinition mit den Parametern, die zum Instanziieren einer Instanz der Klasse erforderlich sind. Der C#-Compiler generiert öffentliche Eigenschaften für die primären Konstruktorparameter.)

    Senden Sie die Anfrage mit dem Datensatztyp als Typargument an GetResponseAsync<T>.

    var review3 = "This product worked okay.";
    var response3 = await chatClient.GetResponseAsync<SentimentRecord>($"What's the sentiment of this review? {review3}");
    
    Console.WriteLine($"Response text: {response3.Result.ResponseText}");
    Console.WriteLine($"Sentiment: {response3.Result.ReviewSentiment}");
    

    Dieser Code erzeugt eine Ausgabe ähnlich wie:

    Response text: Certainly, I have analyzed the sentiment of the review you provided.
    Sentiment: Neutral
    

Bereinigen von Ressourcen

Wenn Sie sie nicht mehr benötigen, löschen Sie die Azure OpenAI-Ressource und die GPT-4-Modellbereitstellung.

  1. Navigieren Sie im Azure Portalzur Azure OpenAI-Ressource.
  2. Wählen Sie die Azure OpenAI-Ressource aus und wählen Sie dann Löschen.

Siehe auch