Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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
- .NET 8 ou uma versão posterior
- Visual Studio Code (opcional)
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.
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 newcomando:dotnet new console -o SOChatNavegue até o
SOChatdiretó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.UserSecretsExecute 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.
Abra o novo aplicativo em seu editor de escolha.
Adicionar o código
Defina a enumeração que descreve os diferentes sentimentos.
public enum Sentiment { Positive, Negative, Neutral }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 Developerfunçã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.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: PositiveEm 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: NeutralE 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.
- No Portal do Azure, navegue até o recurso OpenAI do Azure.
- Selecione o recurso do Azure OpenAI e selecione Excluir.