Partilhar via


Solicite uma resposta com saída estruturada

Neste início rápido, você cria um aplicativo de bate-papo que solicita uma resposta com saída estruturada. Uma resposta de saída estruturada é uma resposta de bate-papo do tipo que você especifica em vez de apenas texto sem formatação. O aplicativo de bate-papo que você cria neste guia de início rápido analisa o sentimento de várias avaliações de produtos, categorizando cada avaliação de acordo com os valores de uma enumeração personalizada.

Pré-requisitos

Configurar o serviço de IA

Para provisionar um serviço e um modelo do Azure OpenAI usando o portal do Azure, conclua as etapas no artigo Criar e implantar um recurso do Serviço OpenAI do Azure. Na etapa "Implantar um modelo", selecione o modelo gpt-4o.

Criar o aplicativo de bate-papo

Conclua as etapas a seguir para criar um aplicativo de console que se conecte ao gpt-4o modelo de IA.

  1. Em uma janela de terminal, navegue até o diretório onde você deseja criar seu aplicativo e crie um novo aplicativo de console com o dotnet new comando:

    dotnet new console -o SOChat
    
  2. Navegue até o diretório SOChat e adicione os pacotes necessários ao seu aplicativo:

    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. Execute os seguintes comandos para adicionar segredos de aplicativo ao seu endpoint do Azure OpenAI, nome do modelo e ID do locatário.

    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>
    

    Observação

    Dependendo do seu ambiente, o ID do locatário pode não ser necessário. Nesse caso, remova-o do código que instancia o DefaultAzureCredentialarquivo .

  4. Abra o novo aplicativo no editor de sua escolha.

Adicionar o código

  1. Defina a enumeração que descreve os diferentes sentimentos.

    public enum Sentiment
    {
        Positive,
        Negative,
        Neutral
    }
    
  2. Crie o IChatClient que se comunicará com o modelo.

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

    Observação

    DefaultAzureCredential Procura credenciais de autenticação do seu ambiente ou ferramentas locais. Você precisará atribuir a Azure AI Developer função à conta usada para entrar no Visual Studio ou na CLI do Azure. Para mais informações, consulte Autenticar nos serviços de IA do Azure com o .NET.

  3. Envie uma solicitação para o modelo com uma única revisão do produto e, em seguida, imprima o sentimento analisado no console. Você declara o tipo de saída estruturada solicitado passando-o como o argumento "type" para o método de extensão ChatClientStructuredOutputExtensions.GetResponseAsync<T>(IChatClient, String, ChatOptions, Nullable<Boolean>, CancellationToken).

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

    Este código produz uma saída semelhante a:

    Sentiment: Positive
    
  4. Em vez de analisar apenas uma avaliação, você pode analisar uma coleção de avaliações.

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

    Este código produz uma saída semelhante a:

    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. E em vez de solicitar apenas o valor de enumeração analisado, você pode solicitar a resposta de texto junto com o valor analisado.

    Defina um tipo de registro para conter a resposta de texto e o sentimento analisado:

    record SentimentRecord(string ResponseText, Sentiment ReviewSentiment);
    

    (Este tipo de registro é definido usando a sintaxe do construtor primário . Os construtores primários combinam a definição de tipo com os parâmetros necessários para instanciar qualquer instância da classe. O compilador C# gera propriedades públicas para os parâmetros primários do construtor.)

    Envie a solicitação usando o tipo de registro como o argumento type para 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}");
    

    Este código produz uma saída semelhante a:

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

Limpeza de recursos

Se você não precisar mais deles, exclua o recurso OpenAI do Azure e a implantação do modelo GPT-4.

  1. No Portal Azure, acesse o recurso OpenAI do Azure.
  2. Selecione o recurso Azure OpenAI e, em seguida, selecione Excluir.

Ver também