Exercício - Instale o SDK do .NET para Azure OpenAI e crie seu primeiro aplicativo
Agora que já entendemos as finalizações de texto e chat, vamos criar um aplicativo básico que as use.
Você trabalha para uma organização que ajuda os caminhantes a explorar o ar livre, recomendando trilhas. Você está considerando adicionar uma IA conversacional à funcionalidade de recomendação e gostaria de criar um protótipo.
Você decide que precisa usar a API de conclusão de bate-papo fornecida pelo modelo GPT-35-Turbo.
Criar o recurso do Azure OpenAI
A primeira etapa é criar o recurso Azure OpenAI e implantar o modelo. Vamos usar o modelo GPT-3 Turbo neste exercício. Como a documentação observa, o GPT-3.5 Turbo usa a API de Conclusão de Chat e é ótimo para o nosso caso de uso.
Pré-requisitos
Uma subscrição do Azure
Acesso concedido ao Azure OpenAI na assinatura desejada
Atualmente, o acesso a este serviço é concedido apenas por pedido. Você pode solicitar acesso ao Azure OpenAI preenchendo o formulário em https://aka.ms/oai/access.
CLI do Azure instalada
Criar um recurso e implantar um modelo
Criar o recurso e implantar o modelo é um processo de várias etapas. Use a CLI do Azure, pois ela pode ser mais rápida do que usar o portal do Azure. Mas observe que você pode usar o portal do Azure, se desejar.
Execute o
az login
comando para iniciar sessão, caso ainda não o tenha feito.Ao criar um novo recurso do Azure, você pode criar um novo grupo de recursos ou usar um existente. Este comando mostra como criar um novo grupo de recursos. Use o nome HikingConversations-RG , mas você pode substituir o nome de sua escolha ou usar o nome de um grupo existente.
az group create \ --name HikingConversations-RG \ --location eastus
az group create ` --name HikingConversations-RG ` --location eastus
Execute o seguinte comando para criar um recurso OpenAI no grupo de recursos HikingConversations-RG . Nomeie o recurso OpenAI HikingConversationsAI.
az cognitiveservices account create \ -n HikingConversationsAI \ -g HikingConversations-RG \ -l eastus \ --kind OpenAI \ --sku s0
az cognitiveservices account create ` -n HikingConversationsAI ` -g HikingConversations-RG ` -l eastus ` --kind OpenAI ` --sku s0
Em seguida, queremos implantar o modelo GPT-35-Turbo no recurso OpenAI que criamos. Chame a implantação do modelo de HikingRecommendationTurbo. Observe que estamos usando HikingConversations-RG como o nome do grupo de recursos, HikingConversationsAI como o nome do recurso OpenAI, se você usou valores diferentes, certifique-se de substituir esses valores.
az cognitiveservices account deployment create \ -g HikingConversations-RG \ -n HikingConversationsAI \ --deployment-name HikingRecommendationTurbo \ --model-name gpt-35-turbo \ --model-version "0301" \ --model-format OpenAI \ --scale-settings-scale-type "Standard"
az cognitiveservices account deployment create ` -g HikingConversations-RG ` -n HikingConversationsAI ` --deployment-name HikingRecommendationTurbo ` --model-name gpt-35-turbo ` --model-version "0301" ` --model-format OpenAI ` --scale-settings-scale-type "Standard"
Depois que o recurso e o modelo tiverem sido criados, precisamos obter a URL base e as chaves de acesso para que o SDK do .NET possa acessar o recurso do Azure OpenAI. Use estes comandos para obter as chaves de ponto de extremidade e API primária e anotá-las para uso posterior:
O parâmetro de avaliação
az cognitiveservices account show \ -g HikingConversations-RG \ -n HikingConversationsAI \ --query "properties.endpoint"
az cognitiveservices account show ` -g HikingConversations-RG ` -n HikingConversationsAI ` --query "properties.endpoint"
A chave de API primária
az cognitiveservices account keys list \ -g HikingConversations-RG \ -n HikingConversationsAI \ --query "key1"
az cognitiveservices account keys list ` -g HikingConversations-RG ` -n HikingConversationsAI ` --query "key1"
Crie o aplicativo de console e adicione o OpenAI SDK
Em seguida, queremos criar um aplicativo .NET Console básico e adicionar o SDK do Azure OpenAI.
Execute o seguinte para criar um novo aplicativo .NET chamado HikingConversationsAI.
dotnet new console -n HikingConversationsAI
Mude para o diretório HikingConversationsAI recém-criado.
cd HikingConversationsAI
Em seguida, adicione o SDK do Azure Open AI.
dotnet add package Azure.AI.OpenAI --prerelease
Abra o projeto no VS Code ou Visual Studio.
No arquivo Program.cs, exclua todo o código existente.
Adicionar
using Azure.AI.OpenAI;
ao topo de Program.cs.Adicionar
using Azure;
ao topo de Program.cs.Adicione três variáveis de nível de classe que contêm referências ao ponto de extremidade do recurso OpenAI do Azure, a chave de API primária e o nome do modelo implantado.
string openAIEndpoint = "<YOUR ENDPOINT URL VALUE>"; string openAIAPIKey = "<YOUR PRIMARY API KEY VALUE>"; string openAIDeploymentName = "HikingRecommendationTurbo";
Nas etapas acima, nomeamos a implantação de HikingRecommendationTurbo, se você usou um valor diferente, certifique-se de usá-lo.
Por fim, instancie a classe necessária para se comunicar com o recurso OpenAI do Azure.
var endpoint = new Uri(openAIEndpoint); var credentials = new AzureKeyCredential(openAIAPIKey); var openAIClient = new AzureOpenAIClient(endpoint, credentials);
Criar o prompt do sistema
Vamos criar o prompt de função inicial do sistema que fornecerá as instruções iniciais para o modelo.
Primeiro, crie o prompt que instrui o modelo como você gostaria que ele agisse durante a conversa ao recomendar caminhadas.
var systemPrompt = """ You are a hiking enthusiast who helps people discover fun hikes. You are upbeat and friendly. You ask people what type of hikes they like to take and then suggest some. """;
Em seguida, crie um
List<ChatMessage>
para armazenar todas as mensagens que serão enviadas de e para o modelo.List<ChatMessage> chatHistory = new();
Em seguida, crie um novo
SystemChatMessage
objeto e adicione-o àchatHistory
lista. Definiremos aChatMessage
função a ser vinda do Sistema.SystemChatMessage systemMessage = ChatMessage.CreateSystemMessage(systemPrompt); chatHistory.Add(systemMessage);
Iniciar a conversa
Em seguida, enviaremos a primeira mensagem para a modelo, iniciando a conversa.
Crie um prompt para o usuário e adicione-o
chatHistory
à mensagem como um usuário.string userGreeting = """ Hi there hiking recommendation bot! Can't wait to hear what you have in store for me! """; UserChatMessage userGreetingMessage = ChatMessage.CreateUserMessage(userGreeting); chatHistory.Add(userGreetingMessage); Console.WriteLine($"User >>> {userGreeting}");
Agora você precisará obter uma referência ao
ChatClient
objeto. Este objeto é responsável por facilitar as conversas de bate-papo com o modelo. Como tal, você precisará informar ao objeto do Cliente OpenAI do Azure qual modelo implantado deseja usar.var chatClient = openAIClient.GetChatClient(openAIDeploymentName);
Em seguida, chame a
CompleteChatAsync
ChatClient
função da classe que passa nochatHistory
.var response = await chatClient.CompleteChatAsync(chatHistory);
Por fim, leia o valor que o modelo devolveu.
Console.WriteLine($"AI >>> {response.Value.Content.Last().Text}");
Vamos ver o que temos até agora, você pode executar o aplicativo entrando
dotnet run
no terminal.Experimente alterando o
userGreetingMessage
valor do para ver como o modelo pode responder de forma diferente.
Em um exemplo executado, recebemos o seguinte:
Hello! Great to hear from you. What type of hikes are you interested in? Do you enjoy easy scenic walks, challenging trails, or something in between? Do you prefer hikes with waterfalls, mountain views, or unique geological formations?
Você pode receber algo diferente, pois o modelo é não determinístico, ou pode produzir uma saída diferente, mesmo com a mesma entrada.
Continuar a conversa
Vamos continuar respondendo à conversa e, em seguida, divulgando a resposta.
Certifique-se de que mantemos o contexto da conversa, portanto, adicione a resposta que voltou diretamente à
chatHistory
lista.var assistantMessage = ChatMessage.CreateAssistantMessage(response.Value.Content.Last().Text); chatHistory.Add(assistantMessage);
Em seguida, crie outro prompt do usuário e envie-o para o modelo.
var hikeRequest = """ I would like a strenuous hike near where I live that ends with a view that is amazing. """; Console.WriteLine($"User >>> {hikeRequest}"); UserChatMessage hikeMessage = ChatMessage.CreateUserMessage(hikeRequest); chatHistory.Add(hikeMessage); response = await chatClient.CompleteChatAsync(chatHistory); Console.WriteLine($"AI >>> {response.Value.Content.Last().Text}");
Você pode experimentar alterando a
hikeRequest
variável para solicitar diferentes tipos de caminhadas. Em um exemplo de execução, recebemos:Great choice! If you're up for a challenge, I recommend checking out the hike to Poo Poo Point in Issaquah, Washington. The hike is 7.2 miles roundtrip, with an elevation gain of 1,858 feet, so it's definitely a workout. But the stunning views of Mount Rainier and the Cascade Mountains make it all worthwhile. Plus, you'll get to see paragliders taking off from Poo Poo Point. It's a popular hike, so I recommend going early to avoid crowds. Let me know if you need more information!
Resumo
Agora podemos usar o SDK do Azure OpenAI junto com o gpt-35-turbo
modelo para criar conversas que ajudam a fornecer recomendações de caminhadas. Em seguida, vamos ver como podemos melhorar os prompts que enviamos para o modelo.