Compartilhar via


Solicitar uma resposta com saída estruturada

Neste início rápido, você cria um aplicativo de chat que solicita uma resposta com saída estruturada. Uma resposta estruturada de saída é uma resposta de chat que é de um tipo que você especifica em vez de apenas texto simples. O aplicativo de chat criado neste início rápido analisa o sentimento de várias revisões de produto, categorizando cada revisã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 OpenAI do Azure 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 gpt-4o modelo.

Criar o aplicativo de chat

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 SOChat diretório 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 do aplicativo para o ponto de extremidade, nome do modelo e ID do locatário do Azure OpenAI:

    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, a ID do locatário pode não ser necessária. Nesse caso, remova-o do código que instancia o DefaultAzureCredential.

  4. Abra o novo aplicativo em seu editor de 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 pesquisa credenciais de autenticação de seu ambiente ou ferramenta local. Você precisará atribuir a Azure AI Developer função à conta usada para entrar no Visual Studio ou na CLI do Azure. Para obter mais informações, consulte Autenticar-se nos serviços de IA do Azure com .NET.

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

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

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

    Sentiment: Positive
    
  4. Em vez de apenas analisar uma única revisão, você pode analisar uma coleção de revisõ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}");
    }
    

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

    (Esse 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 do construtor primário.)

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

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

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

Limpar os recursos

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

  1. No Portal do Azure, navegue até o recurso OpenAI do Azure.
  2. Selecione o recurso do Azure OpenAI e selecione Excluir.

Consulte também