Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
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
- .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 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.
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 diretório
SOChate 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 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 .
Abra o novo aplicativo no editor de sua 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 Procura credenciais de autenticação do seu ambiente ou ferramentas locais. Você precisará atribuir a
Azure AI Developerfunçã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.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: PositiveEm 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: 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);(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.
- No Portal Azure, acesse o recurso OpenAI do Azure.
- Selecione o recurso Azure OpenAI e, em seguida, selecione Excluir.