Delen via


Een antwoord aanvragen met gestructureerde uitvoer

In deze quickstart maakt u een chat-app die een antwoord aanvraagt met gestructureerde uitvoer. Een gestructureerd uitvoerantwoord is een chatantwoord dat van een type is dat u opgeeft in plaats van alleen tekst zonder opmaak. De chat-app die u in deze quickstart maakt, analyseert het gevoel van verschillende productbeoordelingen en categoriseert elke beoordeling op basis van de waarden van een aangepaste opsomming.

Vereiste voorwaarden

De AI-service configureren

Als u een Azure OpenAI-service en -model wilt inrichten met behulp van Azure Portal, voert u de stappen in het Een Azure OpenAI-serviceresource maken en implementeren artikel uit. Selecteer in de stap Een model implementeren het gpt-4o model.

De chat-app maken

Voer de volgende stappen uit om een console-app te maken die verbinding maakt met het gpt-4o AI-model.

  1. Navigeer in een terminalvenster naar de map waar u uw app wilt maken en maak een nieuwe console-app met de dotnet new opdracht:

    dotnet new console -o SOChat
    
  2. Ga naar de map SOChat en voeg de benodigde pakketten toe aan uw app:

    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. Voer de volgende opdrachten uit om app-geheimen toe te voegen voor uw Azure OpenAI-eindpunt, modelnaam en tenant-id:

    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>
    

    Opmerking

    Afhankelijk van uw omgeving is de tenant-id mogelijk niet nodig. In dat geval verwijdert u deze uit de code die de DefaultAzureCredential instantieert.

  4. Open de nieuwe app in uw editor naar keuze.

Code toevoegen

  1. Definieer de opsomming die de verschillende sentimenten beschrijft.

    public enum Sentiment
    {
        Positive,
        Negative,
        Neutral
    }
    
  2. Maak IChatClient die met het model zal communiceren.

    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();
    

    Opmerking

    DefaultAzureCredential zoekt naar authenticatiegegevens uit uw omgeving of lokale hulpprogramma's. U moet de Azure AI Developer rol toewijzen aan het account dat u hebt gebruikt om u aan te melden bij Visual Studio of de Azure CLI. Zie Verifiëren bij Azure AI-services met .NETvoor meer informatie.

  3. Verzend een aanvraag naar het model met één productbeoordeling en druk vervolgens het geanalyseerde gevoel af op de console. U declareert het aangevraagde gestructureerde uitvoertype door het door te geven als het typeargument aan de ChatClientStructuredOutputExtensions.GetResponseAsync<T>(IChatClient, String, ChatOptions, Nullable<Boolean>, CancellationToken) extensiemethode.

    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}");
    

    Deze code produceert uitvoer die vergelijkbaar is met:

    Sentiment: Positive
    
  4. In plaats van slechts één beoordeling te analyseren, kunt u een verzameling beoordelingen analyseren.

    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}");
    }
    

    Deze code produceert uitvoer die vergelijkbaar is met:

    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. En in plaats van alleen de geanalyseerde opsommingswaarde aan te vragen, kunt u het tekstantwoord samen met de geanalyseerde waarde aanvragen.

    Definieer een recordtype dat het tekstantwoord en het geanalyseerde sentiment bevat:

    record SentimentRecord(string ResponseText, Sentiment ReviewSentiment);
    

    (Dit recordtype wordt gedefinieerd met behulp van de syntaxis van de primaire constructor . Primaire constructors combineren de typedefinitie met de parameters die nodig zijn om een exemplaar van de klasse te instantiëren. De C#-compiler genereert openbare eigenschappen voor de primaire constructorparameters.)

    Verzend de aanvraag met behulp van het recordtype als het typeargument naar 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}");
    

    Deze code produceert uitvoer die vergelijkbaar is met:

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

De hulpbronnen opschonen

Als u deze niet meer nodig hebt, verwijdert u de Azure OpenAI-resource en GPT-4-modelimplementatie.

  1. Navigeer in de Azure Portalnaar de Azure OpenAI-resource.
  2. Selecteer de Azure OpenAI-resource en selecteer vervolgens verwijderen.

Zie ook